import snappy
import string
import json
import re

records = []

records.append(b'\x18\xf8\x80\x00\x02A&\xc3|\x18\xf8\x04\xf0`{"_key":"3f41483c0aabcff7f10436c9a0fc6817ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-27aa86c340f8c5e6049f8677d2e126ff"\x01/\xf0\xdcseq":8399929,"_timestamp":1652331383,"_deleted":false,"_version":12,"_record":"file_meta","name":"542921_0.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_sc%s\x00f\x09\xb20provider_id":\x9eQ\x01\x18,"share!\x84\x08],">\x05\x01 parent_uu\x05S\xc0dd4aabac5acf5ad2496533e15a3e8609ch5915","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x015`\xb0\xc3')

records.append(b'\xc3|\x18\xf8\x04\x80\x00\x015`\xb0\xc3\x15\xd9\x02\xf0`{"_key":"07d3eabf671fcafafc53629cf3d70428ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x881-f2effa13df4cd2981121251a37ef1ce8"\x01/\xf0Bseq":8120728,"_timestamp":1652323526,"_deleted":false,"_version":1,\x01t\x1ccord":"t\x01?\x0c","a\x01\x09\x1dC\x0c5,"cF\x13\x00\x00m>\x13\x00\x00}\x80\x00\x02>\x0d\x8ej\xa7\xf8\x04\xf0`{"_key":"bca81522a7c93dc2b59a1034d5745315ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x01302-926a2437e67\x01f\xf0\xf0a67182d22c9046137"],"_seq":8120878,"_timestamp":1652323529,"_deleted":false,"_version":12,"_record":"file_meta","name":"118749_0.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_-s\x00f\x09\xb2$')

records.append(b'd17"}}}}\x80\x00\x02\x81\x8a\x0b\xe5/\xba\x05\xf0`{"_key":"07bbf3281ad9567a7e2e674258c737d7ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-304564f15b0598d595b69579da599046"\x01/\xf4\x1c\x01seq":4483438,"_timestamp":1651813345,"_deleted":false,"_version":12,"_record":"file_meta","name":"109529_eed71b9ac9f71d2b6d36b2f8b451ed0d2955ddb232f7ed19e8d1e4000d6_ggUipPE.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_-\xb5\x00f\x09\xf4$provider_i\x01\xea\x9a\x93\x01\x18,"share!\xc6\x08],">G\x01 parent_uu\x05S\xc0e53eae5bb918f017b1899196bcd9e7c1ch64c5","referenc\x00\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x02\x81\x04\xa4\xc8L\xba\x05\xf0`{"_key":"80133e4a40aeb4a70dd2c835a39082cach56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6')

records.append(b'\x00\x00\x00\x01\x01\x00\x00\x80\x00\x02e\xf0\xbb\x99\xd5\x9c\x05\xf0`{"_key":"07bc54\x007100be22293000d167e629d08cch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-1aac706ac2a2d38b4aab4bae53d20c76"\x01/\xf0Dseq":17008558,"_timestamp":1653265929,"_deleted":false,"_version":12,\x01vTcord":"file_meta","nam\x01\xf3\xd0thumb_31998198-main-0003-32253295-80015942.jpeg","typ\x019\xf0iREG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_scope":\x0d\xd50provider_id":\x9eu\x01\x18,"share!\xa8\x0c],"d:(\x01 parent_uu\x05S\xc03550cbdb953f9fc9a30f5377e30e1120ch36b4","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x016/\x84(\xd1\xda\x02\xf0`{"_key":"979a93aeeead97f8c1ebdabdfd582accch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33')

records.append(b's":null}\x80\x00\x02T%-\x84\'\x95\x05\xf0`{"_key":"07bc6bc34bfde33ba51e63e41fbca5b8ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013l2-9f0fb0563d572eae231ccb4780\x05\x0c\x09/\xf0Dseq":12481958,"_timestamp":1652658254,"_deleted":false,"_version":12,\x01vTcord":"file_meta","nam\x01\xf3\xf0\x8d23362464-text-0003-24986124-58380724.txt","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084\x01\x99\x08is_-\x90\x0d\xce0provider_id":\x9en\x01\x18,"share!\xa1\x0c],"d:!\x01 parent_uu\x05S\xc03f6b432b83bcea4cd60e03babd7b0c32ch7234","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x01\xad\xb2\xfcR\xa4\x8c\x04\xf0\xb4{"_key":"f5c83b99e937d0edae4620a6bd073bedfile_metalinks_forestch8b36","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87","_mutators":["7f3a76')

records.append(b'3581c"}}\x80\x00\x02\x8c\xc9E\xbe\x01\xbb\x05\xf0`{"_key":"07bca49d4fab2c4f589060184deea766ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-3bc45622c91c767f6f5a41eda93dff31"\x01/\xf48\x01seq":5932582,"_timestamp":1651864989,"_deleted":false,"_version":12,"_record":"file_meta","name":"73800_eed71b9ac9f71d2b6d36b2f8b451ed0d2955ddb232f7ed19e8d1e4000d6f9_rN2bWNU.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_scope":false,"provider_id":\x9e\x94\x01\x18,"share!\xc7\x10],"de6H\x01 parent_uu\x05S\xc00258c618e52856e5d175255eeb512e49ch4a57","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x02O\x13\xaf\xb1\xfb\xe3\x04\xf0`{"_key":"68b265a4ea3e52ea82f230855b56a8a1ch56d7","_scope":"edcd12c92d6ed0658a731016c')

records.append(b',"m>\x13\x00\x00}\x80\x00\x02[\xf2(\x81\xf5\x94\x05\xf0`{"_key":"07bcf593ad59d7707f440139e484187dch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x802-732944ea3a7bb9325e08e9d898ad0af\x09/\xf0\xf8seq":9953279,"_timestamp":1652580463,"_deleted":false,"_version":12,"_record":"file_meta","name":"20789782-text-0000-20847714-45826662.txt","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_sc%\x8f\x00f\x09\xce0provider_id":\x9em\x01\x18,"share!\xa0\x08],">!\x01 parent_uu\x05S\xc008389a43afe035c122f082fb9e6bf20dch0fb8","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x028\xa43\x15@\x80\x05\xf0`{"_key":"277b1ebc48697b1bf04f2b8a932b7110ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e8')

records.append(b'1db"}}}}\x80\x00\x02Z\xa1c\xc6\x8d\x94\x05\xf0`{"_key":"07bcfaa0f8cc98d566ec459b8ba1f68ach56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-b108accdd203e300abd1e57729ee602f"\x01/\x88seq":8791492,"_timestamp":165253618\x01\x18hdeleted":false,"_version":1\x01\x1f\xb8record":"file_meta","name":"13831445-main-0000-\x01\x13X3501-28573843.pdf","typ\x012\xf0iREG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_scope":\x0d\xce0provider_id":\x9em\x01\x18,"share!\xa0\x08],">!\x01 parent_uu\x05S\xc00b352a454fbd326a6753411b36304bbachc10b","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x02]x\xaa\xa0T\x94\x05\xf0`{"_key":"e25dac4f3c93ec38fec16b6c8ceadb66ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85')

records.append(b's":null}\x80\x00\x02\x80\xf2\x88\xb3\x16\xb9\x05\xf0`{"_key":"07be19a31f56ce2f027b78ac5a8199bech56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-5a5b9500542a33e3e6380098ca64b1a5"\x01/\xf0Bseq":923005,"_timestamp":1651189139,"_deleted":false,"_version":12,\x01tTcord":"file_meta","nam\x01\xf1\xf0\xba217635_eed71b9ac9f71d2b6d36b2f8b451ed0d2955ddb232f7ed19e8d1e4000d6_4ocYscv.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_-\xb4\x0d\xf40provider_id":\x9e\x92\x01\x18,"share!\xc5\x0c],"d:G\x01 parent_uu\x05S\xf0b9e902dc9d2451c4ae469e6dc4e17a23cch48d0","references":{},"symlink_value":null,"dataset_status":null}\x80\x00\x02~7\x93\xe0.\xb9\x05\xf0`{"_key":"8dba0a4a39c51122e0ae4e34b29d86e0ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c8')

records.append(b'\x00\x00m>\x13\x00\x00}\x80\x00\x02\x80 \xa9W\xd0\xba\x05\xf0`{"_key":"07c08f2270a54626bc5a3c68dd17f1bech56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-83b3028155d4590d9d6525d4432446e0"\x01/pseq":5530851,"_timestamp":165\x01h\x88024,"_deleted":false,"_version":12,\x01uTcord":"file_meta","nam\x01\xf2\xf0\xbd732886_eed71b9ac9f71d2b6d36b2f8b451ed0d2955ddb232f7ed19e8d1e4000d6_G3Pme31.jpg","type":"REG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_sco\x01k\x0d\xf44provider_id":"\x9a\x93\x01\x18,"share!\xc6\x08],">G\x01 parent_uu\x05S\xc091efb955610301a3425717038daf7a00che7b7","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00\x01\xa65\x1d\xf7\x05\x8b\x04\xf0\xb4{"_key":"8605d3d6d486f6ca322df10395713b43file_metalinks_forestch1737","_scope":"edcd12c92d6ed065')

records.append(b'd":null}\x80\x00\x015\x0c\x9a\x95\xd5\xd9\x02\xf0`{"_key":"07c09e8fc36c7a193e6f46181229b56ach56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x881-2a99692e3c4e6710d50c791ea17bdd28"\x01/\xf0Bseq":7518046,"_timestamp":1652301998,"_deleted":false,"_version":1,\x01t\x1ccord":"t\x01?\x0c","a\x01\x09\x1dC\x0c7,"cF\x13\x00\x00m>\x13\x00\x00}\x80\x00\x02D\x936\x06\xdf\xf7\x04\xf0`{"_key":"e530ec34fc542388e5a602c4b92166f0ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-4de93c71db8f8c1deac41dd1387405e2"\x01/\xf0rseq":7520128,"_timestamp":1652302170,"_deleted":false,"_version":12,"_record":"file_meta","name":"81298_0.jpg","typ!\x07\xf0lREG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54e0789ach084a","is_scope":f')

records.append(b'd":null}\x80\x00\x02b~\x89\xe9\x02\x9c\x05\xf0`{"_key":"2e6f8cbc75c212f1481e6ec03d1c8da3ch56d7","_scope":"edcd12c92d6ed0658a731016c259e703ch6c87\x012\xe8mutators":["7f3a769df33904b1852e85c2c6bfb537ch2404"],"_revs\x013\x882-c1dfd8622deab448e0fa0687cfc749d5"\x01/\xf0Dseq":10134113,"_timestamp":1652584529,"_deleted":false,"_version":12,\x01vTcord":"file_meta","nam\x01\xf3`thumb_10992427-main-0015-\x09\x13T02-22415678.jpeg","typ\x019\xf0oREG","mode":436,"protection_flags":0,"acl":[],"owner":"d8f38e449dd457e3d3a321bd54\x00e0789ach084a","is_scope":false,\x01`$vider_id":\x9eu\x01\x18,"share!\xa8\x0c],"d:(\x01 parent_uu\x09S4dba636c3f66e6dA704f77648063939A00cf","referenc\x01W\xb4{},"symlink_value":null,"dataset_status":null}\x80\x00')


printable = string.ascii_letters + string.digits + string.punctuation + ' '

zero_neighbors = string.ascii_letters + '_'

def hex_escape(s):
    return ''.join(chr(c) if chr(c) in printable else r'\x{0:02x}'.format(c) for c in s)


def try_decompress(buf):
    for i in [6,7,5,8,4,9,3,2,1,0]:
        for j in [0,1,-1,2,-2,3,-3]:
            try:
                d = snappy.decompress(buf[i:min(len(buf), len(buf)+j)])
                # print(f"=== DECOMPRESSED WITH OFFSET AFTER |80 00|: {i}\n")
                data = json.loads(d)
                print(f"==[{i},{j}]= {data}\n")
                return True
            except:
                pass

    return False


def parse_snappy_range(buf):
    start = buf.find(b'\x80\x00') + len(b'\x80\x00')
    end = buf[start:].find(b'\x80\x00') + start + 2
    end = min(len(buf)-1, end)
    success = False

    if not (end-start > 64 and end-start < 1024 and end < len(buf)):
        print(f'### FAILED TO PARSE {hex_escape(buf)} [{start}-{end}:{len(buf)}]\n')
        return False

    inner_buf = buf[start:end]
    success = try_decompress(inner_buf)

    if success:
        return

    for zero in re.finditer(b'\x00', inner_buf):
        if zero and zero.start() < len(inner_buf)-1:
            zero_start = zero.start()
            buf_tmp = inner_buf[:zero_start]+inner_buf[zero_start+1:]
            success = try_decompress(buf_tmp)
            if success:
                return


    print(f'!!! FAILED TO PARSE {hex_escape(buf)}\n')


for r in records:
    parse_snappy_range(r)

