Core dumped in read_csv (C engine) when reading multiple corrupted gzip files #12098

Closed
alessiodore opened this Issue Jan 20, 2016 · 18 comments

Comments

Projects
None yet
4 participants

I am using read_csv to read some gzip compressed log files. Some of these files are corrupted and they cannot be uncompressed.
At different iterations in the loop that reads these files my script crashes with a core dumped message:
*** Error in `/usr/bin/python': corrupted double-linked list: 0x0000000003836790 ***
or just:
Segmentation fault (core dumped)

This is a stripped-down version (just looping over one of the corrupted files) of the code where this error occurs:

import pandas as pd

for i in xrange(n):
    try:
         pd.read_csv(fPath,delim_whitespace=True,header=None, compression='gzip')
    except Exception,e:
         continue

The traceback of the catched exception is:

File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 498, in parser_f
return _read(filepath_or_buffer, kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 285, in _read
return parser.read()
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 747, in read
ret = self._engine.read(nrows)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 1197, in read
data = self._reader.read(nrows)
File "pandas/parser.pyx", line 766, in pandas.parser.TextReader.read (pandas/parser.c:7988)
File "pandas/parser.pyx", line 788, in pandas.parser.TextReader._read_low_memory (pandas/parser.c:8244)
File "pandas/parser.pyx", line 842, in pandas.parser.TextReader._read_rows (pandas/parser.c:8970)
File "pandas/parser.pyx", line 829, in pandas.parser.TextReader._tokenize_rows (pandas/parser.c:8838)
File "pandas/parser.pyx", line 1833, in pandas.parser.raise_parser_error (pandas/parser.c:22649)
CParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.

If I remove the delim_whitespace argument the loop completes without segmentation fault. I tried adding low_memory=False but the program still crashes.
I am using pandas version 0.17.1 on Ubuntu 14.04 OS.

It looks like a similar issue to #5664 but the problems should have been resolved in v0.16.1

Contributor

jreback commented Jan 20, 2016

pls show an example with data as minimal as possible. why does looping matter here?
pls show pd.show_versions()

jreback added the CSV label Jan 20, 2016

Sorry I forgot to attach the file. Here it is:
[link removed]
I renamed it to zip to attach it but it is a gzipped file.

The loop is to reproduce the problem without having to attach multiple files.
This is the output of pd.show_version():
In [4]: pd.show_versions()

INSTALLED VERSIONS

commit: None
python: 2.7.6.final.0
python-bits: 64
OS: Linux
OS-release: 3.13.0-55-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_GB.UTF-8

pandas: 0.17.1
nose: 1.3.7
pip: 1.5.4
setuptools: 18.6.1
Cython: 0.20.1post0
numpy: 1.10.4
scipy: 0.16.1
statsmodels: None
IPython: 1.2.1
sphinx: None
patsy: None
dateutil: 2.4.2
pytz: 2015.7
blosc: None
bottleneck: None
tables: 3.2.0
numexpr: 2.4.3
matplotlib: 1.4.3
openpyxl: None
xlrd: None
xlwt: 0.7.5
xlsxwriter: None
lxml: 3.3.3
bs4: 4.3.2
html5lib: 0.999
httplib2: 0.8
apiclient: 1.2
sqlalchemy: 0.9.8
pymysql: None
psycopg2: None
Jinja2: None

Contributor

jreback commented Jan 20, 2016

@alessiodore can you see if you can narrow it down a bit more pls. e.g. keep chopping untill you don't get the error then back up

I am not sure this is what you mean but I changed my script to:

import pandas as pd
import StringIO
with open(fPath) as f:
    log = f.read()
for i in xrange(200):
    try:
        pd.read_csv(StringIO.StringIO(log[:9657]),compression='gzip',delim_whitespace=True)
    except Exception,e:        
        print(e)

When I slice the file to 9656 I don't get the segmentation fault. At 9657 it gets the segm fault.

Contributor

jreback commented Jan 20, 2016

great. so extract the slice that is causing the error. we need a simple, copy-pastable example in order to pinpoint the problem, I don't want a file, rather a string of characters that repro. further try with and w/o the gzip to see if that is the problem. The more you can narrow it down the better.

I tried to slice the left part of the file (log[n:9657]) but I got the segm fault only for n=0. Also I tried for log[1:len(log)] and I didn't get the segm fault.
Unfortunately I cannot try without gzip as I don't have access to the original data and this gzipped file is corrupted.
What I can do is to paste here the string log[:9657] if that makes sense. Thanks!

Contributor

jreback commented Jan 20, 2016

yes, ideally what you can do is something like:

data = """
.....
"""
pd.read_csv(StringIO(data),.....)

e.g. a complete copy-pastable example that repros. Then we can use this to debug and as a test.

I know narrowing down is not so fun :< but in order fix these issues much better to have a simple example.

thanks!

I understand. I wasn't just entirely sure if it was okay to post a 10K characters string.

import pandas as pd
import StringIO

data = '\x1f\x8b\x08\x00ST\x97V\x00\x03-\xca1\x0e\x021\x0cD\xd1\x9eSX\xa2vA\xcb\x01\xb8\x06\n\xc9\x00\x16\x9b\xcd\xca\xe3H\xc0\xe9I\x80\xee\xcd\xe8\xefO\x86\xa5\xf0(a\x15\x8cT\xb7\xaf4\xd2\x03\xabd\xb5M\xae\xb6\x80\xf6\x86p.\xea\xd6<\x84YG\x1d\x9dS\x97W\x80\x92\xa9\x15qoe\xaa\xbb\x8d\x00UT\x9cZ\xba\xa7\xb0\xb6N\xffcu\\\xe1\x0e\x1f\xec\x84k\xbaa\r\xc9\x9d\xd1\xea\x98V\xe4\xa9\xc8\xe7\xdf\xa1\x87\xdd\x07;\xcf\x84\x0e\xaa\x00\x00\x00\x1f\x8b\x08\x00ST\x97V\x00\x03\xed]kS\x13M\x16\xfe\xbe\xbf\xa2\x8b\x0f\x96VIO\xdf//emqQd%J\x19Dw\xb7\xb6R\x81\x8c0\xaf!I%A|\xdf_\xbfg&\t\x82\xc4\x10zf\xc2\xa4{\xd4\x98\x04\xe6\x92~\x9e\xd3\xa7\xcf\xe9s\t\x15\x92i)5\xb3\x88 \xc6\x18\xa6\x92aF\t<S\xc4\x84\x96\xc2\x08D\xa9\xc6\xd4`\xc6%\xa6\x94"C\xd0\xf1\xeeQ\xeb\xed\xc1q\xc4\x88B\x82I\xb4\xff\xfa\x18]\x8c\xc7\x83?\xa2(\xee\x9c\xc7\x9b\xdf\x93\xce\x08_\'\xc3\xf8\xba\xfd\x03\x9f\xf5/#C^\x1b\xbd\x1dM\x7f\x94\xfe>\xee\x8f"x\xdak\x8f\xdb\xf0[F\x15S\xb3\xe7\x165\xe4}\xff(\xf9\x11w\xf1\xe5@\xa0M\xf8l\x8a\x12\xb41\xbb\xc5\xe5i\xdc\xf9\xe5\xf2\x8cZ\xa6#}\xda\xfe\xda6\xd1\x06\xdah\xf4\xffN\xba\xddv$1A\xcf\x93\xa3\x8b~/\xdeB\xbbG\x9f\xd0\xe45\xfa\xd0D\xa6\xc5Q7\xf9\x16\xa3F\xfb,}\xff\xe5\x05\xda\x1e\x0c\xba\xf1\xe7\xf8\xf4]2\x8e\x14\x01\x14\xb0@\xcf\xdf\xbd=n\x1c\xbe\x9c\x1c\xba\x1f\x9f}\xeb\xbf@\'\xf1p\x94\xf4{\x91\x81\xab7\xfa\xa7I7\x8e({\xa3\tj\xc2\xfd\x87\xc9\xec\xdc\r$\xad\xa4\x02mln\xa0\x7f\xd0\xfcP\xa7GYjW\x02\xb7\xaa\xe1f\x82\x0b\xab\xf8*\xe0f\xb5t#\xc6\xad \xa4\x86\xfb1ps\xe2\x0c\xb7\xa1\x9c\xadF\x95h_\xc0\xa6)\xd8\x84cJ,f\xf0\x80!#j\xb8\x80_\xfc\x1ekN\x04\xe2\x9a\x16\x81t\n\xd4\x04\x85(\x19\xa4O\xcd\xc10\x19\xc7\xa6\xc5\xf6\xf0\x9f\x83\xf3\x0cnm\x0b\x87\xdb\xb6\xd8b\xb8i\n\x99\x9a\x8b\xf7\x0cc\xbe\xab%\xfa\xef\x9b\x9d\xed\xf7\xd1\x9b\x9d\x83\x0f\xcd-xy\x12\t\x85\t\xfc\x95\x02\xe4V\xc1\x8fvN"j\xacf\x86Zx\xb7w2\x1d\xadz\xc9\xe0mco\xfa\x16^7\xdfG7\x9f/}{\x12\x01#\xe9\x8bf\xc4\xb6\xd0\x9b\x9d\xdd\x8fQs\xd0\x1e~{\xff\x1f\xf8\xe1\xc1^4\x98\x9ew\xb8\x1b\xc5\xbd\xd6\xa7\xf4\x9c\x0fG\x91\xfc\xdf\\\x9e%\x99\xc7\xb3\x92F\xe9\'\xe5\x99\x92\xbbD\x9b\x9a\xe8|D[\x8b@U\x02\xab\x19\xd9\x82\x83\x06\xe5\x98#\xa6\xad\xe0\x8c\xc8\x87\xd6+F45\xb4\x00\xeb\x17\xa00f\xf6\xdc\xd2\x8c\xdc(O\r\xb7]D\xf2\xe4\xcc7\xd9\x9f\x7f\x8e\xbe%\xbdWM\xf8o\xa7=\x8cO\x01\x87\xd1\xb3\xec\x9c\xc3\xfe\xd9\xab\xed\x9d\xddg\x9dd\xd4>\xed\xc6\xaf\x7f\x8c\xe3a\xaf\xdd=\x1e\xb6\xcf\xe0\xe0\xf3W\xe3\xe1U\xfcltu:N\xc6\xddx\xf4jz\xbb\x11\xdf\x8c\xaf6\xaf\xe3\xd1x\x93\xe2\xf6e\xfb\xef~\xaf}=\xca\xee;\xea\xf6O7oN\x88\xe2\xc1&\xe3\xf8\xfbx\xfcl\xd0\x1e\x8d\xae\xfb\xc3\xce\xab\xe6!\xd9y\xf6\xab\xd0}Nz\x9d\xfe\xf5\x08\xbd?F\n\xd3\xbb\xb2%\xb9\xc6|\xbed\xed^\x0c\xfb\x97q$4\x08\x10\x93\x0cN\x05\xf0\xa7\xeazr\xda<r\rX\xb0\x14\xa6\xb2p#\x97jb\x88,\xc2\xd6^@\xaef5\xb9n\xe4fK1e\x14[\x93\xfec\x82<\xbc\x103\x92\x1dd\xa4Z\xd5Z\xac\x84\xcc\xa3\xa2\xdb\x9d\x89\x82~j\xcd\xdc\xee\xc8\x97|\xa6\x97\xe1C-\xa5\x95\'\xeax\x9c\xca\xe4\xf8\x9e>\xa6s\xf5\xf1\\V\x1fZv3V\x95b\x96\xadl\xe5U"\x97s\x1c\x1c\xad&\xa5\x15f\xb8f\xa9%\x05\x16\x95\xa8\xe4dU\x8b\xb5q\xb5\xec)\x99\xd1\x0bO\xf6\x86]f,\x984\xb7\xcd)\xe9bN\x9d\xf4;m\x17k\xca\x18v\x9f\xe6*\xce^\xc5k\x9es\xf1<o\x8b\xa7\x92\x13:\xd7\xea[\xf0\xc6\xc3\x9d\xcd\x06G\x9e\xf5\x12<\x1b\xcc\x97\xe5y\x7fg!\xcfv\xde\xdeR5gt\x956\xab\xd7\x8eh\xcbDfvI\xa0\x13X\xe5`\x83W+\xf6\x93\xeer:\xf3{\x98\xf4\xae~l\xa1\xed^g\xd8O:\x08~\xb6\x85\x9a\x8d\xcd}K\xc8\x01\xda\xb9J\xba\x9d\xe8\xf0\xe3\x17F\x8f\xb7\xd0\xf5\xf7\xa5\xdd\x96\xd96\xa2\x80[\xcc\\\x98\xd4\xe2b\xc2\x12\xac\xd5T\x08\xee:2\xa90\xb4\x0e\xb6w@\x1c\xc4\xf6D\x1a\xa4\xcd\xa4\x81J\xcc)\xdf\xfa-;TZ\x17~Hv\x94Q\x85h\xdc\x078\x12\x82f\x1f{\xa3\xd9\xbe\x1c]\xf5\xce\x7fb<\x1a\xb7\xcf\xe3\xaf\xc3\xe4\xfcb\x1c\xed\xc4\x7f\xf5{g09`\xf6\xd8\x197\xb7\xa8yQ\xb0|R\x0e:\xab\x10E\xf4\xd0\xf0\x95(o\xf8\x06n \r\xa6\xa9a%9\xd8WU\\m\xa5(\xc1\xac\xa2\xcef\xd5l\x82\xda[\xfb\xfc|\x87\xc2\x87\xbc\xd9\xe8\x87\xb3\x97\xc6\xbb\x82\xab\x9e\x14\xc2\x13\xc0\xe5d~3\xac(\xd8\x19\x0c\x9c\xd6\xcaEUT\x19\xd2\xed\xee4\xcc\x05;u \x9c\xb0\xaeZdC\x95!\xd9O\x01\xb6f\xb7\x17.\xb8\x01\xaf5w\x99\x8aD\xf3\xfbx\xd7\x9a\xbbL\xc0k\xcd\xbd:ebj\xcd\xbd2\xb0\rE<u\xba\xd2\x03R\xbc\x01Z&\xe4r\xc1C`I0\xad-%\xe5F\x86\x17\xcb\xf5\x1a\x07\x0f\xb7\xd0\xe7\x0f\x9f\x95\xd8B\xc7C\xc0\xa37\x8et\xea\xb4\x0f\xbf\xff\x01*\x9d\xbc\xb8\xc5\xf0\xef\xa8\x93\xda\x8d9\x85$\x01\xe5UnH\xdf\x08oC\xfa\xb9\x89S\x8eSN!a)(\xc5\x9a\xb8\xd5\x13\xa7\x08\xd1\x88IC\x9d\'\x1d\xd3JI\x06\xe7\xd7\xe4\xad\x9e<\x93\x99pTa&\x81<\x0b\xd7\xe3\xba\x8a^\x8a\x02\xddP!\xd3\xa2\x90t7\xf1\x92>>n\xc7:\xf1\xf90\x8eG\x8f\x8e\xdc\x01\xd7j\x1e\xd7\x15\xf4\x90\x94.<A;4\xb2)S7\xe1x&\xe0\xc1y\xa5\x82:J\x14>\x9fMK<\xe4\x06?21\xfc-g\xf4\xe1\xcc\xf0\x1cX\xaf\xb0\xa2G\x96\x10\r_C\xbcWV\xd2#k\xf9^iM\x8fWxkG\xbc\r\xe5\xbc\x00;z\t\xb4KH\xb9x*\xb4\xb3"*\x17\xb4\xa9Q\x9c\xd0B\xb6\xd7\x1e\xc2[\x95P\xb1\xf6Tx\x83\xa3Oa\xf5\xa7\x94`\xce\x00\xd7\x14[\x85\xc0\x03\x94Y\xa1\xcd\xe2\r\x1a8JYQ\x80\xabh\x89\xe4\xb3\xe7\xbb;k|\xf1&\xe6\xe4\xcc\'v\x15G\xf1\xd90\x86\xa3\xe8&[\xc2a\x04\x82\x93\xde\xb8?\xba\xd8B\x07\xbdq\xdc\xbda\x1c\\\xf6\x16\xfc\x93\x8f\xce\xd7\x97Y\xb2\x0b\xd8\xbcF>\x98\xae\xaf\x18\xcdRC\xc1\xbae\x02\x1e\xe0w\xc8j\xe6\xeb\xdb\xc2\xb7\xafa\x96\xe5N${\x9b\xc6b\xee\xb9\x1d\xdc\xc2\x99\x04\x0b\x8a9\x9dz\x1d\x02\x90\xe7\x82=>\x93L\x14\x92\x1a\n<\xcb9<W\xd1\xbf\xb4e\x18\xc3!\x11mnGZA\x89sS\xc9\t]\xfc>\x82n\xd1\xc5;\t\xa9\x1a\x94\x14\xb3\x85T\xd3=&\xb5\xf3V\x02_b+\x01H((\xe3[1F\xe6\xb0]\xc5i\xad\x17o\xf2\xd6t/G\xf7,\xaa/-\xb6\n/\xb3\x1f\xbc\xea"\xf7|q\xe6\xeaT`\xb1\x97r\xd9\n,\xea\\\x81\x05\x8c\xca{\x8cV-u@\xfbR+\xb9"J\x81CpT)\xb8Qii37X\x81\x99\xa0\xd5\xb2)\n\xd9a\xca\x94[\xbc\xfe@\x01\xceZ\xc5\xdc\xe0\xd4A{\x9c\xc0G\xd8B\x8d\xe6\xc1k\xf0\x9c\xd20\xdb\x9dP\x1c\xbb\x17\x8aS\xe91\x8d\xed\xed\x8f\xffj\xceK\xeeVi\x94\xb4\xd6\xb5^MLIj]\xeb\x19\xa5?\xd3\x1c\x196\xa0f\xcd\x12\xbb\x17\xab\x9e\xa5\xc5\xd7\xc0\xe5\xc9)\xbd\x9bG\xeaj\xf8.\xe3\xd3\x02\x1dw\xcd^\xd7v0@\xb3\xbcOs\xe5\xa6\xae*\xa1\xbdS`<[ZO\xe7\x10h\xae\xa7s\x08<\xf3\xc9\xeaL\x05\xf0\x89\x99\xc8\x92\x9b*\xb9\x17\xa9*\x95\x1b_HN\xd3*\x1bO\x00\xd1z\x0e\xd1U\xdc\x86,\xbe\xf1DXL\x0bu\xe3Ci`\x9acxY\xcd)]\xc2*\x1dR\x0bF`\x9a\xcda\xbaz\xabt\xddj3/\xcf?K3\x15\xa6\x9ab[\xd1&`k\xd43\x88LZ\xc90\xcc,\x99\x12-\x99d\x82\xd1\xc7\x12}\xaf\x97\xcc\x02\xa2\x176\x93Qi#\x8c\xfbDWr\x91^\xa3\xa6A\x95d:+HM\x9b\xab\xda\xb4\xd8:\xe5U\x052\xa5\x9f\\y/\xe7a\x15e\x8d\xcd%\xbazk\xb4\x7f}\xcfWKs\xd6\xa63\xe5\x97\nx\x18x0Y\xa9\x92\x11\xcds\x94\xf2\xdf\xeb\x03F\xd3\xca\xb9\xacM\x13\x937\x9d\xc0\x1a\xff\x16\xfa\xcb\x93t\x023\x99D0\x835\x99\xdb\x08,\x17?\xab+3\xd1<G\x17U\x0f8\xe2\xb5;\x13\x82;cd\xbd$\x86\xb0$fi\xae@s\xcag\xda\r\xae\xa2Nk\t\xdf\xb0\x93\xa38\xe4nAH\x993\xda`\xf1k\x1c\xc1\x9dk{\x9f\xebJ\xfa\xad\x85+\xef\x00\xc9\xb6z\xaa\xbf\xc1:\xc2\xb0N\x8b\xa5\xbf\x18D\xb2\x02\xaa\x19\x7f\x9f3\'\x88\x9e4\x12\xcd\xf0\xdf\xed\x0f\xe3F\xdcI\xda\x11\x9d4\x8a\xa5\xfb\x8a\xdf)\xe7\xf94\xaf\xa2G\xb7\xe4\x16\x02\x10\xaeFs\x93\xce\x845\xae\xa3W\x94\x9b\x02\xf4\xda\x82\xf1\xd3\xf2\xc7/AP\x193\xc2\xbaa\xc0\xb4\x16\x0c\xaeT.\x0c\xb6|\x18\xb8u\x15\x03\x06\xd6\xbf)\xb5\xbd\xd5J\xe4\xc0\x1d\x00j5\x15ET!>-\x00\x82\xe4\x92\x80\x02L\xd9E\x00\x98*\x03@9U\xe5vx[\x89\x0ep\x07\x80[\xaee\xc9S`\x15\x00\xd0\xd0%\xc0\x19\x00\xa5\x88.\xd7\x18\xaa\xc7_\xe5\xf1gk\xc0\xfa\x9bA\xb5\x06p\x07 5\x83J\xf6\x07V\x01\x00\x0b\\\x058\x8f\xdf\x97\x19P\x03\x10\xba\x19\xc8C\x97\x00g\x00<\xd1\x81\xf5\xf8\xeb\xf1\xd7\xe3\xaf\x15\xa0\xc3\x12\xc8L\xda\x10g\xed\x01\x10\xa1K\x803\x00\xbex\xc2\xb5\x04\x04\xbe\x08\xe4\x1a\x7f\xa9\xcdD\x04\xa3+\x18\xbf\xac\xc7_\x8f\xdfY\x01\x96\xbb\x02T\x1b\x00#\x99$\xe5\x1aA\xd5\x06@\xc0\xf0K\x0e\tW\x1b\x00\xa9\x15+\xf5;\\*>~_\x04@\xe5\x8a\x06x\xa0\x02\x9c\x01\xf0d\x11\x0c^\x00\x9c\x93\x03\xb3\xcd\xf0r\xe3a\xd5\x06 s\x84=\xd0\x81\xee\t\x92~\xa8\x00\xe7\xf1\xfb\xa2\x02j\x01\x08\xdc\x11r\x06\xc0\x975\xc0=7\xd6\x13\t\xa8\x01\x08\\\x07\xe6\xcb\x0e\xf7`\x11t\x06@H[HM\xd4\x13\x03 \xdd\x93\xa3\x99I\xbf5!\\\x00<\xd1\x81i\x879G\x00$\xd1F\x15Pr\xff\xd4\x08\xe4\xca\x8bX\xffU\xc0}\xfc\x9e\xf8\xc29\x04@JK<P\x82\xf9\xa2\xe2\x1e(\xc1\xc0\xa3\xc2\xee\xe3\xf7\xc5\x0er\x8e\x89x\xe2\x0c\xbb\x03\xe0\xc9\x0c\xa8\xc7\x1f\xb6+\x18\xbc\x00\xb8\xc7\xc4<\xb1\x01\xdc\x01 \xc2\xc2\x11\xeb\x8f\x80sP\xcc\x17\x1d\xe0\x0c\x80\':\xc0=,\xec\xc9n\x90{L$t\x00<\x99\x01\xa1\x07\xc5d\xf0;\xe2\xce\x00x\xa2\x02\x94\xf3\x8e\xb8\'\xbba\xca\xb9Y\x80\':\xc0\x1d\x00O\\\x01w\x00\xfcX\x05s\x08\x80\x1f\x8e\x80rn\x16 \x8c\x80)\x100\x00\x9e4\xceS\xb9\x8a\x85K.\x13\xa98\x00~t\x0et\x07@2a\xd8\xfa\xf7\x0cR\xa1\xd7\xca\xd6\x00\x84^.\xee\x0e\x80\x1f\xd5\xd2\xf5\x0cp\x8e\n\xf92\x03\xf2\xc5\x05=X\x05\xf3e\x06\xac\x7f\xdf0\xe5\x1c\x17K\xb3\x03\xb5\x07:\xc09*\x92m\x89\x86\x0c@\xba\xa1n\xd7\xbfo\x90r\x8f\x8ax\x02@\xaeB\t\x0f\xec\xa0\\A\x01\x0f:g\xe9\\u\x02A\x03\xe0\x89%\\\x03\x10z\x0fiw\x00\xa4%\\\xad\xbf/\xa4\xf3m\x8a\x87\x0c\x80/: \xf06\xea\xee\xe3\xcf\xcc\x80\x92k\xc5\xc8\n\x00\xc8\xd5B\xd5\x83\xec\x10w\x00<\xc9\rp\x07\xc0\x93j9\x1dx\xad\x94\xfb\xf8\x83\x17\x00_\x00\x08\xbdV\xc6\x1d\x00OT@=\xfez\xfc\xf5\xf8\xc3\x1d\x7f\xe8\xb5r5\x00\x81wP\xad\x05\xc0\x19\x00_6\x02\xdc\x8bE=\x91\x80\x1a\x80\xd0\xdd g\x00\xb2\x0ca\x0f\x00p\xce\x8b\xf0e\' \xf4&\xb25\x00\xce\x99!\xbeL\x01g\x00\xb2\xa8\xf0\xfa\x03`\xdcSc\xfc(\x17u\x07\xc0\x0f_\xc8\x84^.\xeb\x0e\x80\'v\x90q\x0e\x8b\xfb\x02\x80sH\xc8\x13o\xd8\x1d\x00Ot\xa0\xbb\x00x\xb2\x08\x06\xbe%\xee>\xfe\xacJ\xc4\x83E0\x05\x802\t\xc3\x84\xd1r\x05\xd7ELh)`j,\x02\x80dG\x19U\xc0\x14`\x14\\\x8a\xd9s\x8b\x1a\xf2\xbe\x7f\x94\xfc\x88\xbb?\x81\xd0\xd3\xba\xe9f\xfbrt\xd5;G\xcd\xc6\xe6\xbe%\xe4\x00\x8d\xc6\xed\xf3\xf8\xeb09\xbf\x18G;\xf1_\xfd\xdeY\x0c\xf0Pl\xd1\xf3\xc3\xa4w\xf5ck\xbb\xd7\x19\xf6\x93\x0e\x92\x98\xfcf\xfc\xcam\xfc\x99\x15$\x8b\xb0\x82\x1e\x1c\xbe$\xa4\xdc\xe1\x07m\x04\x86\xfe\x9dj&\xf4\xfd\xe0\x0c\x80\x905`\xe8\xfb\xe1\xee\x00\xf8\xe2\x05\x84\xbe\x1bZ\x03\x10z\x03\xd1\x1c\x12\xe0\x89\x12\x0c\xfc;\xc5\xdc\xc7\xef\x8b\np\x8f\x08I\xe1\xc1\xf7\xcb\xe7\x10\x00?\x1a\x87\xb9\x03\x90\xed\x85\x95\\&\xb8\x02\x00l\xbeb\xf1r\x1b\xe9SSe\x00\xfc(\x13t\x1f\xbf\'\x85\xb26\xf4Z\xf1\x1c\x00\xf8Q)l\xf3\x85\x04=\x90\x80|\xfdCC\x06\xc0\x93v\t6\xf4\xe6\x81\xee\x00xb\x06\xb8\x8f\xdf\x8f\xb6Y\xd6\xbdP\xd4\x93\x19\x90+*\xee\xc1\x0c\xa8\x05\xa0\x06 \xec\x19\x90\xabP.\xe4\xf1\xfb2\x01\x9c\x01\xf0e/\xc0\x19\x00O\xda\xc7\xda|\x89\x11!\x03\xe0\xcb\x14\xa8\x01\x08}3\xc49,\xecI\x13q\x9b/*\xe6\x81\x04\xd4\x00\xe4\n\x0b\x96\x9c\x19P~\xefDE\xf2E\x85\xd6\xbeR0\x07\x00^\xa4\x86\xd4\x02\xe0\x0e\x80\x1f\xb91\xf5\x0cp\x0f\x8b\x12ai\xc9\xa9\x11\xe5# \x89\x12\x88\t\xa4a\xa8\x0c[\xb8\xaa\xe5\xb0\xfar\x01\x8b#\x0c\x9b\x08\xac\x04\xa6J\xceF\xff\xfa\xcb\xd1\xc1\xc7\xd7{7\x89\xe2p\xa8\xa5E\xe4\x89\x03\xe24J\x8e.\xfa\xbd8J\x06\xe9Ss0L\xc61e-\xb6\x87\xff\x1c\x9c\x03"\x8a"+\x0c\xda\x98\xdd\xe9\xf24\xee\xfcr\x97\xc9u\xf4\xce\xf6\x9bm\x13\x01r\x8d\xfe\xdfI\xb7\xdb\x8e$&\xe8\xf9\xe4\xf2[h\xf7\xe8\x13\x9a\xbcNQ\xd2-\xdab\xa8\x9b|\x8bop{\x812\xc4?\xc7\xa7\xef\x92q$\xb9\xc6\x92b\x86\x9e\xbf{{\xdc8|99v?>\xfb\xd6\x7f\x81\xf6\x9b\xdb\x11M\xe9P\x9c0\x86\x1a\xfd\xd3\xa4\x1bG\x94\xee1\xa9Q\xb3\xfd\xb5=L"\x9b]\x81\xcf\x83\x9f\t\x82(b i\x86b\x057\xd1\x8b\xd0\xbf\x8d:+@\xfb.\x85:AR\xd0\xa2A\xb7\x8b!\x87y\x89)\x06\x1bs\x1e\xe4\'\xf1p\x94\xf4{\x91\x85\xcb\xcf\xf0\xe6\xbb\xa0\x8c\xa6pg\'\xcf\x03[du\xd1\xc6`\xa5\xb1eX\xd3*b\xcd\xad\x17X\x1b\x05\x82m\x0c\xb2\x14\x1b\x9b*\x16\x9dJ6IK\x12~\xa2\r\xbf\x9f\xa2\xdd8h6\xa7p\x13[\xc4\x16\xdb\xef\xe1\x96?\xe1f\xd2\xc2\r\xa9dk\x8e\xf9\xff\x01\xf4\xde\x9b\xa2S;\x01\x00\x1f\x8b\x08\x00TT\x97V\x00\x03]NMO\xc2@\x14\xbc\xfb+^z\x82D\xf6\xedgwWO\x15\x10\r6\x92\x14?nd\x81\x15V\n\xdb\x94F\x8d\xbf\xde6\xd5\x8b\xa7yof\xde\xcccRq\xad\x94I50K\xc12b,\xb1\x94h\rR\x08!-(\xc2\xa8$\xa9$L\x1a0\x14\x96\xe3\xc5*\xbf/\n\xe4\x94v\x1e\xad8\xcc\xa6K\xd87Mu\x85\xe8\xb7;?\xfa\x08\xdb3\xf9\x0c\xb5\xfft_d\x13\x8fh\xe8\xd4\xe8\x0c\x7f\xa9N\xf7\xf1\x8c-L\\\xe3Z\x95\x0bN\x19\x86\xc5>\x9e<\x86\xaa\x83\xa2\xaaC\xe39[\xf1\ty\xafv0\x02\xd1> \x85\xe4\x96A\xf2\xd7v\\\xfb\xed\xbf\xa6>K\xdfd\xb7\x99\xc1\x04\x92<~\x87\xb2t\xa8\x08\x85A_q\r\xe3\xc5\x13\xf43<\x16`W\x1c\xcap\xf0\x90\xbbM\xb7\xbf\x0e!\xab\xaa\xd2\xbf\xf8\xf5<4\x98RF\x18\x91)\x0c\xe6w\xcb\xfc\xe1\xb2\xf7\xce\xfc\xe6\x10\x87\xf0\xec\xebs\x88\'\xb4m|\x1e\xd7\xa1\xf4\xc8\xc4X+(\xdc\x9b\xabC\x7f\x9c\x80\xb2\x8aIHF\t\\\xfc\x00\x8e\xb0\xb7Pt\x01\x00\x00\x1f\x8b\x08\x00UT\x97V\x00\x03\xed]ko[\xc7\x11\xfd\xde_q\xe1O\t\x10\x93\xfb~T(\n\xbf\xe2\x18\xb1\x1c#\xb2\xdd\x14E!\xc8\x16c\xb3\x91EA\x92\xf3\xfa\xf5\xdd{i\'\x8dk;\xf1Y\xed\rwf\x00\x01\x12%\x8a\xe49;3\xbb;;sV;o\xa2\x0fN\xe9\xc1\x0c!-t\x8e\x8b\xac\x16Z\xe5\xc1z\x9d\x94\x1dt6\x0b\x1d\xca\x1f\x16>\x0f\xce\xd9\xe1\xd1\xad\x87\x87w\xbeyx\xef\xeb;\xb7\x0f\xbf\xb8\xf7hi\x94*\xcf5\xc6\xa8\xe1\xee\x9dG\xc3\x8b\xcb\xcb\xb3\xbf.\x97\xab\xe3\xe7\xab\xeb\xdf\xaf\x8f/\x16?\xac\xcfW?\x1c\xfd\xb8x\xb6y\xb9L\xeaN\x8a7\x96\xaf\x7f5\xfe}\xb5\xb9X\x96o\xb7\x8f.\x8f\xca_\x8dvN/\xd7\x0f_lNW\xcb\xf5\xd9\xf8\xed\xe0\xec|}\xb9\x8a\x87\xe6\xf6\xe2?g\xcf\x87\xebC\xcaC\x0ez\xb86\xbe\xd1\xc5\xf8N/\x9f\xae\x8e\xdfz\x97\xed\xeb(ec\xd6\x7f?\xd9<;:Y\xfdmuqx\xe7\xe0\xdapm\x7f\xf3\xf3\xfa\xe4\xe4h\xe9\x17j\xf8d\xfbV{\xc3\xad\x87\x8f\x87\xed\xcf\xc3W\x07C>4\xc3\xc9\xfa\xbb\xd5\xb0\x7f\xf4l|\xfc\xcd\xa7\xc3\x8d\xb3\xb3\x93\xd5?VO\xbf\\_.\x83\xd2\x0b\xbdpa\xf8\xe4\xcb/\x1e\xed\xdf\xffl\xfb\xdc\xbb\xabg\xdfm>\x1d\xf67O\xd7\'\xab\xa5\xb6\xb7\xa2\x1f\x1e\x9e\x1c\xfdtpyt\xb9\xde\x9c\x8e\xaf\xb0\xb4\x85\xd9EZ\xae.\xae\xdf9X\xaeN\xaf?.\x1f\xc8g\xaf\xddp\xed\xfa\xb5\xe1/z;\x1a\xde\xc6!\xf8\xf0\xd6x8c\\L\xef\x1e\x8f\xfd{\x07\x07\xd3@\x94\'\xa5\xa4\x1b\x0e\x84\xcd\xff3\x12:\x967,v\x12H\x8fF2\x83\xfd\x88\xb1x\xe3\x13\xe59\xb9\xf8\xcf<C\xa1\x86`=\xe1Q\xb0\xd9\xda\x02R\x1b\xb3\xf0aaty37\xf8h\xbc\xb7a\xd0:.tZ\x14K,/\x15\x86\xa4~\x19\x07\xab\xdc`\x9d\xb9\x8aA\x08&\xbe\xf9~X\x02\xe3\x83\xcd\xc3\xf5\x8f\xab\x93\xc5\xcb37\xd1\x1f\x83\xdb\xd2\xff^\xf6sy\x81\xf8\xf4\xe8\xdb\xa3\xb4|\x9b\xf1\xfb\xeb\xd3W?\xee\r7N\x8f\xcf7\xeb\xe3\xa1\xc0X\xe8\xbd\xe1`\xff\xfa\xddl\xd4\xbd\xe1\xe6\xab\xf5\xc9\xf1\xf2\xfe\xfe?]|\x8b\xf5\x12)\x16\xf6\xdd\x9c\xdfzq\xbey\xb9Z\xba\xb8P\x0b\xe3MX$\xfbz\x1c\x86\x83\xf2!\xce\xd7\xaf\xff\xf9\x9dd\x87b\xdb.\x7f4\xdd\xa3\xd9\x8f\xcf\xca:\xcd@\xf9\xe8\x81\xe3\xa7\xbevp\xf4\xf2\xe2\xd5\xe9\xf3_\t\xbb\xb8<z\xbe\xfa\xf6|\xfd\xfc\xc5\xe5\xf2\xe6\xea\xa7\xcd\xe9\xb3b|\x85\xd4\xfc\x86\xea\xdf0\xfd\xe9;)\x88\x1a\xb07S\x1ej\xab\xbd\x9e\xc3\xe4|\x99\xb4\x9b\xe2/8 \x06|\xd4\xd1\x96p4\x83\t\xe4v&\xe0L\xd8\x9a@\xf9\xa74~\xe9\x9c\xff \x01\xce\xcc\x01>\x9a\x84\x87\x9cw\x07\xf9t\xe8>\x1c\xe4\xd5\x18\xe4?\x18\xe3\xcd\x17\xbaL\x84\xff\xfa\xfc\xe6\x8d\x07\xcb\xcfo\xde\xfb\xea`\xaf\xfc\xf8d\xe9B\x89Cj\xe1\xddB\xfbP~u\xf3\xc9R\xa7\\ \xe8\\\x1e\xdd~\xf2z\x82\x8b\x9f\xe9\xf2p\xff\xf6\xeb\x87\xe5\xe7\x83\x07\xcb_>\xdf\xf8\xf0\xc92-\xdc\xf8\xc3\xc1\xd2\xee\r\x9f\xdf\xbc\xf5\xf5\xd2\x1c\xaf\x9e\x9f\xafV\x17\xe5\xb7\xf7n/\xcf^\xff\xe3\xfd[e69|<\xfe\xd3W\x0f\x97\xfe\xdf\xef\x1b\xe2\xec\xd11.f>\xcb8\xdb\x8a\xa9E\xc6y;\xcef0\xd1@\x03\xedCH\xc1^\xc9\x9a\xfaw\x07Z\x1c\xbav\xa0\xcb \x831[\xeb+Y\xac\xff\xee\x18\x07\x19\xe3\xfa1\xde.M\x00g\xd6685\xcb\x86\xc0f\x19\xe8?\xcf\x99m\x9egj\x16o\xae\x1ed[\x063\xa0\xde\xecm\x12o\xeeb\xa0mP\xa07\x1b\x1f\xdc\xf8,\x19\xe6.\x86\x19\xdd5\x1bktA"\xc3L}\x98u\nQ\x86\xb9\x8fa\xce\xe9u\x1a4\x98\x85\x1ds\xc8\xbb\x94\x01\x0b\xbeb\xc3\xfc\xde\xa4\xfb\x83\xac\xd5\xe3\xdf$\xdd\xf7\x86\x1f\xbe\xff\xc3\x89\xf7\'\xab\xf3\x8b\xf5\xe6t\xe9\xca\x9b\xbcI\xc2\xfb1\t\xef\xca\xd8\x96U\xe9\x1fL\xc2O\xd4o\x17F\x1fG\xfe\x9c)x\x9b\xf2\xff\xe5_\xb7\xf4]A\xfe\x15\xb5\xbd\xd9\x12\xf0\xae\xbcK3\xf4\xce\xf9\xf2\x16F\xd9E\xc1\xb4p\xb6|\r\xce\xeb\x98t\xb2\xbf\xb7,6W\x90\xc9(\xc1\'\x997\xdf\x0f\xa3Q\xbf\xc2Vq\x0b{r\x88[\x9b\xf3\xd5\xfe\xeax}T\x00\x8e\x01L\xeb\xbb\xc1\x0e\x9f\x94\xf8\xb8>\xbd\xdc\\\xbc\xd8\x1b\x1e\xef\r\xf7N/W\'\xbf\xc4\xccA\xab\xc3x\xe8\xf7\x86\x12~^]\xbc\x07}D\xd1\x87\xa0\xe2\x15d\xeb>\x80_\xef<\xfe\xb6\xe3\xafs{\xfc!\x0f%`\x86\x80q0=-^E\x08\xfc\x10\r\xae=\r1\xd5\x98\xc1\x15\xcc\xc1\x1f\xc0o\xb4\xe0o\x8e?\x0b~\x0c\x7fY\x05\x84\xabX\x05tK\x00w\x03\xe0\x8e_\x1c@\x0c\x80\xb7\x01\xd8l\xe3U\xe4\x13\xffd\x02\x92bn\x018\x01\xd6\xa4+\xa9K\xef\x96\x00\x1a1\xb0\xc2\x03r\xd4\xae\xed6p\xc7\t\xe0\x1e\x02\xb8{\x80\t&$\xd7?\x01\x9a\xbb\x07\xc0\x04\x10\xf1\x00\x18?{\x0f\xe0n\x00\xdc\xf1SY\x04\x19\xee\x11\x00&\x80\x88\x07\x08~\xc1\xcfz\rh\x99\x1b\x00\x8c_\x0c\x80\xbb\x01\x10Y\x03\x89\x07\x88\x07\x08~\xc1\xcf\xb5.n\x84\t\xe2\xf7>\xe5\xb6\xa7\x81\xb3\x10\xe0jf\x00\x95\xdb\x12\x90v\x99\x00\x1a\x95\x91\x15\xf8G\x0fh\\\x139\x07\x01pa\xf4x\x1c\xdc\xba(t\xa7\t\x98\x16\x81m\xcf\xc3\x85\x80\x9d&\xc0\x1b\x97L\xe3Yp\xa7\tH\xdexE\x80\x80\xc0\xdd\x05`\x02\xa6\xb2\xb0\xb6\xa7\x01\xbbM\x00\x91u\x90\xe0g\x1e\x01\x98\xb7H\xe1\xf8\xa7\xf3\xd0\xb6\xb9\xc0\xdd& \xa6\x90#g\x0f\xa0\x12\x02\xd2P\xa0b-\x82\xc9+\xa3\x1a\x17\x05\xa8\xf6\x14\xe4\x8a\xb2\x10\xa5U\xea?%\x9a\r\x9a\x12t*\xd8\xd8x&\x98\x85\x018%D\xa4@>\xd7%\x04\xfa?\x16\xc3\t\xa0q,\x82\xe37\xd9\xe5\x10\xda\x1e\x8c\xcc\xc2\x00\xbc\x16\xc8\xc9\xfaD \x06\xc4!fT. %\xd5\xbf\rx\x05w\tD\xa3\xddU(\xac\xfd\xd9\x04\xc0\x8b\xa1)/\xda}}H\x05\x01:*\xe7b\xec\x9f\x01\xbcH\xd0G\xebT\xf7s\xa1W\xbcK$*\xf0k\x1bC\xcc\x04|\x00\xdf\x0f\x90h\x99\xf6\x8a\xf9~\xa0\x82\x00\x9f\x95\r\xdd\xf7JT\x10@cK<\x9eq\xa2.\xa0\xb5\x0b\xbe\xfb\xacH\x05\x03TV\xc3\xf8\x01\x81\x0e\xd6\x98\xb6\xb5b\xb30\x00\xcb\x87\xd1h\x19\xf3\xe3]u\xac\xf3"#\x03p~\\\x97\r\x11g\x06\x88\xec\x07`\xfcD\x82\x80f\xae\x1eRC\x00\x89\xb6!!@3o\x9e\xaf!\x80H\x0c\xe0-\x1fQ\x81\x9f\xc8\x86\xb8\xc2\x03\x94\xcb\xe5\x19\xfd3\xc0\\@\xa3\x82\x00\xe7\xb3\xc9\x04\x82 \xf3\xa3\x01\x1c?\x95e\x00\xf3\xfe\xf1\n\x02h\x94I\x8c\x8f\x99\xaf\x03j\xfa\'\xb3\xe2L\x80\xd6\xd3\x87\xee\x9f\x01\xde\xd5r\x15\xf8\xa9\x04A\xfcp,\x87\x10L\xffI\xe1\n\x06\x8c\xb5\xf9*\xaeP\xee\x96\x01"A\xa0\xaa}J\xf0\x0b~\xc1/\xf8\x05\xbf\xe0\x17\xfc\xbc\xf0SI\x05\xe1\x04\x10I\x06r\xf7\x00\xde\x97K\n~\xc1\xcf|\x06\x10\x03`n\x00xq(\x95,\x18\xcc\x00\x91\x8eI\x83\x97\xc6\x11)\x0b\xc1\x19\xa0\x11\x05\r\xf3\x9b\xa5*\x08\xe0n\x00D\x1a\x85*\x08\x18\x85\xb4\xfa\x9f\x05\r\xde4N#\x15\x80\x13@e\x19\xc0\xbd4\xd0\xe0\x85Q:)G`\x16\xc4k#i\xd4\x05\x19\xb8.\x88H\xcf8N\x00\x95~Y3\xaa\xa0\xb0\xae\x0c2pU\x08\x95\x89\x10>\x14\xa02\x11\xd6\xc9\xea\x12\x08\x83\xf8\xb9X\x89\x01\xde\x11\x08\x83p^\x94H\x8d4N\x00\x95(\x88\'\x86\xbd\x1a7\xc5\xdd3`\xe1\xac\xe0t\xc3F\xff&\x80\x13@d\x1e\xb0\xdc[\x86q\x02\xa8\xb8\x00\xf3\xc4p\x85\x07\xd0H\x0bZ\xbccx\xd4e\xf7\x04b\x00\xef\xfb6G\xfc\t\xdd\x0f:\x1frj|\xd5V\xfb\x0b\'\xbd\r8\x056\x97Wil\x05\xed\xef\xd9\xf0\x16\x97\x90"q\xe7\xa4w\n\xbdc\xc2x\x1f\\\xeb\xf4x\xfb{F\xbc\xc3\xe7B"z\x92\x8e\xfb!!N\x00\x8d\xe5 \x8e\x9f\x88\xac\xb2\xc3\xd5#\xa8\xc4\x00\xe6\x02*\xec\xf1W\xdd\xbeN \'RA\x00\x91I\xb0\xea\xfay\xce\x1e\xc0\x1d?\xfb\x08 \x06\xc0\xdc\x00\xd8\x13@\xc4\x03<\x9a\x0c\xa1\xb2\x0f\xc2\xaf\x97!\xb2\x08\xc2\x05\xb4h\xd4J\x8a\x05\xc0ur\xe5\x9f\x8c\xf6\xfd\xb7M9\xbcL*\xd8\x94]\xff\x1ab\x8ey\xfb,\x8e\xdf:\x95\x9c\xee?\x1d\xe6\x99\xb7\x0ez\xe6\x05\x12\x82_\xf0\xb3\xae\x91\xc3\t\xb0J{M\xe0\xaeQ\x0f\x9f\x08\x10\xa9\x95\xf6\x0e\xdd\r\x13\xd9\x0b\xe1\x048m\xb2U\xfd\xd7J{\xe6BZ8~"\x19A\x9c\x00"\r\xf4\x1eW\x122\xceGC\xc0\x07p!\x1d\x1a\xdd\xb38\x01T\x16\x02\x157\x8d\x92\xc8\tVX\x00\x8ds\x81\xc0\xfd\x9a\xc5\x1a\x02h\xdc\xab\x10\xe0\r!\x91\xceI\x9c\x00"\xd3@\xc0\xabD\xb9\x13@\xa3e\xa6\xc2\x00TR\xd1\xb6\xb5\x809:fBU\x81D\xdbc\x919\xbaEp\xfc\xd3:\xa0q\xcb\xd4N\x13\xc0\xdd\x00\xa6|@\xe3\x080\x07\x01x}\x84s\xc6\xda\xfe[\xe6\x02\\ 1*)\xc5\xfe[\xe6B]}\x84m\x9b\x16\x9e\x85\x018)6\xe9\x8a\xb6M\t\xed6\x01\x93\x96T\xe3\xdd\xe0\x0cM\x93\xa1B_\x9cFZ\xb4\x82\x01"\xf2\xda\x91{R\xa8\x82\x00*&\xc0]G\x04\'\x80HV\x0c\'\x80\xc6\t1\x8e\x9f\xc8\xd1@4ek\x07\xae\x85r\xd2&\x12\x88\x82\xcc\xe5\x03\x04\xff`Q\x17\x08)\x8d\xaf\xd7=\x05\xcc;\xc7\x04?\\/\x1b\x956\x81\xc0$\x80\x8b\xcc\x13Y\t\x8a\t\xc0\x99Q*\xbb!\x98\x00*\x8ba\xbcyP\xbb\xe6bjs\x10\x00\xe7\xc6\xa9X\x00~8@$\x06\xe0\x16@\xa3J\x04\'\x80\xc8R\x90\xbd\x07\xe0%\xe3\xdc\t \xe2\x01\xb8\x01\xc4d9\xe3g?\xfe.e\x02\xf2\xfa\xe2\x00\xcc\xdb\xc6$\x02\x08~\xc1\xcfy\t\x08W\xc7\x18\x1d\x14\x81\x00\x88W\x07\x11\x99\x01\xb8\xf7\x0cVx\x00\r\x05\x11\x9c\x00"\xa9\xc0\xc4\\C*\xe1W\x8b\x94\xe7\xf8\xd4\xbf|F\xc2o\x992&\xc5@\xc0\x06\x98\x9f\x8b\xe3\xf8\xa9\xc8(%\xf8H\x8c\x88\x05T\x1c\n+\xad\x12\x01\x06p\r\x99\xb1[\x84\xc0B\x00\xdf\r\x12\xa9\x13\xaf`\x80\xc8\xcd\xdb\xb9\xa2Y\x82F\x18\xc8x\xaf@T\xce\x11\xa8\x13\xce\xcc\xebdq\xfcS\xd7\\\xffI\x11\x9c\x80\xb1u6\xf5_\x1b\x91aMM"E\x928\x01z\x9c\x06\xfb\x97\x11\xcaU\x1b\xc2\xfe5Tp\xfcSV\xacm\x0c\xdcm\x02&\xf9\x80\xb6\xab\x8094d2\xac AD?\x01\'`{\xc3F\xdb\x85\xd0,\x0cT\xe5D\xfaW\x91\xc9u\xb2\xba\xfd\xab\xc8\xe0\x04\x18g\xbcm=\x0f\xce\xc1@E\x89\xd0\xb8\x1b$\x10\x04\xea\x0e\x08\x1b\xaf\x04v\x9a\x00\x12\xdb\xe1\xa0\xe0\x94\x10\r\x03\xa8 \x80\xc448\xe2G\xaf\x1bL!\xea\xd6\xd2\xda\xede\x84\xc6J\x1f\xd6e2\x15\x04\x10\x89\x81\x82\x1f\xd6\xd1*\x9f\xd9v\x7f\xd3ZPpF\x8cF\x9dT\x05\x014\xb2\xe2\x15\x04P\x99\x04p\x02\xb4v\xc1\x13\x08\x02\xbc\xcb\x84\x04?\x8c?\xc5\xfe\x85#*\xe0\x13)\x10\t\n\xce\t\xd3\xb8g*L\xcd\x7f\x19\xbdg)8K\xc1\x08p\xf9\x10\x12\xd2\x01%\x94\xe3Zz\xc9\x8f\xeb\xe1\xfe)\xc0\xb3\xa2F\xf7\x7f>.\xf8q\xfc\xca\x87\xa0\xfb_\x0bi\xbcN\xcejmB\xff6\x803@\xe3\xe2Y1\x81qW\xcf\xba}0h8\'@cG\x88\xe3\'\x92\x15\x13\x03\x80\xf1\xc7H`!\x84\xe3\'\x92\x17\xd7\xccsb\x82_\xf0\x0b~\xc6\xc7BB\x80\x10 !@\xf0s\xde\x05\xc3\xc7BD\x0c\x00\xc7O$\x13\x86\xf7\x8a\x10\xd9\x05\xe1\xf7\xcd\x129\x1a\xd6\xb8\x80\x06\x91U\x00\xf3k%*\x08\xa0\x12\x04\xd8\x13\xc0\xfcR\x81\n\x02\xb2N\xaa\xff\x8bE*\x080:Xc\xbaW\x90\t\x1a>\x19\xa7!\x1e\x11\x0c\xdc.DCPr$ \x82%b6D\xe5}\xff\x8bA\xc3\xbda\x08\'\x80\xc6\x8e\xd8\xd8\x01\xac\x90#\x83\x9f\xb9\x030?\x17\x17\xfc\x82\x9f\xf5N\xc00?\x14\xc0\xf1\xd3\xd0P\xab @\xeb\xe9C\xf7\xcf\x00\x9c\x14v:\x86\xfe/X\xaa \x80\x84\x8a\xdc\x88\xdfF\xd0\x02T\xb016\x96Pj/\xa3\x16L\xd5\x15C\x8d\xc5Sv\x1a?\r\r\xadJ\x03\xe8_=F\xf0\x8b\x03\x88\x01\xb06\x80\xbaK\xc6X\x13\xe0UL\x8d\x95\x03\xe6`\xc0\xe2\xd7\n\x8c\x9db\xbe\xed^h\x16\x06j\x9a\x05\xcbGfL\xc0\xf6d\xb4qB`\x06\x159[u&\xd2\xffD\x88\xe3\'R\x1eb\xf1C\x11\x1a\xd7\xcb\x04\x0b\xe7\xc4LJ\xaeL\x04\xfd3\xc0\xfb\x9e\xb1\n\xfcV\x97\x95T \xe0\x03x\x89PY\t\xf4\x7f\xbfP\xb0\xbco\xdd\x16\xfcu\x1b\xe2\xfek\x03\x84\x00\xe6\xf7\xceK\x08\x80\xf1S\xd9\n\xe0\x1e0\xa5\x84\x08,\x83\xea\xb2\x82\xfd\x07A\x87_+@\xa3i\x0e\'\x80H\xa5\xb8\xc3s\x82$f\x01\x1c\xbf\xb61\xc4\xfeo\x1d\x0f\x0eN\x89\x11\xd1\x93u\xcc\xcb$q\xfcD:\xc6p\x02\x88\x08\xa898%\xca\x9e\x00\x1b\x8c\'\xb0\x19\xc4\t \x12\x03\x05\xbf\xe0g\xbd\x13\x14\x02\xc4\x03X\xe3g\xae\x9f$\xf8\x05?\xef%0w\x011\xf6\x1e\xc0\xbc,\x06\xc7\xaf\x8d\xf3\x91@a\x14\xce\x00\x91~Q\x87\x8bGy\xa3r\xff\'\x828\x014\xba%+\xf0\x8f%\xe2m\x85\x83f!\x00>\x14\x1fOC\x1a\x9f\x89\xcf\xd1,\x89\x130\x95E4\xee\x16\x9d\xa1D\x1c\'`+#\xdav\x1a\x9c\x85\x01\xbc,bZ\x08\xf4\xdf&\xe0\xf1^\xa1I7\xa1\xffn)_U\x17@\xc0\x02*\xeb\x02\xfa\x8f\x02\x1e\xd7\x8f\x1b\xef\xe9&\xe0\x02\xcc\xf5\xe3\x04\xbf\xe0\x17\xfc\x82_\xf03-\x10\xf7\xcc\x0b\xe3\x04\xbf8\x00\xef\x1e\xa1\n\x02hT\x85H\x08\x10\xfc\xe2\x00\x9co\x12\xf0\xcc\xeb\xa2p\xfcT<@\x0c@\x0c\x80u\x7fL\x85\x05\x10Y\x06\xb3w\x01\xe6\xa5a\x82\x9f{\x04\xc0\t\x90\x08 \x1e\xc0\xdb\x03\xb8\x13@\xc4\x03p\xd5<"\x99\x00\xee\xb7+\xe3\x04\xd0(\x8e\xad3\x00\xd5X?Y\x08\xd8i\x02\xc6I\xb0qQ\xd8\x0c\xd5\xc1\x951\xb0\x7f\x1d}_\xd5 @\xa0.\x12\xc6\xcf\xde\x00\x88\xd4\xc7\x8b\x07\x88\x07\x88\x01\x08~\xc1/\x01\x80\xa9\x01\xd4IG7n\x92\xdci\x02\xb8\x1b\x80\xe0\x17\xfc\x82_\xf0s\xc5Oe\x05$\x04p\xcf\x82p\xbfP\x14\'\x80H\x0c\x14\xfc\x82_\xf0\x0b\xfe\x8f\xc6?i\x85\xf5\x9f\x04\x08\xb8F\n\x11\x9d\x1c\x9c\x01\x1a.P\xf0k\xde*9A\xa3\x0cX\x13\xa3u\x8d{\x03f\xb8P:\xe0\r\x824TS\x03\xf7\xde\x00\x9c\x00"\xed15\x16@\xe3\n\xa9\x80kG\xd3(\r\r#\x12\xf4"9\x1f\x12\x05#\x88\xb0\\\n\x918\x80\x13@\xa3@\x1c\xc7Od&\xac \x80F\x8bDd\xae\x16\x81\xe3\x17\x03`n\x00\x82\x9f7~"\x17\x08\x88\x010\xc7\xcf\\,E\xf0\x0b~\xc1\xcfy\x0f(\x06\xa0\x0bfl\r\x94\xac5\x8d\x9b$g\xe1\x80\xb9R\x00{\xfca\xb0\x11\xcd\x87k\x1fr\xff\xca\xb9\x85\x02\xf4`\xd4\xa6\x18\x15\x81t8\xf3\xdb\x04\x05?\xf7\\ L\x00\x11\xf5\xf0X\xd5&G\xc0\x03\xf0>I"\x1e \x06 \x06 \x04`\xb7i\x9a\xb2\x8d\xec\xbf0$\xd65\n\x11\xc8\x87T\xb5\xca\x11\x88\x81\x82\x9fwiXE\x04\xf0VG\n\x93@U\xa7H\xff\xb2\x818\xfe\xb10N\xf7\x7f\xa7v\x82\xfb$|V64\xb6\x80\x19T\xf3p\x02&\x0bh\xac\x9b8C\x9fD\x05\x01\xe3,\xd06\x170\x0b\x01\xf8u\xc24$cp\x02h\xf4J\xe1\xf8\xa9\x84\x00\xf1\x80\xaa^1\x9b\xfbg\x00\xaf\x8f\xf6\xcazK`\x1a\xe0~\x9d\x9c\x10\xc0\xbc@P\xf0\xc3\xa7b\xce5^\x06\xec6~\x1a\xc9\x80\xba\x00H@B_\x0c\xa0\xeaX\xbc\xb1p\xd4N\x130\x1a@c\xe5\xb09\x92AU\x15\xa2\x04v\xc2\x82_\xf0\x0b~\xc1\x8fm\x01\xfbWN\xac \x80H&L<@\xf0\xf3\xce\x03\xd6]\'K \x06V\xb5\x88\x10p\x01\xbc8\xda\xfa\x9cl\xff\xe2\x89\t\xaf\x8d\x9c\xe4#\x1bW\x06\xcd \x9d\x97\x98\xab\xc8\xe3\xf8\x894\x08\xe0\x04\x94Y@\x9b\xc6\x851\xb30\x00\x97F\x11\xa9\x0f\xc6\t \xe2\x03\x19W\x11\xa6q XA\xc0$\xa2\xdb\xb6,`\x16\x06\xf0\xca\x10a\x80\n\x03\xdc\xa5\xf3p\x02h\x9c\x8b\xe3\xf8\x89\xa8\x87f\xf8X\x8cH\xa3\x04N\x00\x11\x0f\xe0\xae\xa4\x9e\xeb\xf2\xe2\x04\xe6\x00\xee\xe2I8\x01\xc6\x98\x14\x03\x81 P\x91\x1aO)G\x02\x1bB\xe6\x02Z\x99\xb9x\x12\x8e\x9fJ\x10\x14\x03`] (\xf8\x05?\xeb\na\x9c\x80)\'\xde\x7f\xbb0N@L!\xc7\xfe\xab\x03r\x9dtX\xff\xb7\x0b\xe3\x04\x10\xa9\x0f\xc1\t\xa0q6.\x06\x00\x13@\xa4_:\xe3\xf51D,\x00&\x80\xca$\x00\x13@D4\x03\'`\xd2\x8d!`\x01x\x81\x10\x8dJ\xf1\n\x02\x88\x04A\xe65\x828~\xe7\xb3\xc9\x9c\r\x80J\x08\x80+\xe4\xa8X\x00L\x00\x95\x18\x08\x130]\xaa\xc6\xd9\x05h\xec\x85\xa2b.\x1fWA\xc0T\'\xcd\x99\x00\x1aA\xb0\xd6\x05\x1a\x1f\x0b\xb6\xef\x96\x89\xaaJ@\xb0\xfbcQ\xc1/\xf8k\xd6\xc1\xdd\xd7ET\x10@\xa3<\xb0\x86\x00\x12\x951Q\xf1\xae\x91\xaf\xc0O\xa3Y\xac\x82\x00*!\x00\'@B\x00\xef\x10\xc0\x1d\xff\x94\x0b"\x10\x01p\xfdH"!\x90w\x9b\x90\x18\x00N\x00\x8dNA\xf1\x00\xc1\xcf<\x020\xef\x93\x13\x02p\x02\xa8\xec\x84yw\xc9\x89\x07T\x10\xc0}\x12\xa0\x92\x0fg\xde(YA\x00\x91\x18(\x06 \x06\xc0{\x0e\x80\tH\xde\xf8\xc6\xad\x92\xb3\x10\x807\xca9\xe3m\xe3\x02\xe1Y\x18H\xa31\x83^\xe0\xb2+/\xd2oF\xe8\xbf\x13\xfcgz\xba\xaf\x02\x00\x1f\x8b\x08\x00VT\x97V\x00\x03\xed]\xefO\xdbL\x12\xfe~\x7f\xc5\x8a\x0f\xd5[\xa9\xacwf\x7f\xbf\xa8:\x11(m\xdf\xb7PtPz\xba\xd3)\n\xc4\xd7\xe6\x9a&Q\x92\x96\xea\xfd\xebo\xd6N(\x81\x10\x1b\xdb1\x86\xa6j0I\xec\x90<\xcf\xce\xcc3\xb3\xb3\x1bP\x1a\xad\xd6\x1e4\x13\x0cPq0\x8e\xa3\xd0t\xb3Lk\xe7\x9cR\x0c@p\x94\xc8\xc1z\x8e\n\x98\x13\xect\xef\xb8\xfd\xe6\xedi\x84\xc20\x8d\xc8^\xbf:e\x9f\xa7\xd3\xd1\xefQ\x14w?\xc5\xdb\xdf{\xdd\t\xbf\xec\x8d\xe3\xcb\xce\x0f~1\xfc\x1a9\xf1\xca\xd9\xddh\xf6Px>\x1eN":\xecw\xa6\x1dz\x16\xbc\x100?\xb6-\n\xfeu\xa4\xd86\xbd+K\x7fqk\xfe\xda_\xcf\xe3\xee\x8d\xd7M\xaf<H\xfe\xfd}\xf2\xa57xyB?Z\x9dq|>\x1c\xc4\x93g\xc95\xef\x86\x17/w[{\xcf\xba\xbdI\xe7\xbc\x1f\xbf\xfa1\x8d\xc7\x83N\xfft\xdc\xb9\xa0\x93?\xbd\x9c\x8e\xbf\xc5\xcf&\xdf\xce\xa7\xbdi?\x9e\xbc\x9c\xfd\xb9\x89\xdc\x8e\xbfm_\xc6\x93\xe96\xf0\xce\xd7\xce_\xc3A\xe7r\x92\xfc\xddI\x7fx\xbe}uA4\x89/\xc6\xf1t\xdb\xd0y\xdf\xa7\xd3g\xa3\xcedr9\x1cw_\x9e\xbc\x13\xadg[l\xebp\xf8W\xaf\xdf\xefD\x9a\x0b\xf6\xdba\xe7\xa27\x98\x0e\'\x9fw\xd8\xdb\xc14\xee3z\x80\xbd?a\xffd \xda\x00mx\xcevG\xa3~\xfc1>\xff\xb37\x8d\x8c\x00\x8e\xdc\xb2\xdf\xfe|sz\xf8\xee\x05\xeb\xf7\xbe\xc4\xecu|\xf1e\xf8\x9c\x9d\xc5\xe3Io8\x88<\x17\x1c\xd8I\xe7\xbf\x9dqo~\xc1\x16\xd3^\x83b[\xdb[\xeco\xf0\x93h\xa3\x8a2-=z+\xc4z\xd9\xb6\x1b\xb6\xabc\xdb0\xd0P\xd8\xb0\xb5\x03pv\xadtk\xb1\xa1\xbbJ\xba\x0b{q\xeb\xd6m\xd8f\xc3t\x95L[[\xd8\xae\x85VF\xb9\xf5\xda5n\xd8\xae\x8amk$A\x8aBr\x10D(\xdd\xc0 \x03c\xd1\x90\x7f\x07\xcb\x81\x86\x80\xd4\x1c\x08\xf4kTK\xa1\x98\xb4P\x9ef\x04\x8f6\xea\x1d\x7f&j\xa2\xde(\x1cNF\xe3\xde4\x06\xd5\xc6}\xfe\xbf\xd1\xa7\x94s\xefVr\x9e\xbe\x8c=\xa7\xcf\xeb\xa2\x9b\xf0\xa6\xaf\xbe\xc3\xf6\x8e?\xb0\xf4\xf7\x00\xaeoc\x8a\xdc\x1c\xec\xdb \x03\'\xc7\xb2\x0c\xe5\xc3\xe1y\xaf\x1fG \xf7\xacf\xff>h\xed\x1eE\x07\xad\xb7\xefOv\xe8\xd7\xb3H\x19\x02_pM\x06\xa4\r=\xd4:\x8b\xc0y\x8b\x0e<\xdd\xdb?\x9b}\\\xf3\x02\xe9\xee\xe1\xfe\xec.\xfd~r\x14]\xbd\xbfp\xf7\x8ch\x0c\xe7\x9c\x9cD\xb8\xc3\x0eZ{\xff\x88NF\x9d\xf1\x97\xa3\x7f\xd1\x83o\xf7\xa3\xd1\xec\xbaw{Q<h\x7f\x08\xd7\xbc?\x8e\xf4\x7f\x96\x11\xedd\xea\xc0\x81{\x17\xfe\xa3\x12\xd94\xa3HN2\xbe>\xa6M\x86/\xcf`\xba\xd3My~h\x82;]\xfdB\xce\xe9\xa57\x95\x8b\xdc\x94\xd5ipH\xd3[\xb4\xc2rZ\x9d"\xd0\x94\xe5\x16\x83\xe5\x92\x05\xabf\xd2J~\xe6\xf1\x18\xb0N\xf8\xa5\x83\xbf\xa2\x17\x9d\xd7v\xc1~u\x11\xfb=\x1bv;\x85\xcc\xd7c\xf0\xd3\x88\x81K\x8e\x14\x84\x13\xf1\xddH\xa6K\x19\xf02\xa6][\xaefZ\x04\xa6W\x12\x8d\x07V\x14%\xda\xe6 \xdaq\x99\x97\xe8\xd7\xadUD{\xe3\x12?\x8d\xdcP\xd0\x06$/\xd3\xbcplH\x086\xc8\x9a\xaf\x89\x9eE\xcb\xbe\xa6\x7f`\t\xd8\x86\x0eL:-f\x99\x8dut3\\Z\xa6\x9c\x04g\xa4ZiZ'

for i in xrange(200):
    try:
        pd.read_csv(StringIO.StringIO(data),compression='gzip',delim_whitespace=True)
    except Exception,e:        
        print(e)    
Contributor

jreback commented Jan 20, 2016

can you cut this down

I am not sure how I can give you a simpler example. I can reproduce the segmentation fault only considering the file sliced from 0 to 9657. If I get the characters even from the first one to the end of the file [1:len(log)] I don't get the segm fault. Also no segmentation fault if I consider the file from 0 to 9656.
The file is corrupted so I cannot extract the content. I get this file from a third party service and I cannot recover the original content.

The parser seems to detect that the file is corrupted but when I try to read a certain number of corrupted files at some point I get a segmentation fault.

Unfortunately, these are all the information I have and this is the only way I could recreate the problem.

Contributor

jreback commented Jan 20, 2016

ok, this is reproducible. thanks for the example.

jreback added this to the Next Major Release milestone Jan 20, 2016

Contributor

jreback commented Jan 20, 2016

if anyone is interested

cc @mcwitt
cc @guyrt
cc @behzadnouri
cc @mdmueller
cc @selasley
cc @evanpw
cc @kawochen

alessiodore changed the title from Core dumped in read_csv (C engine) when reading corrupted gzip file multiple times to Core dumped in read_csv (C engine) when reading multiple corrupted gzip files Jan 20, 2016

The segfault with python2 is caused by the Py_XDECREF(RDS(rds)->buffer); line in the del_rd_source function in the io.c source file. The reference count for rds->obj is explicitly incremented in new_rd_source() but I haven't found where the reference count for rds->buffer is incremented. Removing the Py_XDECREF(RDS(rds)->buffer); line in io.c allows the example code to run without a segfault. Does anyone know of a good reason to keep the call to Py_XDECREF(RDS(rds)->buffer) in the del_rd_source function?

Owner

wesm commented Jan 25, 2016

@selasley I just looked this over. In the line which creates buffer:

result = PyObject_CallObject(func, args);

This returns a new reference, so the reference count of this object should be 1. The problematic thing I'm seeing is actually this block:

    if (result == NULL) {
        PyGILState_Release(state);
        *bytes_read = 0;
        *status = CALLING_READ_FAILED;
        return NULL;
    }

From first principles: If rds->buffer was just garbage collected, then PyObject_CallObject fails, the rds->buffer is never set to NULL, and calling Py_XDECREF again would cause a segfault. Can you try setting buffer to NULL in this case and see if that fixes it?

Owner

wesm commented Jan 25, 2016

To be on the safe side it would be better to always set src->buffer to NULL right after line 123 in io.c

I put the call to Py_XDECREF(RDS(rds)->buffer); back in del_rd_source() and added the lines you suggested
/* delete old object /
Py_XDECREF(src->buffer);
src->buffer = NULL;
args = Py_BuildValue("(i)", nbytes);
...
/
PyObject_Print(PyObject_Type(result), stdout, 0); */
if (result == NULL) {
PyGILState_Release(state);
*bytes_read = 0;
*status = CALLING_READ_FAILED;
src->buffer = NULL;
return NULL;
}

The problem code runs without segfaulting and all tests pass in
nosetests-2.7 -v --tests pandas.io.tests.test_parsers

Owner

wesm commented Jan 25, 2016

Cool, I think just that one line src->buffer = NULL; after garbage collecting src->buffer should be enough. Can you make a PR? Thanks

Will do.

@jreback jreback modified the milestone: 0.18.0, Next Major Release Jan 25, 2016

@selasley selasley pushed a commit to selasley/pandas that referenced this issue Jan 26, 2016

Scott E Lasley BUG: parser buffer could be freed more than once if reading failed in…
… buffer_rd_bytes, causing a segfault

Closes #12098
fb204a2

@selasley selasley pushed a commit to selasley/pandas that referenced this issue Jan 27, 2016

Scott E Lasley + Scott Lasley BUG: parser buffer could be freed more than once if reading failed in…
… buffer_rd_bytes, causing a segfault

Closes #12098
a1f0a79

jreback closed this in f32b44f Jan 27, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment