
    !h                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  SSK	J
r
Jr  \(       a  S SKJr  S S	.SS
 jjrSS jrg)    )annotationsN)GzipFile)BytesIO)TYPE_CHECKING   )_CHUNK_SIZE_DecompressionMaxSizeExceeded)Response)max_sizec                  [        [        U 5      S9n[        5       nSnSnU(       a\   UR                  [        5      nU[        U5      -  nU(       a  XQ:  a  [        SU SU S35      eUR                  U5        U(       a  M\  UR                  S5        UR                  5       $ ! [        [
        [        R                  4 a#    UR                  5       R                  S:  a   Ma  e f = f)zfGunzip the given data and return as much data as possible.

This is resilient to CRC checksum errors.
)fileobj   .r   z)The number of bytes decompressed so far (z" B) exceed the specified maximum (z B).)r   r   read1r   OSErrorEOFErrorstructerror	getbuffernbyteslenr	   writeseekread)datar   foutput_streamchunkdecompressed_sizes         V/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/utils/gz.pygunzipr       s    
 	'AIME
	GGK(E 	SZ')4/%& ':T# 
 	E"# %$ q! 6<<0 	 &&(//!3	s   B% %=C'%C'c                &    U R                   S S S:H  $ )N   s   )body)responses    r   gzip_magic_numberr%   -   s    ==!//    )r   bytesr   intreturnr'   )r$   r
   r)   bool)
__future__r   r   gzipr   ior   typingr   _compressionr   r	   scrapy.httpr
   r    r%    r&   r   <module>r2      s,    "      D$ ,-  >0r&   