make json encoding more robust in the face of binary data

Hi,

I from time to time get into the situation where binary data is posted (which may or may not be an error) and an error occurs which sentry should log. The result is that I only get an error inside sentry logged (e.g. UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte) and not the information from the originating request.

Now I can I can make the data that the tornadoweb sentry adapter passes into sentry saner (e.g. don't pass files in), but that only goes so far. In my opinion sentry should always log the original error (and not barf).

The simplejson encoder used by ravens BetterJSONEncoder seems to be designed for encoding known good data in and not something that happens to come in from the random internets as an http request. As such it uses the strict unicode encoding for encoding strings and not something more permissive, nor does it allow to pass the codec error handling schemes.

Using the patch below I at least get the original errors into sentry.

Test code:
```python
import datetime
import pprint
import raven.utils.json

data = 'GIF89aX\x02D\x02\xd5HzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS6 (Macintosh)" xmpMM:InstanceID="xmp.iid:47FB356720AC11E3AC89AA4B1E75FBF2" xmpMM:DocumentID="xmp.did:47FB356820AC11E3AC89AA4B1E75FBF2"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:47FB356520AC11E3AC89AA4B1E75FBF2" stRef:documentID="xmp.did:47FB356620AC11E3AC89AA4B1E75FBF2"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>\x01\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0\xef\xee\xed\xec\xeb\xea\xe9\xe8\xe7\xe6\xe5\xe4\xe3\xe2\xe1\xe0\xdf\xde\xdd\xdc\xdb\xda\xd9\xd8\xd7\xd6\xd5\xd4\xd3\xd2\xd1\xd0\xcf\xce\xcd\xcc\xcb\xca\xc9\xc8\xc7\xc6\xc5\xc4\xc3\xc2\xc1\xc0\xbf\xbe\xbd\xbc\xbb\xba\xb9\xb8\xb7\xb6\xb5\xb4\xb3\xb2\xb1\xb0\xaf\xae\xad\xac\xab\xaa\xa9\xa8\xa7\xa6\xa5\xa4\xa3\xa2\xa1\xa0\x9f\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\x7f~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$#"! \x1f\x1e\x1d\x1c\x1b\x1a\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0f\x0e\t\x08\x07\x06\x05\x04\x03\x02\x014\xf4m\x9c9u\xee\xe6)\\\xc8\xb0\xa1\xc3\x87\x03x8\xb0 \x03\x03~\xff\x06j\xdc\xc8\x86\x07\x0br\x19\x12B\x1cI\xb2\xa4\xc9\x85\x12-\x8a`\xc1\x83\xa3\xcb\x97V840\'\xf2\xa4\xcd\x9b8I\xa6d\xd0\x80\x03\xcc\xff\x9f@\x7f\x80\x18\x172\xa7\xd1\xa3HIz\xc8\xe0\xa3\x01\xc0\xa0P\xaf\x1e\xac\x15/\x83\xbd}\x13\x9b\xe2@60\xe1\xc7\x90\xb1\x06\xc8 \xc2\xa7\xe2\xcb\x9a\x86\x96\x8d\xcc\xb9\xf3\xd5\xa5N1\x8b\x86\xc4\xa3\xb1\xe7\xd3\xa8\x93N\x16\xd1r\xb4\xebB\x1c|\x1cHM\xbb6\xd2\x03>,\xbf\xde\xad\x87\x03\x03\xab\xb6\x83\x0b\xc7\xe9\x81\x01[\xde\xc8\xe3\xf8\x06>\xbc\xb9s\x93\xc5u\'\x9f^\xa6\xf4\xec\xe7\xd8\xb3\x93<\xc0\x9a\xbaw/C\x17h\x1fO\x1e\xe2\x82\xd0\xdf\xd3Sa\x91\xc1q\xf9\xf7\xf0\xe5MF\xac\xbe\xbe\x12\x1e>\x98\xc7\xdf\xbf\xdf\x83\x8f\xd6\xf6\x05\xf8\x03{\xfc\x15h\xa0<\x19\xd0\' u \x88\xa0\xdf\x81\x10\xc6\xe7\x81\x08_-\xf8Z\x0b\xedE\xa8\xa1\x81\x93\x1dg\xff!f\x11?c\x19n\xe8A\x03\xc0\xda\xc2\x81\x88@R\xb6\xe4+\xc8\xde\xfa\xde\x02\xc66\xbbJ\x8c@.\xb0\x16/c\xf5z \x8e\xda\xb6b\xab\x81\xc5)\x08\xff\xcc_\xc3\x96\x17\xc0\xaf\xe5\xa2\xc2\xc2u\xfby;-1\x8cA\x1b\xdf\x01\xea\xc6\xfb\t\x08\x87\xc6\xe7\xed\xac\xc84\xa8\xef{\x19\x10\xec\xef%g\x9d\xc2y@v\xe3d\x9c\x1d\x9c\xe4\xa5Rn\xdb\xdb\x98\xa3\x01\xf0p\x9c7\xebym\t\x87^\xc6\xe3\xc2a\x8b\xb1\x9fk\x9e\xa3\x0e;\xee\xc0\x13\xff\x11<\xf7d\xa9\xa5\x08\xfc\xb0\xb4I\x0b\x1a3}\xb9\xeaX\xf4m2\xe2\x8cx\x04RUa\x17\xc6\x95J\xbeO2\xef\xd1\x83\x13\xbfE\xd4\xb5-\xfb\x08\x08\xa0VU\x1eW\x17\xb1\xa06!\xc2\x06w\xb5\xf5X\x80\x10|g\xa0+\x02i\xa8\x1a\xe6\x9a\xf3 \x9a\xa7\xb6\xc0\xf8\xe8/\xd1\x02\xe4\x8f\xc9\x8a\x08\xb2\x80\xda\x14\x9e*\x83\x88Seo~\xf9S\x82\xf1Rc\xa9Bp\x0f~v\x9a\x87a\xc4W\x08C\xd5\xa6b\t\x8c\x02\xf6\x98V=?L\x05o\x11t\xc8\x01\xbc2\x88\xf2\xd1\xe6|\x19L\x82\xfah\x13\xdc\x0co\x0e&<M\t42\x1eH\xa8\x17\xf2y\xd0\'\xf1sH\xff\xb5\x01\x9d\x82\xa9\xa9}n*\x18\xcb\xb9!\x8b<u\xa4\xf6\xda\xc0\xba\xc8\x085=\xce\xf4\xe8=\xbd0\xbd\x10b\xa9"Z\xf2\x01\xef\xc4\xc1\xd5\xae\xaa\xc9\x07\xe5\x90]\x9bd(L\x9d\x9a\xf4.\\\xacOT\x1fC\xc9\x8e\\\xd3\x9d\xe0\xeb\x1d\x98\xbc\xe1\x11\x830\xcf\xa2\x83\x14\xc3[\xed\x92\xcd\x17\xfd22\xddL\xc3B#\x14\xb6\x93\x12u\x12\xbe\x8b\x8ea\x92\xdb\xc7\xd48&=\xe6\x0c\xc4\x90\x11\xc4\xec\x18\xf5\x0cA6\x8b\x07~\xec\x92\xf9^\xe5\xc8U \xf0\x1cc\xaa\x0c\x1e\xbb\x8d\xc4a\x88\xb2V\xb8+\x9a\x1bc\x05\xcbS`\xafp\xe8&\x8d\xbb=\x07\xbc%\x16\xf0e\xc4\x9c\x154K\xa1\xa9\xa4\x8312\x147\x9c\'\x97\x81\xcegV\xcc_\x19\xe5\x19K\x86\xcb\xd7\xf8&}\xed\x1c\x05@\xabF\xb5\x1dKrN\x18=Eb\xe0\xa4M\xb6\x12\x06]\x97|o\xe3\xd7F\x11z\x12\x90~\x96\xfd"By\xe6`\x07/\xf1\x14\xbe\x82w\xf6\xdegQ:\x12\x98\x8e\xff\x13\xad\x0bC\xc6\xd7\x1e\xc3\xbe\xe5\xf9)\xb20\xf6s\x03D,\xf9\x0c}\x93\x84\xeb\xfa\xe5V?\x06\xd6ob\xf4.,[\xc9(W\x03\xf7\xc8b\xf1WRF\xed\x7fPsd\x82\xfd\x05\x95\x1f\xa5\xdd\xd9\x18\xbbY\x10\xff\x85l\x97\xd1\xeb\xee\x9e\tz\xe13B\x0c\xe7\x01\xa9\x86$\xc3\xdcm\xe2\xf6g,\x9c.\x91\x9f\x8a\xdc\xc9;U\xd9^\x92\xf0Sa\xf5\xc4Q] \x86\xc4\xf1\x86X\xd8\x87\x93h\x16k\x88Q]8Ca\xe0\x88Z\xc1\x88\xebb\x17[\xd8\x04\x9eH\x1c\x84\x18\x055x\x8a\xda\xb6\x87^\x90\x87\xff\xdf\xd5q\xb2\x88\x0c@h\x12I\x08\x05\x86\xb8x\x9c\x08\x05\x98\xa5\x8b\x814\x8b\xe9#\x8a+\x08\x06m\xb8\x10\xc5g\x0c\xc7x\x14\x1e\x10fR\xe5V\xcc\xa8d\xb78j\xd0h\x13\xc9\xb7\x8a\x0c\xc1\x8b\xb4\x90\x88uA\x8aG`\x86E\xa7S\xa6\xd8\x8d\xfdS\x89\xe0\xd6?>\xe8\x04\x16HZ\xc9h\xd3\xa8\x10\x11\xd8\x88\xe4\x08\x11\xb0(l\x8a\x08\x8fJ\x01\x89IP\x8b\xb6\x95\x8f?p\x80YQ\x8c\xb1p\x8f\xc4\x17\x06\xe1h\x12\x01\t\x06\xcfE\x90\xf6\xf3\x8dL\xb0\x8f\x0e1\x87Y0\x8c%\xa1\x8e\xa80\x91\x17mi\x06-\x10\x17\x8f\x89\x14\xa5\xa7~\x83\x11\x98L\xe0\x8aX\x01\x9a\xa4\xb0\x84Y\xf7\x05\xec\x08_h\xf0p\x95c`\x05\x14Do\xf9\x19\xa5Y\x988U\x96Kp\x93#\xf1\x85\xba\x80\x92\x959\x05\xbf\xa9\x105\xe9\x05\x89\tQ\x87\x01\t\xec\xd2\x1c,6\x8fE\x95\x8f\x86\xe9\x10\xb2\x19<@Z\xdf8\x99=\xf0\x9c\xf1\xc75\xd3Y\t\x7f\x91\x9aH\x88\x06$\t\x11\xddi\x04\xb4i\x16\x1a\x89\t\xdb\xd9\x10\xaeY\x9c\xe9V\x1d\xedy\x15K\xb6\tM\x967\xf3Y\x04\xb0i\x16\x90\xe7\x99tw\x0b\x1c\xc4t\x1a\xf7\x19\x05\x10\xfa\x8a_`\x9c\xec\x94\x1a\xef\xc9\x04.Z\x12)z\x90t\x11\x9c\x96\xe0\xa1\x11q\x8b\x0c\x98e \x9a\x97\x16\xa0\xc9\xf3\x8ex\xd7bp\xd7\x8bi\xb8\x9c\xa5\x10\xa3\xe8x\x16\xb3j\x04\x93:\x95-\xd7\x19\xf2h*\xe2\xf9\xa1c\xa0\xac\x0f\xf1\xab\xac\xda\xa0u\xba3\xdbEU\x8d\x8a}\x8f\x813\xcc IN5\x06\x83\x9a\x15\xcfZ\x04Y*\x0f;\t\xcdj\x16\xc1I\xac\xed\xbat\x9d\xb4\xaa\xb7\x90\x95G\x01\x89\xdc\xb7q\x86\xea\xad\xaaP\xab#\xc1\xadK@\xb0\xfdG\xae\xac\x96\xab\xad \x974*\x96z\x98\x89\x80\xaao\x19\xa9E\xb0\xaeW\xc1\xab_\xd0\xaa\x85\xa1\xaf\xbc\xc0\xaf\xf3\x97\xadu\x81\x9c\\\xf0\xa7R\x96\xa9\xca\x10\x06\xab\x04\xd1J\x0f\x01\xca\xb1e$\xa4\xb9\x90Q|u\xaf\x82\xaa\x88+\x0b\xa4\xb5y\xef\xda\x03\x16K\x04\xffJ\x17.\x08\xaa\xc0\xf7\xad\xb50q/\'\xb3B\x90\xb2\x0ea\xb3?`\xb2cv,h\x91\xb3H\xa0\xadZ\xbaN\xeay\x9d\xd8\x10\xacG\xe1\xa0\x12\xcbo_k\x16?\xcb\x08\x93:\xb6\xffB\x80\xb0h\xc9\x98\x03*e\x0c\xab\x0b\xbe(ej\xdb\x9c\x1e+\x04P\x9b\x15T\xeb\x08\xf3j\xb7]\xb0\xb6I\x91|\xd9E\x18\xab\x197\xa0\xc2&\xed\x10\x0f\x12$\x11\x13Q\x11\xfb\x10=\x81\xd0\xa9\xcb\xc5\x98L\xbb\x15\x9c\xc8\xa6\xc8:h\xdb\xb4\xe5\xf9\x8b\x12I\x18s\xfb\xa9\xe4\xe0=i\xd1\x15u\xd9\x07\x97\xcb\x8aa\xd0\xb2\xf1: \x13;R\x19\xa7O\x80\xb1HQ\xa8Z \x9e$\x87\x07\x9ee\xb56Qym\xbb\x1e\xa9\x99\xban\t\x9e\x96z\xb2\xa2\x10\xb4Z\xa1uL\x99|\xa5\x8b\x96\xbb\x0b\x05\x9aA\xac7\x01\x1aF+\x05o\x9b\x15\x9dK\x04\x91\xbb\x10\xa9{\xbd\xf2\xe0\xb4\x85\xc0\xa6\x1a\x8b\x05\xa6:\xb5\xc0(\x18\xfdV\x075\x83\xbb\xfcf\x1cv\xf0\xb7\xebw\xbauA\x88\xe8\xbb\x88\xdey\xaa]\x10\xad\x95+\xa5\xdef\xbe\x14\x1ff\x14\x82Q\xfa\x05y+\xa3[\xa0\xbd=\xb0\xbc\x99\x03\x01\x08\x9c\xc0\xbc\xc0\t\x1c\xb4\x0c\xc6\xaf\x0c\xcb\xa0,\xcb\xff\xb5\xdc\xc5\xb7\x8c\xcbU\xac\xcb\xbb\xdc\xcb\xab\xbc\xcb\\,\xccp\\\xbe\xe0\x0c\xde\xe0\xff\x0e\xfe\xe0\x10\x0e\xdb\x05~\xe0\t\x1e\xe1\x16~\xe1\x18\x9e\xe1\x1a\xbe\xe1\xc0=\xe1Y\x80\xe0X\xcc\xe1">\xe2$^\xe2&\xbe\xdf\x1e\x8e\x05 ~\xc5\'\xde\xe2.\xfe\xe20\x1e\xe3\xc3\x9d\xe2W\xb0\xe2V,\xe38\x9e\xe3:\xbe\xe3%N\xe3V`\xe3U\xcc\xe3B>\xe4D^\xe4\xfc\xed\xe3U\xb4^\xeb\xb6~\xeb\xff\xb8>\xbf\xf0\x0c\xdf\xf0\xfc\x0e\xeb\x03\x1f\xf1o^\xf0Cp\xf0\xb9\x9d\xf0\x0e\x9f\xf1\x1a\xbf\xf1\xf7\x0e\xf1\x12\xff\xf1fN\xf1B`\xf1\xb8\x8d\xf1\x1c\x7f\xf2(\xff\xef\xaf\x0e\xf2,\xff\xe5"\xff\x03$\x7f\xdb!0\xf3!\xa0z?\xdb\x98\xdf\xf8\x9a\xdf\xdc%Q\xb3\xc1T\xcfX\xd9d\xc1\xc3\xc5\xf5\xd8j\tq\x95$\x08\x9d\x8dF\x12\x8cs\x10.0|W\xec\x03+&\x1c\xe3/\x82G\xec\xd5\xfdI`\x8f\x1e\x06{+\xe8\xf9pg\xec\xc2\xc1\x84H\xfe\x1d\x0c\xd6d\xd0\x9f\x02\xc5\x92QB\x92o_\x0e\t\x05\x02H\x92X\x04\xc3\x05!\x13VT\x14"\xe1\xe0\x91\x92\xf0\xf8a\x08I\x8dfM\x9b7\x05\x8d\xc2\xa6-\x1b74\x9cZ\x8d\x13:\xd4\x0e\xad+\x17\t\xf1\x9aR!\xe0\xa3x\x91\x8c\xac\xc3\xff\x9f\x8b\x01&<\x9cxq\x8a:\x11kS\x8c\x0c\xe87\xc8\xcf\xc7\x19\xbd\x82\xb7\xd8\x85\x02\xc2kSE A\x82\xf6\xba\x1f}\xe8\xfeH6\x06\xeeT\xc5K\xb0\xda\xf4C\xdf\xdb\xb2]\xae\x83\xc2{\xb3\x0f\xaa\xdf\x8f\xb85B\xfd\xfc\xa3\xfau\xff\xa0.\x07\xf1n\xdb\x8e;\x1fT\xca\xa1\x9f\x11\x1cHP+\xe3 \x8c\x10B\xc3\x92\xeb\xc9\x1a\xc6\xda\x80n\x8e\x01h@\x01\x05\x1a\x06\xd0p\x96r\xb0\xf8\xad7!\x10H0*\xa2E$\xf4{\xed\x98\xb0\x1c(r\xc6bPZ\xc1\x10f\x868\x02&t\xdaR\xc2-\xb9\xc4\x89\xc2\x13\xbb\xb0\xb9\xc6D\x84C\x80\x05\xd0D\xf3\xf6O\xbc\x96\xf5\xe1\xb6\x99TB\xe0\xc7%\x8c\x1d\x10\x89\x04e\xf4A?\\\x07\xdcW\xdf\x7f}\xfd\xe3\xdbm\x8f T5\xeb\xb0\x13W\xe4\x91\xa9 \xb7\xdcm\xce\xd5$]\x11\xcfl7M6E\x94\xb7\x92Jr-\x01O|\x10\xe3G5\x92x`-\x93P4!\x98"f\xc2AOSr\xd2gJD\x933\xe3x\x96\xe0\xd8\x88\xbbN\x9c\x8b\xe4\xab\xb1\xd6\x02\xb9\x93\xcd]e\xcc\x0cE\x1c\xe0*s\xb0\xe4\x91\x11\xf0\x1a\xc1\xf4\xd3Q7=\x92\x9d\xa1\x15"\x98\xba\xf1b\x82\xb7\xe8.TA\xd6\xf0\x08A/e\xd5\xc3\x1e\xab\x93\x1b\xcfvG\xbe\x0c\x0e\xeb|\xccR7\xb7\x11,\x16\x83-\xd7D\xd0W\x8c$\xa7|\x82\x93\xa2\x82\x11\'b\xc8\x99\x05s\x8ec\x166\xcc\x9ea\xb3V|\xf7\t\xd4ysHJ\xc3I\x05\x1c \x11\xb6J\xa1\x04\xa7\x03\x15\\\x0f\x92V\xa7\xee\xd5&\x17\xe5IF\xb1\xb0\xd1\xa1t\xb4]ZuC\xe5\xd2\x84\x02>z\xd5s|-\xe8\xfa\x1c\x1bY\xc9R\xc3\xaf\xcaI\x19\x0f\x058\x94\x14,V\x01\x0f\xa0%\xf5\xe0 6\xd0\x12%\x9e|\xe5\xd7x@8Y\xd5\xaev\\P\x8dj*.+\xc7\xccr\xf4\x0ba\x11\x8f\xb8\xa2\xc9E\xc5x\xadP\xde<\xe0\x92l\x1av\x03\x803\xbcX\xde\x9a-\xc1\x8d%\xf1\x8dq\xecT\x13\x87i\xb9\x98mn8x\x8b\x02\x03\x1fx\xb1\xe7]\x80VY\x8c&<\x02W\xc19v\xf2\x93\x97\xb7cS\xa0\xb8*\xbe\x83\x91\x05\xf0\x80!\x97\xf4k\xd4\xc2\xae\x80\xf1\x81_<d\xadZws"\xf5(\x9c\x99l\xe33\xef\x99\xcf\xa2\x92\xf2\xa9\xd6\x1c\xd86\xe7\xa1\x9d!}3\x8d\xdd\xf0C\x0f\x149\xaby~S\x9f!\x1d\xe9\t\xa5Y\x87\x81&\xef\xa0\xef\xa0\x83\x18\x80\x07\x92\xb0t{6\x01\x06K\x87z\x14\xba\x8e\x80\xaf{b\xeae_\xcc3\xdd\xf3\xc6\xa9\xb9\xc8\xa3@\xf2q\xa3\xe9\xb6\xbbG\x81H}^\xf1\xa2\xcf\xa1\x9d\xd2\x96\x03\xd2}7a\xfe,/\xec\x8c\xb08b\xf0\xe6\xfa+\xe7\xec\x80\x01\xc9\xc6e\xb4\xc3\xda\x05\x01\xc9\xc6\xdf\x82P\xf2\x0ea\x05\x96n\xfb\x92 \xef\xf6\xce\xeaV\xd0\x07`\xa0\x8f\xe0\xf44\xb1\x17W0\x189Q\x1a\x1bq\tL\x92\xfb``\x03$\x10\xfd\x88\xf0\x02\x91\xc0\x01\x06\x92\xe9\x0e)\xf6\xde\x0e\x05\x11\xc0\x1c\xc9\xb1!E\xd0\x07`r\xea\xd0*(\x87\xd2"\x91\x80"YR\x03H\x10\xf6\xd4n\xfe\x9a\xee\x90,q\xe9\xd8\xc1\x08$\xd0\'\xaf1\xfe\xaaP+\xf9\xef\x0c\x0ec\xbf\xbc\xb0\xc2\xc0\xb0\x0e\x8c,\x1eo\x9b\x12\xfe\x9609g\xb3\x08\xd2\x0e1\x91\x809\xc3O\t\xb4N\t\x9a\x91\x0b\xfb\x0f\xa3dp\xe4h0\xd1|.\x1e\x97\xcc\x0c9\xcc\xf5h\xd2\x08\x8801\x8b`\xfe\xba\xf1\xf9\xbc\x13\xf4\x84\xb4&\xf7\xaeC\xc3\xb3=HQP\xc5\x11\xf5\xec\xc9\x03\x1e\xd4>H\xef\xfb\xc2nJ}@\xe9\xfa\x94O\xe5\xb2S\xff\x14S\xbdT\xf6RG\x95.@E\xf0*\x91\xa0=\xea#\xee24\t6\xb5P\xc51T\xd3\x0e\x0e\xcb1\tx\x92S\xb7\x12\x01\x18\xb3\x13\x17\xb3\x08r\xf5\x08\xec\x94\t.\xd5O\xd7\xcf\xf6\xce\xff\xf3\xaf\xd23\xf7\xd6SUt\xc9-\x9d4?/X\x91\x95f\xdb\xf5f\x11\xa0I\x15\xd2\xf8\xd5jU\xf5\xec(\xd4f\xc3\xd1\x1c\xe3.B\x97\x8e5+\xbb6+\xcd\xb1=lvl\xb9\x12Y\x192S\xefPoM\xd7q\xad0\xfd\x1c\xd6\x1c%p\x0b\x8d`uy\xf7\x1c\x97\xd5\xb2\xc2\x92\xcd\xc6Rp\xe3EeuU?\xd9O\xeb\xd2\xb6\x117CqIWR\x1b\x97\t\x863\x13\x8eU\x02\x171\xfb\x18\x937\xc0\x05L\xe0&\xef\x8esq7x\x81\x12d\x9fvv\x95\x80\xa9\xf7t!4\xfe\x84\x97\x92\xf0\xd6z\x87wWx\x969\xc7Qv#5o\x1d\x14m\xa3\xb7\xef\xc0tqQ\x97<Ep\xfe\xb0N\x7f\x9d\x80U\x93 \x1c\xb9\xb4+\xbb\xa0o\xfd\xb6d\x01Wy\x95\x17?5\x10x\x85\xf3|?6\x13\xa5\xff6\t\x86Ug\x8b@0\x87\xf4X\xdd0\x1f\xbdu\x1b\xab\xb7\x135\xd0BA/K\x95 V\x9dv^\xd9WVI\xb7\xfd(\xf4W\x7f\x12\x0e\xe7\xf7\tpv\t \xf5~\xbd\xd5B\xdd\x90\x1d\xe2Nc\x97\x80.\x8b \xffj\xcf\x08\x86s?\xf9s\x85\x1d68\x8d \xfb\x1e\xd8U%\xa6.\x9d n\xb7\xb2\x7fC6\x82\xfb\x16\xf7\xa0\x80\xe4,X(\x1eP0\xab5)\xab\x96H3\xb3t\xad\xb2\x86\xb5\x10P\x97`8\xb9\xf4X)\x14\x803T\xc1\xb3u\x89\xf4a%\x90\x18\xe3\x0e\x0b\xd9\x8b\x0f\x99W\xa5P\x97\xad\x96\t{x$\x85\x97\x08%\xd9\x89\xab\x94\xea:x\\\xd9W\xea\x1cu\x97\xe72\xfe"S.75\x94\xd9w/w9\x87)\x97\t\xc0\x13DG\x95x\xf9vd\xc5\xf8\t\xc8\x18\x96\x1d\xed\xc0\xb3B\xcb\xcf\xfa\xfc.\x929\x11\x060\xf6~YP\x02]\xd4\x12\x89\x901\xa9\xcf\xfa@\x03\x8b\xb9\x91{D\xa1\xa7\xb9\x1a\x15\x92\x13=@0\xfdN\xf4\xc0\xb3@;\xd1y\x9f\x19}\x0b\x99\xfc\x02\x9a\xf9*7\x9c\x8d`C\x17:\xf9\x1a\x9a\xa4\x1b\xd4q}\x80.]d\xa3Q\x13\xa1}@\x02\xb9W\xa5\xf7\x12A\x8d`/E\x90O\x19\xd3\x03\x06\x11<U\xa0\x12a\xe0&\xd9\xf9jWp/\xfb72\'\xba\t\x88\xf0?\xe6O\x9a\xc3\xb4x\x95\xeboq.p\xf9\xb9\x88\xd8P\xf52\x95\xf6hu\xfc:@\x03Gt\xa4\x85r ?\xa0\xac\xb5\x0fY)\xef\x03\xccyu\xbd\xff\xf5a\xa5\x91\x04\xa5\xf43+r\x11_\x0f*-\xa0\x030\xf7?\x08\x19}\xc3:\xa5i\xf7;\xd5\x9a\xad\xdf\x10\x9ac\x1a\x02\xcdz\xefZ\xf3\xa0\xd1Z#\x1f\xb2\xfd\xa4t\xef\x06R\x89]\xb1\xb1A3\xb1\x8d\\d\x03\xe8\x12\xfaL\x80#\xcfw\xa3o\x92\xfe\xcc9\xb7\xc7\xcf\xea@\xb7\x81Iw\xaf1w\xfcl\xf6\xfdx\xdb\xe9d\xc0\x92\xcfw}\x07\xdb}\x83{|\x9bN\x05\xe2\xba~q\x13\x02\x0b`\xb8M\xa0\xb9\xb9[V+\x92\xea\xecO\x8a\xe3\xb7\x032\xf2&%3\xb5G\xf9\tl\xba\xe9~;TZY\x85\xc4\x92\xabm\xfb1\xe4\xd4P\xba6`\xf9R\xdb&<`\xc1Co\xf9\xb8\xa4\xc1a\xe0\xc1\x19\xc1\xc2\x9fA\xf9.\xff\xfc\t8\xfc\xb5Yp\xf9@\xdc\t\x1a\xfc\x94]\xd1\xbe?\x8f\xc2Ge\xc0S\xe5\xc0;\xc7\x1eg.\xc6\x05\x03Q\xc1\x89\xc5_\xd9\xc5\xa3\xf5\xabe|\xc7\xa7\xa1X\xbf\xc9\xc6\xc9\x14\xc7\xbd\x1a\xc6y\xbc\xc8\x85\x81\xa8\x9f\xb3Vk\x1c\xabO\xacY\xc7\xf8Y\x85\xfc\xe8\x98\xd7\xc8\xa9\xfc\x9a\xce\x9c\xdb\x08\xc8M6\xcaMJ\xc7\xab\xfc\xcb\x19!\x14e@\xa6\xf9G\xcb+\x98\xcb\x11|\xca\xc1|\xcd\xbb\xcb\xcc\x19\x81\x04j\x1b\xcd\x8f\x8f\x80}\xd8\x8d\xff\xfd\xd8\x1f\x86\xd6\xa7\xcc\xc9\x91\xbd\xd9y\xbd\xd8\x9d=\xda{\x1d\xda\xa5\xbd\xdae\x9d\xda\xad=\xdb-\x1d\xdb\x8f=J\xa0\x80\x022\xd1\x05&\xc0\x05\xf4}\x13\xe0\x9d\xe1\xa3\x81\x02\x14\xfe\xdf\x05<\xe0a\x8d\xd9\x85\xbd\xe0\xa5>\xe1\xdd\xde\xed/\xa5\x04\xe8=\xf6\xdf\xfe\xec\xd9}\xe4\xdd>\xf9\xe0\xdd\xf6\xc7\xdb\x08\xdc\x1e\x07l\xdf\xed\x1f\xc2\xe3I\x89\xe7-1\xdewe\x02\x0cA\xee\xd9\x1dM0\x80\xdeg\xde\xe1g\x02\xf6c\xdf\x04\x84\xdfEh\x7f\xf8\x0b@\xdf{?\xf6y! B\xa5::\x0f\x81N\x04,P\x80:Sh\xe7N\xba09N\x95\xe4R\xe1\xe1h\x06`\xae\xf0"dC\x9a\xb8\x18\x12n\xca\xb5XIh"\xa5K\x12E\x1fCZ\x83EJH\x80$(}L\xb2t\xee\x95;)\x13j\xcaj9A\xda\x90\x05~F\x96\x94\xe2s\xe7\x10$<\x93\xf0LVJ\x90\x89\x97E\x80\xde|\xc9\xea\xdd\xc8@ILX\x9ct/J#@\xae\x92l\xed9i\xcfF)\xff\x1d\xe9Y\x8aRv\x88\xce\x89n\xdf\xc2\x8d{0AB\x86v\xd18|\x13w/\xdf0E2J\x11\x04L\xe5\x94I\xad\x10\xa5\xf5\xe1\'\xec\x10s5\x93xU;l\xe5\x10L^y\x8d<g\xaeU\x14^\x0e*O\xf8t\xce\xd49^\xa1Ic(Jt\x88\x1f\x0c(\xb5\x15\xc2\xf4Y\xa8J$\x9c\xa3\x14Q$8\x8a\xa0?f\xf7I\xf1\xf3\xd2\x07\xa8\x9aRJ\xec(FX\x8aaR\xa9IN`\xec#I\xdf\xea\xd6\xafg\x99[\xf7\xae\xdd\xbcp\xb0\x83\xbf\x9e{\xca\xee\xe2U\x1ae|\xda\x19)\x85\xf6\xeeU.\x8fr*\xfd(\xa5UO\x012\xa1K\x96\x94F\xf7|\xea"\x1b\x15\xe6\xe8\xc2\x8d{\xee\x997/ \x82B\xb9\xfa\xf0a2\x05\xb8pO\t\x05`PL\x01*\xc77\x94.\xaf`3E\x13\xcf\x89\x89\xafj;\x9c2\xa2F5\xd7[\x1f\xbb:\x8b\x82C#\x89I\xd1DS\xf4\xfeAs\xc6:\xdd\xe3\xab\xbb\xc1B\\5v\x0b3\xdcF\x9fV[-\xf1H\xb4X\xb4\xc0?\x17C\xfb &&Q\x1cE;\xb2&\x9d\x0b\xc1i\xba0\\c\x8f\xc8\x99KZb\x7f4\xc4) \xb92\x894\xf2F\xb1\x8cP\xcb\x04 x\x14\xdc\x14\x8c\x9b\xd0\xf7\xa6\x1b\xc5\xb6\xfa\xc9W@Uk)\xb54\xd8\xae\x8c-\xf5jt\x1e\xcc\xb5\xe7|a\x9d5^[\x7f\x9e\xb0\xd7=\xe1"\x0e\x06~`\xc5v\x7f\x83 :\t\xdf+\xfe\x12\xbb#\xc8\xf8\xeaG\xcd$\xe6\xb1\x032\x01\x10\xe0i\xd5\xa5\xc3\x1fQ\xe8\xa27Dz\xfc\xc4\x9e\x8e\x9b\xee\xac\xa2\xe4+q[\xf2\x8fs\xe1rB\'\x14\xc7\xaf\xf9\\!D\xd2\x867\xb6\xd0\x15-\x04\xa0=\x0f\xd2\x02#\xa8\xa0\xc4.$\xb1\x18V\x88\xa2\xdc\x06r\xb3-\x10\x11iS\x08"\x0f\xbb\xd8\xa2\x1cfm\x87^\x1cc\x1c\xde\xa7\x05\x9fD\x8b\x0e+\xf4\x19L&\x03\xbf\x90\x911\x8e\x9e\x03#\xc3\xc4(\xc7;f\xc1\x8cY\xf0_\x18\xfcp\x9b\x01.\xadt&\xc4#!\x15v\x90\xed\xd0\xef\x0cv,$#9\xe6\x85\x91e\xc2\x0e%`\x9d\xe4\x94\x90\xff\xb1\xaa\xb9\xb4\'?\xfb\xe9\xcf\x80\xc0S!\xea\xfc\'A\x0bjP)\x04\xb4a\xf2<(C\x1b\xea\xcf\x84\xaea\xa0\x0e\x9d(E\xc7\tQd\xea\xa5\xa2\x1a\xdd(9/\x9a\x06\x89r4\xa4"\xdd\xa5G\xf5\x99\xd1\x91\xa24\xa5\xc0,\xa9"\x17\xaa\xd2\x97\xc2\x94\x90,\xad\xdf>cj\xd3\x9b\x8eq\xa6 \xc5)O{\xcaK|\xe6\x93\xa6\'\xf5)Q\x8b\x9a0\x9d\xba\xd4\xa8J]\xea\x8b\x90ZS\xa6\xffB5\xaa\xb3\x04j>w*\xd5\xabb\x15\xa0T=\xa6U\xb3\xea\xd5\xaf~a\xa6"\x98K\x06\xc0j\xd6\xb3\xca\x81\x013\xfd\xc1\\z\x80\xd6\xb7\xc2U\x0b=\x98KP\xd3`\x80\x83\x9c \xaez\xddk\x14Np\x10\x03\xd4\x15\xf0\xd8*~6\xb58}\xc5A@\xda\x1f\xf8\xb5\xb5\xaa\x9d\xadOM\x8b\xd7\xd7\xfe\xc0\x04sqAdi\xeb\xdb\x97&\xf6\xf6\xaf\x81\x1b\xec\xe0\xfa"x\xc1\x12N\xf0\x80\x1fl\xe1\x0b\xdf7\x06*\x980\x87;\xec\xe1\x0f\x83\xd8\xbf*\xa80\x86K\xec\xe0\x08\x87X\xc2$6\xf1\x83S\xacb\x167\x18\xc5.\xfeo\x89\xdb;\x81\xd1\xc27\xbe\xb6=\x08\x8cg \xe3\x19\xf7\xb7\xc7\x06\xde0\x90\x01\xbcb!\x13\x98\xc8E62\x92\x9b\xac\xe1%C9\xca\x1e\x1eq\x93\x91\xfcc)\xab\xa0\xca\x05\xbe\xf2\x92\xb3\xace\xfbJY\xc05\x9e\x8b\x01p\x9cc\xc1\xceE\xc8a\x96\xc0\x91\x9d\xbc\xe6\xfd~\x99\xc0o\xe6o\x9b\xe3l\xe1\'\xcf9\xcfE\xa6\xb2\x9dM\xcc\xe5(\xf7\xf9\xbes\xae\xb3\x90\xff<c\x13s\xf7\xccl\x98\xe4\x1b\x84\xacd({9\xce\x8f\x8er\xa4\xfbl\xe8%\x13:\xd0\x06\xc6\xb3\x9e;\xdda>k\xfa\xc2\x97.r\xa6\x9b<iH\xf7\xf9\xd4@\xae\xb4\x85\x85\xfb\\E\xb3\xe1\x04\xb6-\xf4\x9a-=\xe8P\x8f\x1a\xc8\xa5\x0eu\x92=\xed\xeb\x04\xb3\x9a\xd7\'\xff\xd6\xf3\xaei\xfd\xe6b\x9bx\xcd\xc8\xbe\xef\x18p\x02X\xdfE\x04+\x93A\x8f\xd7\x1clS\xcf\x99\xd7\xaa\xa6\xb4\xb0K\xcc\xe9_w\x1a\xd4\xdd~\xf0\xb6Q\x1d\xea9_\x1b\xc9\xe5vq\x89e\xf023C\xfb.\x01\x10 \xe9J_:\xd3\x9b\xee\xf4\xa4\x17\xc3\xe8R\x9f\xfa\xd0K\xf0\xf4\xabc\x9d\xe9T\xdf:\xd7+p\x82\xac\x83=\xeb%\xe0:\xd9\xcb^\xf6l\xe0\xeba_;\xdb\xdb\xce\xf4\x87W\xc0\xecr\x9f;\xd1\xad\xee\xf6\xb6\x9f \xeet/\xfb\xff\xdd\xd7>\xf6\xbdO\x9d\x02}\xcf\xba\xde\xcd~\x83\x9f\xef\x89\x03\x80\xa7\xb7\xdd\x07\xef\xf4\x13,^\xeaHw<\xd6\xff\x1e\xf9\xa9O\x9e\xf2b\xbf<\xe7%\x9fv\xcd\x83>\xebp\xef<\xe9\x87\xae\xf6\xd0?\xbd\xf0\xa5\x17z\xe3Q\xaft\xd5w\xfe\xf4\xa8\xb7\xbc\xd99\x80\xf8=y`\xf1\x82w=\xd4W_o\xde/=\xea\xbe\xa7\xf7\xee\x81\xbf\xf4\xbc\x0f\xbf\xf4\x14(\x81\xec\x8d\x8f\xf7\x12\x08?\xf9\x97\xf7\xba\xf3\x83/\xfd`T\x7f\x03\xbe/\xbe\xeb\xa3Ov\x0f\xdc~O,\x88|\xf3AO\xfb\xceg\x1e\xf8\x90\xbf\xfe\x06\xaa\xaft\xe4_\x1f\xfd\x14\xf8\xbc\xfb\x9f\xfep\xc0>\xfe\x80O\x7f\xf6\xe3_~\xd4\xe7\xdf\xe5\xb5^\xe8\xad\x9f\xdc\xb1@\xf8\xd5\xd2\xe2\xb5\x1f\xf0\x05`\xe4-\xa0\xf1\x9d\x9f\xef\x9a\x9f\xdcQa\x15\x1e\x0b\x0b\xcc\xdb\xdc\xb9\xa1\xe6\xe5 \xf9U_\x1e\xa2\x1f\x08*\x1d\x1b\x96a \xa2\xee\xf9a\xd2\x89\xa1\x0eb(\x8a\xa2\xd9= \x08f\xe2\x16\xba\xdf)\x9e]\x0cn]k\xb1\x80O\xfe#|\xc9\xa4O\xda\xe2\x01\xacdQR%w\xb4\xa5j\x12\x97i\xbef\x06\xbc\xa5n:#\x08\xf0\xe6i\xc6&|\xb5\x80b"%nEfC\xee%r\xe6X@\xbadm\xd2O:\xea\xa4\x07\x1c\xa7w\x11\'s\xba\xa5u\xca\xe1\\B\'[6\xa7w\x81\xc0t^fn2\xd6ln\xe49\x92\xe7\x99-\'Bb\xe6BBeR\x9e\x19\x07\xb0\xa7d\x8e\xe7|\xfe\x9cy\xbe\xa6-z\x80|\xc2\x17pf\xe7k\x19\xe6FV\'\x80\x12WP\xba$g2\x16\x82~d\x83^\xa3f\x0e\xa8%|\xa7\x83\x12\x17\x08\x18\xc2\x80F\xa5{zW}F\xe7kY&B\'\x87\xe2\x16\x89\xf6cSr\xe5\xffh*\x9ar\x82\xa8-\x06>\xebk5\x80\x9d\xce(\xa2\xfe\xaa\xffn\x06\xab\xab\xce\xe8d\xc6[\xaa$\xa8z\xa9X2+FZ\xab:\xc2j\x95\x9ek?N+iA\xe3\xb0\xea\xa2\x07\x94\xea\x8f\xc2%\x08\xa0*\xb7\x1e*\x98\x8ehV\x06\xc0\xa5\xd6\x95\xa7\xb6\xe8\xad\x96+\xae\xce\xa4\xb8\x92\x96\xac\x92+\xb4\xc9(\xbcR\xe3\x02\x88\x80\xbe^d\x0b\x88\xc0\x02\xac+\x94\x1ag\xbc\xf1\xaaDrj\xd6Dk\x84\x0el\x87V\xac6ji`\x81\xab@\x8elb2\xac?.\xac\x89.\xa6\xcb\xe6S\x92~\xe4\xc6\xf6\xac\xe8\x08\xed7\x12&@\x86\xec;\x9e,|\xe5\xe4\xd3\x1e\xa3\xbc2@\x03\xb4,|\xc1l\x030@\x06l\xad\xd1\xd6\xe4\xcf\xe9\xac}\xfak]9m\xb8f\xed\x96\xea\xa4\x0f\x10\x17\xc0nd\xd8z\x17\x07\xdc-\xff\xd9\xd2\xac\x07,@\x06$m\x03\xa0-\x0f\x80^&\xfd\x9e\xef1!,\xde\xf6m\x8f\xf2/qY\xa9\xfc\x1a\xb0Of@\xd4z\x97\xe9n\xe4\xe8j-m\xf6/^\x1e&\xeb0\x02\xb2\xc0\xdb\x1ep\x06\x03\xa3\x07d\xeb\x99\x81\xce\xf2\x99\xb1@-\xb3\xb2\xb3v2\xac\xb5n]\xfe2\xc3\xfc/4D\xff3T&3\xc3\xf8@\xe5\x1e\x80\x078\xb7\xecc\xee\xa8>\xea5\x927.\xa2\xf3z\xc3W\xfb\xfa\xe4|\xbf\x16\x7f\x0e+\x17\xd3\xb7I\xce\xe5\xb0\xa2r\x8e}\xb2Pjw\x7f\x07\x16i7\xaf\xa2\xa9\xb1{\x1b\xb7\x81\xcb\xa6f\x7f\xb1y3\x0c_\x97c\x83;\xb8\x8c\xe8v2\xfa5\x14S\xb8K\x1e\x80W_8x\xba\xf5L\xfa\xa8\xa2e82nx\x88Cq\xff|\'\xe4n2\xac\x94\xaax\x15\x160\xbc\xa6x\xd6\x9cx\xd9\xcau\x8c\x1f\x8b}\xdf\xf4\x99!8[&\xaa\x8e\xc7\x9b\x8e\xa6\xac\x85\xdf\x85O\x1f#\xea9og\xa5=C$\x84\x97c\x8d\xe6\xf8\x92s\x07\xfc\x0eke{\x97:\xfb\xa4wS\xb9\x8c \xf91\x1a\xb9]\xe87\xc3Jy\x97\x93\x96\x95\x03x\x81\x07\xd5\x8f\xe3\xa3E\x9b\xb9\x0f\xf7\xf6@w\xb8N\x96\xf9\x9bC\xab \x8fj\x89+\xdaj\xe3\xa3\x12\xdby\xab\xb2%\x97\xef\xc9\x97\xbf.\x7f\xff\xf9]\xa09\xbc\xba\xb9mN\xed\xa1#)\x94\xe3\xa2\xa0\xcb\x08qwo\x90;\xfaB\xe8(\xa4\xff\xf4i\xa3\xa7p_z\x19#3\xb4\x8d\xb9\xd1\xca\xf3\xa7\xabA0\x93m\x80\xefy\xa8\x9b:\xe7\xb2z\x8c\xde\xb8\x87Kzc7\xc0\x88\x0f\xef\x94\x1f\x0b\x9f\xb7y\xab\xdb\xf5\xab+\x1aw\xa7\xecF\xdb9\xa3\x12n\x0c\xaf:[\xfa9\xaf\x9f9\x8b\xe7b\x98\xdf\xc5\xa8\x93m\xa9R9\xaa\xce\xae\xff\xaa\xffz]\xe2\xb7\xb2\x93\x96#\xcf\xa4\xb3\xdb\xc5\x7fW\xbb\xa5\x1b8\xb1\xcf\xee\xc5\xd6\xa3dJ\xb8\xb6\xcf\xa1\xa6\xdf\xa2\x93\xef9\xbb\xdf)B\x8bw5\xcf\xf9kby\x8ei9S\x82\xb8\xba3\x8c\xae\xef\xfa\x90\xd7\xbb\xbd\xcf\xabY\xdb\xebP#/;C\x1b\xa1s$\xbf\xc3Z\xbe\xf7x=\xc2\xfb\xeb\x0e|3\x17|\xc4\xdb\xa7\xb7\x1f\xf9i\xba;\xc3/\xb6\xfb\x12m\xc0;\xeaQ\xa7{\x98\xf2\x80P[|C"<\xb4\xc5:\x8as\xfc\xcf\xad\xfc1\xd6\xb8\xff\x9e\xbcDv\xf5\xf9j5\x1cc\xfc]\xbc|?\xb7<\xe2\x81\xfc4\x1e}]\xad\xad\x0f\xc4\xf6\xcc\xdb\xfb\xc6\x9f;s\x96\xfd\xe1\x97&\xe6\xc7|\xb2\xee\xbc\xebJ\xf7\xcab\xb7mO\xfe\x1a@nr\xb7\xfd\xe5\x12\xf5.\xfa=\xfd\x8c\xbe?\xee\xbb\xe7\x07\x15\xa5\xe7g\xeaG\xb2\xdec2u\x1f.\xe2&\xad\x08`\xb7\xe2\x12\x7f\xf1\x0b?\xe5\xb6m\x06,@sc\xbe\xd1\x0e\xfe\xfb\xfe<<\xe2\xbd\xedw\xea)\x1b~\x9e\xf2\xfe\xebk\x7f\xbc.>w@{\xa0S\xbf\x1c\xfa{\x8bN?\xc3$\xfa\xf6\xa3\xbfP\x1az\xbc\xe1>I\x87\x7f$\x8e\x7f?.::*|\xfa\xdb?-\x8a\xfb\xf2\x82h\xf9\xbf?\x10\xfc\x84Cb\xb1\xd8\xe8%\x95Kf\xd3\xf9df@Fj\xd5z\xa5\xf22Pn\xd7\xfb\x05\x87\xc5cr\xd9|VfxXv\x1b\x0b\xda\xa2\xc9\x10\x01\xadkI\x14U]em\xf5\xca(4m\x13\tpU\xca\x94\xcd\xd5\xdd\xe5\xdd\x0c\xb4\xed\x91\xea\xadB\x056>F6\x83\x1d\xa6\x82;\xc6e\x8e\x96\x9e\x1en\xa8\x05&\xa4\x1eBL\xee\xf6\xfe\xce\x90\xd4\xfe\xa94\x0e\x80\x1eOW_\xcf\xb36/M\xe7a\xb8\xfe\xae\xb7\x7f\x0c`XK\xa75Gg\x07\x18P \x11\x16\xf4l\tK\x07B\x84\xa5{v\xe2\xc1\x87\xd6\x80\x88\x91)6\x9cY\xf3\xacnM\x07r`\xe0\x18\xf2^\x0f\x0c\x8a\xbc\x8a\x0c\xdef\xd6\xad\x8d\xb8K\xfc\x97c\xe8\xd1\xa4\x19\xe0\x15\x08\xc2\xf2\xb1s\xae}\xff\xfeQ\xb0\xb3\xca\x80\x1c|\x04\xae]\xf2\x80\x8f\xd3\x19\x1b\x88nu\x11\xf8\xf4\xd6J\xbd\xa9\x99\t\xa2A\xd9\xe4\xdf~6\x90\xbd\xb8.6\xca\xd4\xcd\x17\x06A\xb2\x1b)\xa4,\x18 \xef\xde\xea\t\xc4\x90\x01\x11p\x8c\xeb>o\xf2\xd3\xb1I\xb9\xfcK\xc6\x83\x0f\xff\xbb\x02\x81\x85 \x17\x80\xae!\x0f2\x14\x81\x05\x13\xe3J\xb0\x9e\x05\x9d$\x13\xa9\x07\xbd9\xa0\xbe\xea\xacd \x03,m\xbc$\x80-30\x92\x85\xf2Xc\x01\xbe\xf5\xa6,\xb3\xcf\xcf\xb2\x04f\x01$\x81\xe3\x81\x85\x06D\x08\xb2\xcd\x05\x168\xc0\x03G\x03\x80\xb4\tH\xe5t\xf4\x80E\xe94R\x84\x06\xecd\xb0\x05\x1e\xbf!\xcaOQ\x91r\xe6\x9epFE\xd5nL\xfd2UW\xd5Q\xb2\x9eS_EuU{|\xa45W\x81jrhV]\x9b\xb4\xd5\x9eP\x7f%\xd6\xa9\xf1\xaeS\xb3X\xf3\xc8z\x08!e\x9f\x1d\xe7L{R\x82v:\xbd\x1c\xea\xadZm\xa9\xe1\xe1\xd3{\x0e\xe0s[3\xf5\x9c\xf6Nq\xcf\xdd%\xd6{$k\x15\xdd\x8c@h\xac$\\\xdd\xa5w\x17\x0e\xc8\xbd\xd5\xd7z5B\x04N\xb7f\xdc7\xe0O\xa0l\x88Z\x81\x01\xba\xd6\xa41\x0ff\xb8\x13\x96x\xca\xc7\xdc\x86\x93\x9a\x87\'\x90&\xc6x\xe0\xa8\x0c\xce8\x97\x84\xffOZ\xb8c\x91\xfdh\x01_lo\x1b\x99\x93\x16*\xee\xc9\xb3\x94_\xf6\x83\xe5\x9e\x0e\x10Ab\x98\xdb\xe0A\x04\x93O\xbe\xb9g?\xbaEk\x01\x89|fC!oyZ\xc0f\xa2\x97fCZ\x883\xd8\x90\xe9\x1f\xb4\xe3\xee\xacl\xa5\xc6\xda\x8eR\xf7\x12\xba\xdd\x86\x8d~\xcc\xd9\xac\xc7v#O\xc8\x84\x06\x98a\x14\x8f\x96*M\xb2\xdf\xbeC]\xb4JK\xb6^\xf7\xb8C;|\x0c\x87?t\x04\xc7x8D7\xe8\x04\x88G\x94\xc3O\x06ED&Z\xc1\x86H\x84"\x18t\xd8D*\xde\x81YQ\xc4b\x132P\xb7*v\x91e\x89\x84\xe4$\x8c\xa3\xc7F\xa2\xc94\x91\xc4$\'r6\xa4J\xf6Hh~\xccd(\xf3@5FvR\xd9\x0e\x98;\x9d(U\xd9\t\xce\xa9\xd1\x94]`\xdc!W9\xcbM\xb8\x87\x93\xaf4C\x91\xb8HK^\x9a\xc2\x96\xae\x9c\xa3.{9Lj\xf5>\x0f'

request = {'project': '10', 'sentry.interfaces.User': {'is_authenticated': True, 'ip_address': '127.0.0.1', 'id': 10}, 'sentry.interfaces.Exception': {'type': 'HTTPError', 'module': u'tornado.web', 'value': u"HTTP 403: Forbidden ('_xsrf' argument missing from POST)"}, 'culprit': 'tornado.web in check_xsrf_cookie', 'server_name': u'foo', 'extra': {'sys.argv': ("'foo.py'",)}, 'event_id': '16c416fcb5fc43b5bf97960583a2ee63', 'timestamp': datetime.datetime(2013, 12, 30, 18, 25, 21, 785921), 'level': 40, 'modules': {}, 'time_spent': None, 'platform': 'python', 'sentry.interfaces.Http': {'cookies': None, 'url': 'http://foo.com/', 'headers': {'Content-Length': '8740', 'Host': 'foo.com', 'Accept': '*/*', 'User-Agent': 'curl/7.27.0', 'Connection': 'close', 'X-Real-Ip': '127.0.0.1', 'Content-Type': 'application/x-www-form-urlencoded'}, 'query_string': '', 'data': data, 'method': 'POST'}, 'message': u"HTTPError: HTTP 403: Forbidden ('_xsrf' argument missing from POST)", 'sentry.interfaces.Stacktrace': {'frames': [{'function': '_execute', 'abs_path': '/home/foo/foo/virtualenv/local/lib/python2.7/site-packages/tornado-3.1.1-py2.7.egg/tornado/web.py', 'pre_context': [u'                                    for (k, v) in kwargs.items())', u'            # If XSRF cookies are turned on, reject form submissions without', u'            # the proper cookie', u'            if self.request.method not in ("GET", "HEAD", "OPTIONS") and \\', u'                    self.application.settings.get("xsrf_cookies"):'], 'post_context': [u'            self._when_complete(self.prepare(), self._execute_method)', u'        except Exception as e:', u'            self._handle_request_exception(e)', u'', u'    def _when_complete(self, result, callback):'], 'vars': {"'transforms'": ['<tornado.web.ChunkedTransferEncoding object at 0x1ce10d0>'], "'e'": 'HTTPError()', "'args'": [], "'self'": '<__main__.Handler object at 0x1ce1110>', "'kwargs'": {}}, 'module': 'tornado.web', 'filename': 'tornado/web.py', 'lineno': 1133, 'context_line': u'                self.check_xsrf_cookie()'}, {'function': 'check_xsrf_cookie', 'abs_path': '/home/foo/foo/virtualenv/local/lib/python2.7/site-packages/tornado-3.1.1-py2.7.egg/tornado/web.py', 'pre_context': [u'        """', u'        token = (self.get_argument("_xsrf", None) or', u'                 self.request.headers.get("X-Xsrftoken") or', u'                 self.request.headers.get("X-Csrftoken"))', u'        if not token:'], 'post_context': [u'        if self.xsrf_token != token:', u'            raise HTTPError(403, "XSRF cookie does not match POST argument")', u'', u'    def xsrf_form_html(self):', u'        """An HTML ``<input/>`` element to be included with all POST forms.'], 'vars': {"'token'": None, "'self'": '<__main__.Handler object at 0x1ce1110>'}, 'module': 'tornado.web', 'filename': 'tornado/web.py', 'lineno': 978, 'context_line': u'            raise HTTPError(403, "\'_xsrf\' argument missing from POST")'}]}, 'tags': {}}
json_result = raven.utils.json.dumps(request)
pprint.pprint(json_result)

```