
    kfE                     |   d dl Z d dlZ	 d dlmZ n#  d dlmZ Y nxY w	 e n# e$ r eZY nw xY w G d d          Z G d de          Z G d d	e          Z	 G d
 de          Z
 G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d d          Z G d d          Z G d d          Z G d  d!          Zd"  ed#          D             Zd$  ed#          D             Z ed%          D ]
Zd&ez  ee<    ed%d#          D ]4Zeed'z
           eed(z
           z  eed)z
           z  eed%z
           z  ee<   5 ed*          D ]Zeeee         <    G d+ d,          Z G d- d.          Z G d/ d0          ZdS )1    N)zip_longest)izip_longestc                   Z    e Zd ZdZdZdZd Zd Zed             Z	d Z
d Zd Zd	 Zd
 ZdS )QRNr   c                 Z    | j         r|                      |          st          || _        d S N)valid
ValueErrordataselfr   s     d/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/barcode/qrencoder.py__init__zQR.__init__*   s0    : 	djj.. 				    c                 *    t          | j                  S r   lenr   r   s    r   __len__z
QR.__len__/       49~~r   c                     | j         dS t          t          |           t          | j                             \  }}|t          | j                   z  t          | j         d |                   z   S Nr   )bitsdivmodr   sum)r   qrs      r   	bitlengthzQR.bitlength2   sZ    91c$iiTY0013ty>>!C	"1"$6$666r   c                     d|cxk     rdk     rn n| j         d         S |dk     r| j         d         S |dk     r| j         d         S t          d|z             )Nr   
         )      zUnknown version: )
lengthbitsr
   )r   vers     r   getLengthBitszQR.getLengthBits9   sh    s<<<<R<<<<<?1%%2XX?1%%2XX?1%%,s2333r   c                 *    t          | j                  S r   r   r   s    r   	getLengthzQR.getLengthB   r   r   c                 *    t          | j                  S r   )reprr   r   s    r   __repr__zQR.__repr__E   s    DIr   c                     |                     | j        d           |                     |          }|r*|                     t          | j                  |           d S d S )N   putmoder'   r   r   r   bufferversionlenbitss       r   write_headerzQR.write_headerH   s_    

49a   $$W-- 	1JJs49~~w00000	1 	1r   c                    |                      ||           t          t          | j                  g| j        z   D ]}d}d}t          | j                  D ]T}||         J|t          | j                  z  }|| j                            ||                   z  }|| j	        |         z  }U|
                    ||           d S r   )r6   r   iterr   groupranger   charsindexr   r0   )r   r3   r4   gr   nis          r   writezQR.writeN   s    &'***tDI/$*<= 	  	 ADA4:&& ) )Q4#TZ(A))!A$///ADIaL(DJJq$	  	 r   )__name__
__module____qualname__r	   r   r9   r   r   propertyr   r'   r)   r,   r6   r@    r   r   r   r   %   s        EDE  
   7 7 X74 4 4    1 1 1
  
  
  
  
 r   r   c                   L    e Zd Z ej        d          j        ZdZdZdZ	dZ
dZdS )QRNumberz[0-9]*$
0123456789)r.      rI   rI   r"   )r          NrA   rB   rC   recompilematchr	   r;   r   r9   r1   r%   rE   r   r   rG   rG   Z   s;        BJz""(EEDEDJJJr   rG   c                   L    e Zd Z ej        d          j        ZdZdZdZ	dZ
dZdS )
QRAlphaNumz[-0-9A-Z $%*+./:]*$z-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:)      r$   )	         NrL   rE   r   r   rQ   rQ   b   s<        BJ-..4E<EDEDJJJr   rQ   c                   *    e Zd ZdZdZdZdZd Zd ZdS )
QR8bitByte)   r"   r.   )rY      rZ   c                 v    t          |t                    r|                    d          | _        d S || _        d S )Nzutf-8)
isinstanceunicodeencoder   r   s     r   r   zQR8bitByte.__init__p   s6    dG$$ 	G,,DIIIDIIIr   c                     |                      ||           | j        D ]<}t          |t                    rt	          |          }|                    |d           =d S )NrY   )r6   r   r\   strordr0   )r   r3   r4   cs       r   r@   zQR8bitByte.writev   sg    &'*** 	 	A!S!! FFJJq!	 	r   N)	rA   rB   rC   r   r9   r1   r%   r   r@   rE   r   r   rX   rX   j   sF        DEDJ      r   rX   c                   0    e Zd ZdZdZdZdZd Zd Zd Z	dS )	QRKanjirV   r"   rY   rY   r    rJ   c                 v    	 |                      |          | _        d S # t          $ r t          d          w xY w)NzNot valid kanji)unicode_to_qrkanjir   UnicodeEncodeErrorr
   r   s     r   r   zQRKanji.__init__   J    	0//55DIII! 	0 	0 	0.///	0    8c           
      j   g }t          |          D ]\  }}	 |                    d          }	 t          t          |          \  }}n# t          $ r |\  }}Y nw xY wnR# t
          $ r&}t          d|||dz   |j        d                   d }~wt          $ r t          d|||dz   d          w xY w|dz  |z  }d|cxk    rdk    rn n|dz  }|d	z  dz	  d
z  |dz  z   }n=d|cxk    rdk    rn n|dz  }|d	z  dz	  d
z  |dz  z   }nt          d|||dz   d          |                    |           !|S )Nz	shift-jisqrkanjir"   r.   illegal multibyte sequencerY   i@  i           i@  i  i@  		enumerater^   mapra   	TypeErrorri   argsr
   appendr   r   codesr?   rb   des          r   rh   zQRKanji.unicode_to_qrkanji   s   T?? 	 	CAaGHH[))c1++CAaa    CAaaa & M M M(D!QqS!&)LLL G G G(D!QqS)EG G GG Q
A####V#####V6za'4/AH=1&&&&&&&&&V6za'4/AH=(D!QqS)EG G GLLOOOO:   AAAAAAA
B-(!B		$B-c                 r    |                      ||           | j        D ]}|                    |d           d S NrV   r6   r   r0   r   r3   r4   rz   s       r   r@   zQRKanji.write   J    &'*** 	 	AJJq"	 	r   N)
rA   rB   rC   r   r9   r1   r%   r   rh   r@   rE   r   r   rd   rd   }   sU        DEDJ0 0 0  8    r   rd   c                   6    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	S )
QRHanzire   r"   rV   rf   c                 v    	 |                      |          | _        d S # t          $ r t          d          w xY w)NzNot valid hanzi)unicode_to_qrhanzir   ri   r
   r   s     r   r   zQRHanzi.__init__   rj   rk   c           
      j   g }t          |          D ]\  }}	 |                    d          }	 t          t          |          \  }}n# t          $ r |\  }}Y nw xY wnR# t
          $ r&}t          d|||dz   |j        d                   d }~wt          $ r t          d|||dz   d          w xY w|dz  |z  }d|cxk    rdk    rn n|dz  }|d	z  dz	  d
z  |dz  z   }n=d|cxk    rdk    rn n|dz  }|d	z  dz	  d
z  |dz  z   }nt          d|||dz   d          |                    |           !|S )Ngb2312qrhanzir"   r.   rn   rY   i  i  ro   `   rq   i  i  i  rr   rx   s          r   r   zQRHanzi.unicode_to_qrhanzi   s   T?? 	 	CAaGHHX&&c1++CAaa    CAaaa & M M M(D!QqS!&)LLL G G G(D!QqS)EG G GG Q
A####V#####V6za'4/AH=1&&&&&&&&&V6za'4/AH=(D!QqS)EG G GLLOOOOr|   c                     |                     | j        d           |                     dd           |                     |          }|r*|                     t          | j                  |           d S d S )Nr.   r"   r/   r2   s       r   r6   zQRHanzi.write_header   ss    

49a   

1a$$W-- 	1JJs49~~w00000	1 	1r   c                 r    |                      ||           | j        D ]}|                    |d           d S r~   r   r   s       r   r@   zQRHanzi.write   r   r   N)rA   rB   rC   r   r9   r1   r%   r   r   r6   r@   rE   r   r   r   r      sd        DEDJ0 0 0  81 1 1    r   r   c                   "    e Zd ZdZdZd Zd ZdS )QRECI   r   r   r   c                 P    d|cxk     rdk     sn t          d          || _        d S )Nr   i?B zECI out of range)r
   r   r   s     r   r   zQRECI.__init__   s;    4    &    /000			r   c                 .   |                      ||           | j        dk    r|                    | j        d           d S | j        dk    r |                    | j        dz  d           d S | j        dk    r |                    | j        dz  d           d S d S )	N   rY   i?  i   rZ   i i      r   r   r3   r4   s      r   r@   zQRECI.write   s    &'***9JJty!$$$$$Y&  JJty6)2.....Y(""JJty8+R00000 #"r   NrA   rB   rC   r1   r%   r   r@   rE   r   r   r   r      s<        DJ  1 1 1 1 1r   r   c                   "    e Zd ZdZdZd Zd ZdS )QRStructAppendrI   r   c                     d|cxk     rdk    sn t          d          d|cxk     rdk    sn t          d          || _        || _        || _        d S )Nr   rZ   zpart out of range [1,16]ztotal out of range [1,16])r
   parttotalparity)r   r   r   r   s       r   r   zQRStructAppend.__init__   sg    4~~~~2~~~~78885B8999	
r   c                     |                      ||           |                    | j        d           |                    | j        d           |                    | j        d           d S )Nr.   rY   )r6   r0   r   r   r   r   s      r   r@   zQRStructAppend.write   s`    &'***

49a   

4:q!!!

4;"""""r   Nr   rE   r   r   r   r      s<        DJ  # # # # #r   r   c                   "    e Zd ZdZdZd Zd ZdS )QRFNC1FirstrS   r   c                     d S r   rE   r   s    r   r   zQRFNC1First.__init__
  s    r   c                 2    |                      ||           d S r   )r6   r   s      r   r@   zQRFNC1First.write  s    &'*****r   Nr   rE   r   r   r   r     s<        DJ  + + + + +r   r   c                   F    e Zd Z ej        d          j        ZdZdZd Z	dS )QRFNC1Secondz^([A-Za-z]|[0-9][0-9])$rT   r   c                     |                      ||           | j        }t          |          dk    rt          |          dz   }nt	          |          }|                    |d           d S )Nr"   d   rY   )r6   r   r   ra   intr0   r   s       r   r@   zQRFNC1Second.write  sd    &'***Iq66Q;;AAAAA

1ar   N)
rA   rB   rC   rM   rN   rO   r	   r1   r%   r@   rE   r   r   r   r     sB        BJ0117EDJ    r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	g dg d	g d
g d
g d
g d	g dgZ
d Zd Zd Zg dg dg dg dg dgZd Zd Zd Zd ZdZd Zd ZdZd Zd ZdZdZed             Zed             ZdS )QRCodec                 Z    || _         || _        d | _        d| _        d | _        g | _        d S r   )r4   errorCorrectLevelmodulesmoduleCount	dataCachedataList)r   r4   r   s      r   r   zQRCode.__init__   s2    !2r   c                     t          |t                    r|}nAt          t          t          t
          fD ]}	  ||          } n# t          $ r Y w xY wt          | j                            |           d | _	        d S r   )
r\   r   rG   rQ   rd   rX   r
   r   rw   r   )r   r   newDataconvs       r   addDatazQRCode.addData(  s    dB 
	!GG!:w
C ! !"d4jjGE!   D ! W%%%s   A
AAc                 (    | j         |         |         S r   )r   )r   rowcols      r   isDarkzQRCode.isDark8  s    |C %%r   c                     | j         S r   r   r   s    r   getModuleCountzQRCode.getModuleCount;  s    r   c                    t          dd          D ]y}t                              || j                  }t	          d |D                       }d}| j        D ])}|dz  }||                    |          z  }||j        z  }*||dz  k    r nz|S )Nr"   (   c              3   $   K   | ]}|j         V  d S r   )	dataCount).0blocks     r   	<genexpr>z+QRCode.calculate_version.<locals>.<genexpr>B  s$       G GU G G G G G Gr   r   r.   rY   )r:   	QRRSBlockgetRSBlocksr   r   r   r'   r   )r   r4   rsBlockstotalDataCountlengthr   s         r   calculate_versionzQRCode.calculate_version>  s    Q|| 		 		G ,,Wd6LMMH  G Gh G G GGGNF ) )!$,,W555$.(!+++ ,r   c                     | j         |                                 | _         |                     d|                                            d S )NF)r4   r   makeImplgetBestMaskPatternr   s    r   makezQRCode.makeL  sC    <1133DLeT446677777r   c                      j         dz  dz    _         fdt           j                  D              _                             dd                                 j        dz
  d                                d j        dz
                                                                                                      ||            j         dk    r                     |            j	        d k    r0t                               j          j         j                   _	                              j	        |           d S )Nr.      c                 &    g | ]}d gj         z  S )Fr   )r   xr   s     r   
<listcomp>z#QRCode.makeImpl.<locals>.<listcomp>S  s3     < < <  4#33 < < <r   r   r   )r4   r   r:   r   setupPositionProbePatternsetupPositionAdjustPatternsetupTimingPatternsetupTypeInfosetupTypeNumberr   r   
createDatar   r   mapData)r   testmaskPatterns   `  r   r   zQRCode.makeImplQ  sJ   <!+b0< < < <"'(8"9"9< < <&&q!,,,&&t'7!';Q???&&q$*:Q*>???'')))!!!4---LA  &&&Nd""#..t|/3/E/3}> >DN 	T^[11111r   )TTTTTTT)TFFFFFT)TFTTTFTc                    |dk    rPdgdz  | j         |dz            ||dz   <   |dk    rd| j         |dz            |dz   <   n3d| j         |dz            |dz
  <   ndgdz  | j         |dz
           ||dz   <   t          | j                  D ]P\  }}|| j         ||z            ||dz   <   |dk    rd| j         ||z            |dz   <   :d| j         ||z            |dz
  <   Qd S )Nr   Fr   r"   rY   )r   rs   _positionProbePattern)r   r   r   r   r   s        r   r   z QRCode.setupPositionProbePatternm  s   !88.3Wq[DLQCE	*axx-2SU#CE**-2SU#CE** /4Wq[DLQCE	* !;<< 	3 	3GAt-1DLQCE	*axx-2SU#CE**-2SU#CE**	3 	3r   c                     d}d}t          d          D ]B}|                     d|           t                              |           }|dk    s||k    r|}|}C|S )Nr   rY   T)r:   r   QRUtilgetLostPoint)r   minLostPointpatternr?   	lostPoints        r   r   zQRCode.getBestMaskPattern  sk    q 	 	AMM$"""++D11IQ,22(r   c                     t          d| j        dz
            D ]}|dz  dk    | j        |         d<   t          j        t          j        ddg          | j        dz
            | j        d         d| j        dz
  <   d S )NrY   r$   r   rR   TFrZ   )r:   r   r   	itertoolsislicecycle)r   r   s     r   r   zQRCode.setupTimingPattern  s    q$*Q.// 	. 	.A"#a%1*DLOA2;2BOT5M**D,<r,A3C 3CQ$*Q..///r   )TTTTT)TFFFT)TFTFTc                 >   t                               | j                  }| j        dz
  }t	          j        ||          D ]]\  }}|dk    r|dk    s||k    r||k    r|dk    r%t          | j                  D ]#\  }}|| j        ||z   dz
           |dz
  |dz   <   $^d S )NrY   r$   rI   )	r   getPatternPositionr4   r   r   productrs   _positionAdjustPatternr   )r   posmaxposr   r   r   r   s          r   r   z!QRCode.setupPositionAdjustPattern  s    ''55!A%!)#s33 	> 	>HCaxxSAXX3!88$T%@AA > >49=S1Wq[)#a%A+66>	> 	>r   c                 X   t                               | j                  }t          d          D ]5}| o||z	  dz  dk    }|| j        |dz           |dz  | j        z   dz
  dz
  <   6t          d          D ]5}| o||z	  dz  dk    }|| j        |dz  | j        z   dz
  dz
           |dz  <   6d S )N   r"   rI   rY   )r   getBCHTypeNumberr4   r:   r   r   )r   r   r   r?   mods        r   r   zQRCode.setupTypeNumber  s    &&t|44r 	J 	JA87419/a 7CEHDLa Q)9!9A!=!ABBr 	J 	JA87419/a 7CEHDLQ!11A59:16BB	J 	Jr   c                 R   | j         dz  |z  }t                              |          }t          d          D ]]}| o||z	  dz  dk    }|dk     r|| j        |         d<   (|dk     r|| j        |dz            d<   B|| j        | j        dz
  |z            d<   ^t          d          D ]i}| o||z	  dz  dk    }|dk     r|| j        d         | j        |z
  dz
  <   3|dk     r|| j        d         d|z
  dz
  dz   <   S|| j        d         d|z
  dz
  <   j| | j        | j        dz
           d<   d S )NrI      r"   rR   rY   rT   )r   r   getBCHTypeInfor:   r   r   )r   r   r   r   r   r?   r   s          r   r   zQRCode.setupTypeInfo  sp   &!+{:$$T**r 	A 	AA87419/a 7CA%(Q""a%%),QU#A&&=@T-2Q67::r 	2 	2A87419/a 7CA<?Q 01 4q 899a%%25QQ
Q//.1QQ
++59T%)*1---r   c           
   #     K   t          j        t          | j        dz
  dd          t          ddd                    }t	          t          d| j        dz
                      t	          t          j        t          d          t          d| j                                      t	          t          d| j                            f}t          d	 |D                       }t                              | j                  }t          t           j        
                    d
 |D                                 }| j        dz
  }|D ]}||}}|dk    rd}n|| j        dz
  k    rd}nd}||         D ]}t          d          D ]o}	||	z
  }	| j        dk    r*|dk     r|	| j        dz
  k    r'|dk     r|| j        dz
  k    r<||v r)|	|v r%|dk     r|	dk     s|	|k    s|	dk     r|dk     s||k    si|	|fV  pd S )Nr"   rR   rS   r   rT   rY   r   c              3   N   K   | ] }t          t          |                    V  !d S r   )listreversed)r   r   s     r   r   z*QRCode._dataPosIterator.<locals>.<genexpr>  s0      77QtHQKK((777777r   c              3   <   K   | ]}|d z
  |dz
  ||dz   |d z   fV  dS )r$   r"   NrE   )r   ps     r   r   z*QRCode._dataPosIterator.<locals>.<genexpr>  sN       13 13()QqS!A#q!A#qs#13 13 13 13 13 13r   rU   r$   )r   chainr:   r   r   tupler   r   r4   setfrom_iterable)
r   colsrowsrrowspposr   r   rowidxr   rb   s
             r   _dataPosIteratorzQRCode._dataPosIterator  sG     uT%5%91bAA$Q20 0U1d.23344Y_U1XXuQ8H/I/IJJKKU1d.//002 77$77777((669?00 13 13-113 13 13 3 3 4 4!B& 	# 	#C%Daxx!(1,,,qff&F| # #q # #AaA|q((77qD,<r,A'A'A$ 1WW0@20E)E)E$d{{qDyy #ba"ffF

FFbC&LL$c(NNNN##	# 	#r   Nc                 j    | j         s&t          |                                           | _         | j         S r   )_dataPosListr   r  r   s    r   dataPosIteratorzQRCode.dataPosIterator  s2      	> $T%:%:%<%< = =D  r   c              #   F   K   |D ]}dD ]}t          ||z            V  d S )N)   @       rZ   rY   r.   r$   r"   )bool)r   r   bytebits       r   _dataBitIteratorzQRCode._dataBitIterator  sP       	' 	'D0 ' '4#:&&&&&&'	' 	'r   c                     | j         s't          |                     |                    | _         t          | j                   S r   )_dataBitListr   r  r8   r   s     r   dataBitIteratorzQRCode.dataBitIterator  s=      	B $T%:%:4%@%@ A ADD%&&&r   c                     |                      |          }t                              |          }t          |                                 |d          D ]%\  \  }}}| |||          z  | j        |         |<   &d S )NF	fillvalue)r  r   getMaskr   r  r   )r   r   r   r   maskr   r   darks           r   r   zQRCode.mapData  s    ##D))~~k** +D,@,@,B,BD6;!= != != 	; 	;JS#%)DDcNN%:DLc""	; 	;r      r   c                 \   t                               | |          }t                      }|D ]}|                    ||            d}|D ]}||j        z  }|                                |dz  k    r)t          d|                                |dz  fz            |                                dz   |dz  k    r|                    dd           |                                dz  dk    r0|                    d           |                                dz  dk    0	 |                                |dz  k    rn]|                    t          j
        d           |                                |dz  k    rn!|                    t          j        d           yt                              ||          S )Nr   rY   zcode length overflow. (%d > %d)r.   F)r   r   QRBitBufferr@   r   getLengthInBits	Exceptionr0   putBitr   PAD0PAD1createBytes)r4   r   r   r   r3   r   r   r   s           r   r   zQRCode.createData  s   ((2CDD 	( 	(DJJvw'''' 	. 	.Eeo-NN""$$~'999=#3355~7IJK L L L ""$$q(NQ,>>>JJq!%%''!+q00MM%    %%''!+q00	'&&((NQ,>>>JJv{A&&&&&((NQ,>>>JJv{A&&&	' !!&(333r   c                    d}d}d}d}g }g }|D ]}||j         z  }|j        }	|j         |	z
  }
t          ||	          }t          ||
          }|                    | j        |||	z                       ||	z  }t
                              |
          }t          |d         |                                dz
            }|	                    |          |                                dz
  }                                }|                    fdt          ||z
  |          D                        !d t          j        t          | t          |           D             }|S )Nr   r"   c                 J    g | ]}|d k    r                     |          nd  S )r   )get)r   r?   modPolys     r   r   z&QRCode.createBytes.<locals>.<listcomp>5  s?     > > > 01AvvW[[^^^1 > > >r   c                      g | ]}|D ]}||S r   rE   )r   ddrz   s      r   r   z&QRCode.createBytes.<locals>.<listcomp>8  s5     / / /r/ /  -r   )
totalCountr   maxrw   r3   r   getErrorCorrectPolynomialQRPolynomialr)   r   r:   r   r   r   )r3   r   offset
maxDcCount
maxEcCounttotalCodeCountdcdataecdatar   dcCountecCountrsPolyrawPolyrLenmLenr   r#  s                   @r   r  zQRCode.createBytes   s   

 	? 	?Ee..NoG&0GZ11JZ11JMM&-vg~(=>???gF55g>>F"6":v/?/?/A/AA/EFFGkk&))G##%%)D$$&&DMM > > > >#(d#;#;> > > ? ? ? ?/ /Y_V$k6&:< < / / / r   )rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r  r  staticmethodr   r  rE   r   r   r   r     s            & & &       8 8 8
2 2 2& 	988888888888888888888
3 3 3$	 	 	C C C 	+**************
	> 	> 	>J J J; ; ;0# # #B L! ! !
' ' ' L' ' '
; ; ; DD4 4 \48   \  r   r   c                       e Zd ZdZdZdZdZdS )QRErrorCorrectLevelr"   r   rI   r$   N)rA   rB   rC   LMQHrE   r   r   r8  r8  >  s"        	A	A	A	AAAr   r8  c                   .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
QRMaskPatternr   r"   r$   rI   r.   rS   rR   r   N)rA   rB   rC   
PATTERN000
PATTERN001
PATTERN010
PATTERN011
PATTERN100
PATTERN101
PATTERN110
PATTERN111rE   r   r   r>  r>  D  s6        JJJJJJJJJJr   r>  c            	       z   e Zd Zg g ddgddgddgddgddgg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(Zd)Zd*Zd+Zed,             Zed-             Z	ed.             Z
ed/             Zd0 d1 d2 d3 d4 d5 d6 d7 d8Zed9             Zed:             Zed;             Zed<             Zeg d=fd>            Zed?             Zed@             ZdAS )Br   rR   r            "   )rR   rH  &   )rR   r   *   )rR   rI  .   )rR      2   )rR   rJ  6   )rR   r  :   )rR   rK  >   )rR   rI  rN  B   )rR   rI  0   F   )rR   rI  rP  J   )rR   rJ  rQ  N   )rR   rJ  8   R   )rR   rJ  rR  V   )rR   rK  rS  Z   )rR   rO  rP  H   ^   )rR   rI  rP  rW  b   )rR   rJ  rQ  rX  f   )rR   rO  rQ  P   j   )rR   r  rR  T   n   )rR   rJ  rR  r[  r   )rR   rK  rS  r\  v   )rR   rI  rP  rW  r_  z   )rR   rJ  rQ  rX  r`  ~   )rR   rI  4   rX  h      )rR   rJ  rY  rZ  l      )rR   rK  <   r[  p      )rR   rJ  rR  r[  re     )rR   rK  rS  r\  rf     )rR   rJ  rQ  rX  r`  rh     )rR   r   rP  L   r`  r     )rR   rO  rQ  ra  rb        )rR   r  rR  rc  rd        )rR   rI  rQ  rZ  rd  rp     )rR   rJ  rR  r[  re  rq     i7  i%  iT  c                    | dz  }t                               |          t                               t           j                  z
  dk    r|t           j        t                               |          t                               t           j                  z
  z  z  }t                               |          t                               t           j                  z
  dk    | dz  |z  t           j        z  S )Nr    r   )r   getBCHDigitG15G15_MASKr   rz   s     r   r   zQRUtil.getBCHTypeInfo  s    BJ!!!$$v'9'9&*'E'EEJJ&*!3!3A!6!6!'!3!3FJ!?!?"@ B DA !!!$$v'9'9&*'E'EEJJ "*!V_44r   c                    | dz  }t                               |          t                               t           j                  z
  dk    r|t           j        t                               |          t                               t           j                  z
  z  z  }t                               |          t                               t           j                  z
  dk    | dz  |z  S )NrJ   r   )r   r}  G18r  s     r   r   zQRUtil.getBCHTypeNumber  s    BJ!!!$$v'9'9&*'E'EEJJ&*!3!3A!6!6!'!3!3FJ!?!?"@ B DA !!!$$v'9'9&*'E'EEJJ 
ar   c                 6    d}| dk    r|dz  }| dz  } | dk    |S Nr   r"   rE   )r   digits     r   r}  zQRUtil.getBCHDigit  s4    qyyQJEQJD qyy r   c                 ,    t           j        | dz
           S Nr"   )r   PATTERN_POSITION_TABLE)r4   s    r   r   zQRUtil.getPatternPosition  s    ,Wq[99r   c                     | |z   dz  dk    S Nr$   r   rE   r?   js     r   <lambda>zQRUtil.<lambda>      A{a' r   c                     | dz  dk    S r  rE   r  s     r   r  zQRUtil.<lambda>      q1uz r   c                     |dz  dk    S NrI   r   rE   r  s     r   r  zQRUtil.<lambda>  r  r   c                     | |z   dz  dk    S r  rE   r  s     r   r  zQRUtil.<lambda>  r  r   c                 &    | dz  |dz  z   dz  dk    S Nr$   rI   r   rE   r  s     r   r  zQRUtil.<lambda>  s    Qa1,1 r   c                 ,    | |z  dz  | |z  dz  z   dk    S r  rE   r  s     r   r  zQRUtil.<lambda>  s     !Qw!A#q(A- r   c                 2    | |z  dz  | |z  dz  z   dz  dk    S r  rE   r  s     r   r  zQRUtil.<lambda>  %    !a%1A{2a71< r   c                 2    | |z  dz  | |z   dz  z   dz  dk    S )NrI   r$   r   rE   r  s     r   r  zQRUtil.<lambda>  r  r   )r   r"   r$   rI   r.   rS   rR   r   c                     | j         |         S r   )r   )clsr   s     r   r  zQRUtil.getMask  s    {++r   c           	          t          dgd          }t          |           D ]?}|                    t          dt                              |          gd                    }@|S )Nr"   r   )r)  r:   multiplyQRMathgexp)errorCorrectLengthar?   s      r   r(  z QRUtil.getErrorCorrectPolynomial  s^    !a  )** 	B 	BA

<FKKNN(;Q??AAAAr   c                 &   d}dg}d }|D ]j}|rdd t          ||          D             }d t          ||d          D             }|t          |          z  }d t          ||d          D             }|}k|t          d |D                       z  }|S )Nr   c                     g | ]
\  }}||z  S rE   rE   r   r  bs      r   r   z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>  s     >>>SQq1q5>>>r   c                 4    g | ]\  }}|d k    |o|d z
  dz   S r.   rI   rE   r  s      r   r   z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>  s8     % % %CAa!VV -1Q#VVr   r  c                 &    g | ]\  }}|rd n|dz   S )r   r"   rE   r  s      r   r   z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>  s?     B B B!$1 #$.QQQ B B Br   c                 *    g | ]}|d k    |d z
  dz   S r  rE   )r   r  s     r   r   z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>  s%    999!q&&ac!e&&&r   )zipr   r   )r  r   score	lastCountlastRowr   changedscoress           r   maskScoreRule1vertzQRUtil.maskScoreRule1vert  s    C	 	 	C B>>CW,=,=>>>% %%gyAFFF% % % V$B B(3GY>?)A )A )AB B B	 GG99Y999:::r   c                     d}|d         }|dd          D ]Z}|d         |d         }}t          |dd          |dd                    D ]%\  }}||cxk    r|cxk    r|k    rn n|dz  }||}}&|}[|S )Nr   r"   rI   )r  )	r  r   r  r  r   lastCol0lastCol1col0col1s	            r   maskScoreRule2zQRUtil.maskScoreRule2  s    !*122; 	 	C!$QhH!#abb'7122;77 0 0
d4777787777x77777QJE%)4(GGr   )TFTTTFTFFFFc                     t          |          }d}|D ]C}d}t          |          |z
  }||k     r'||||z            |k    r|dz  }||z  }n|dz  }||k     'D|S )Nr   r   r"   )r   )r  r   r   
patternlenr  r   r  maxjs           r   maskScoreRule3horzQRUtil.maskScoreRule3hor  s    
 \\
 	 	CAs88j(Dd((q:~&'11RKEOAAFA d(( r   c                     t          |          dz  }t          d |D                       }dt          d|z  |z  dz
            dz  z  S )Nr$   c              3   4   K   | ]}t          |          V  d S r   )r   )r   r   s     r   r   z(QRUtil.maskScoreRule4.<locals>.<genexpr>  s(      00CHH000000r   r    r   rP  rS   )r   r   abs)r  r   	cellCountcounts       r   maskScoreRule4zQRUtil.maskScoreRule4  sS    LL!O	0000000Su	1B6771<==r   c                    d}||                      |j                  z  }||                      t          |j                   z  }||                     |j                  z  }||                     |j                  z  }||                     t          |j                   z  }||                     |j                  z  }|S r   )r  r   r  r  r  r  )r  qrCoder   s      r   r   zQRUtil.getLostPoint  s    	S++FN;;;	S++C,@AAA	S''777	S**6>:::	S**3+?@@@	S''777	r   N)rA   rB   rC   r  r~  r  r  r6  r   r   r}  r   r   classmethodr  r(  r  r  r  r  r   rE   r   r   r   r   N  s       )
)	
B) 
B) 
B	)
 
B) 
B) 	) 	) 	) 	) 	) 	) 	) 	) 	)  	!)" 	#)$ 	%)& 	')( 	))* 	+), 	-). 	/)0 	1)2 	3)4 	5)6 	7)8 	!  9): 	"!!;)< 	"!!=)> 	"!!?)@ 	"!!A)B 	"!!C)D 	"!!E)F 	'&&G)H 	'&&I)J 	'&&K)L 	'&&M)N 	'&&O)P 	'&&Q)VC*CFH5 5 \5     \    \ : : \: ('!!!!''11--<<<<	
 	
K , , [,   \   [(   [ / / /   [$ > > [>
   [  r   r   c                   :    e Zd Zed             Zed             ZdS )r  c                 R    | dk     rt          d| z   dz             t          |          S )Nr"   zglog())r  	LOG_TABLEr>   s    r   glogzQRMath.glog  s,    EEGaK#-...|r   c                 `    | dk     r| dz  } | dk     | dk    r| dz  } | dk    t           |          S )Nr   rq      )	EXP_TABLEr  s    r   r  zQRMath.gexp  sF    !eeHA !ee3hhHA 3hh|r   N)rA   rB   rC   r6  r  r  rE   r   r   r  r    sH          \
   \  r   r  c                     g | ]}|S rE   rE   r   r   s     r   r   r         ###1Q###r   r  c                     g | ]}|S rE   rE   r  s     r   r   r     r  r   rY   r"   r.   rS   rR   rq   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )r)  c                 &   t          |          dk    r"t          t          |          dz   |z             d}|t          |          k     r0||         dk    r$|dz  }|t          |          k     r||         dk    $||d          dg|z  z   | _        d S )Nr   /r"   )r   r  num)r   r  shiftr*  s       r   r   zQRPolynomial.__init__  s    HHMMCHHsNU2333s3xxCK1$4$4aKF s3xxCK1$4$4vww<1#e)+r   c                     | j         |         S r   )r  )r   r<   s     r   r"  zQRPolynomial.get  s    xr   c                 *    t          | j                  S r   )r   r  r   s    r   r)   zQRPolynomial.getLength"  s    48}}r   c                    dg|                                  |                                 z   dz
  z  }t          |                                            D ]}t          |                                           D ]}|||z   xx         t                              t                              |                     |                    t                              |                    |                    z             z  cc<   t          |d          S r  )r)   r:   r  r  r  r"  r)  )r   r{   r  r?   r  s        r   r  zQRPolynomial.multiply%  s    cT^^%%59:t~~''(( 	C 	CA1;;==)) C CAE


fkk&++dhhqkk*C*C*0++aeeAhh*@*@+A C C C



C C###r   c                    |                                  |                                 k     r| S t                              | j        d                   t                              |j        d                   z
  fdt	          | j        |j                  D             }|| j        |                                 d          z  }t          |d                              |          S )Nr   c                     g | ]=\  }}|t                               t                               |          z             z  >S rE   )r  r  r  )r   nnenratios      r   r   z$QRPolynomial.mod.<locals>.<listcomp>1  sM     2 2 22b FKKB% 7888 2 2 2r   )r)   r  r  r  r  r)  r   )r   r{   r  r  s      @r   r   zQRPolynomial.mod-  s    NNq{{}},,KDHQK))FKKa,B,BB2 2 2 2!%002 2 2tx''C##''***r   N)rA   rB   rC   r   r"  r)   r  r   rE   r   r   r)  r)    s_        , , ,    % % %, , , , ,r   r)  c                   D   e Zd Zg g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dZd Zed             Zed             ZdS )r   )r"   rI     )r"   rI  rZ   )r"   rI  rV   )r"   rI  rT   )r"   ,   rK  )r"   r  rO  )r"   r  rH  )r"   r  rZ   )r"   rV  7   )r"   rV  r  )r$   #   r   )r$   r  rV   )r"   r   ra  )r$   rP  r  )r$   rP  r   )r.      rT   )r"   rm  rl  )r$   C   +   )r$   !   r   r$   rK  rZ   )r$   r  rU   r$   rK  rJ   )r$   r[  D   )r.   r  r!   )r.   r  r  )r.   r  r   )r$   r_  rX  )r.   1      )r$   r  rK   r.   r  r   )r.   '   rV   r"   r   rK   )r$   y   a   )r$   rn  rL  r$   =   r  )r.   r   r   r$   r#   r  )r.   r   rK   r$   r#   r   )r$   rr  t   )rI   rR  $   r$   ;   %   )r.   r  rZ   r.   r  r   )r.   r  rJ   r.   r  rV   )r$   r[  r  r$   W   E   )r.   r  r  r"   rV  r  )rR   r  r  r$   r     )rR   r  r   r$   r  rZ   )r.   e   Q   )r"   ra  rP  r.   r  3   )r.   rP  rH  r.   r     )rI   r  rJ   rY   r  rV   )r$   r  \   r$   u   ]   )rR   rR  r  r$   r  r  )r.   rN  r  rR   /      )r   rM  rK   r.   r  r   )r.      k   )rY   r  r  r"   rn  rL  )rY   r  r  r.   -   r  )rJ   r  rU   r.   rK  rJ   )rI      s   r"   rr  r  )r.   r  r   rS   A   r#   )rU   r  rZ   rS   r  r   )rU   r  rJ   rS   r  rV   )rS   m   r  r"   rd  X   )rS   r  r#   rS   rT  rM  )rS   rQ  r   r   r  r  )rU   r  rJ   )rS   rg  r_  r"   {   c   )r   I   r   rI   rW  rN  )r   r  r  r$   r  r  )rI   r   r   rV   rN  rZ   )r"      r  rS   rx  rl  )r    rW  rN  r"   K   r  )r"   rP  rH  r   r  r  )r$   rM  rK   r   r  r   )rS   rs  x   r"      r  )rT   r  r  r.   rV  r  )r   rP  rH  r"   r  r  )r$   rM  rK   r  r  r   )rI      q   r.   rq  re  )rI   rV  r  rU   G   r   )r   r  r  r.   rU  rH  )rT   r  rV   rZ   r   rK   )rI   r	  r  rS   rx  rl  )rI   r  r#   rV   r  rM  )r   rQ  r   rS   r  r  )r   r  r   r    r  rZ   )r.      r  r.   r  r  )r   r  rM  )r   rP  rH  rR   r  r  )r  rN  rZ   rR   r  r   )r$      o   r      ro  )r   rW  rN  )r   rQ  r   rZ   r  r  )rK  r  rV   )r.   r  r  rS      rg  )r.   r
  r  rK   rt  rU  )rU   rQ  r   rK   r  r  )rZ   r   r   rK   rN  rZ   )rR      r  r.      rf  )rR   r  r   rK   rW  rN  )rU   rQ  r   rZ   r  r  )rJ  rN  rZ   r$   r  r   )rY   rv  rb  r.   r  r  )rY   r
  r  rV   rt  rU  )r   rQ  r   rH  r  r  )rH  r   r   rV   rN  rZ   )r    rq  re  r$      r  )r  rW  rN  r.   r
  r  )rO  rP  rH  rR   r  r  )r  rN  rZ   r.   r  r   )rY   r  rg  r.      r  )rH  r  r   rI   rW  rN  )rY   5   r  rI  rQ  r   )rJ   r   r   rO  rN  rZ   )rI   r  r  r    r  rf  )rI   r  r   r  rW  rN  )r.   rQ  r   r  r  r  )rU   r   r   r  rN  rZ   )r   rr  r  r   r  r  )r  r  r   r   rW  rN  )r"   r  r  r  rQ  r   )r  r   r   rI  rN  rZ   )rS   r  r  r    rr  r  )r  r
  r  r    rt  rU  )r   rQ  r   r  r  r  )r  r   r   r  rN  rZ   )rV   r  r  rI   rr  r  )r$   rW  rN     r
  r  )rM  rQ  r   r"   r  r  )r  r   r   rO  rN  rZ   )r   r  r  )r    rW  rN  r  r
  r  )r    rQ  r   r  r  r  )r  r   r   r  rN  rZ   )r   r  r  r"   rr  r  )rK   rW  rN  r  r
  r  )r  rQ  r   r  r  r  )rU   r   r   rN  rN  rZ   )rV   r  r  rR   rr  r  )rK   rW  rN  r  r
  r  )r  rQ  r   r   r  r  )r  rN  rZ   r"   r  r   )rJ   r  r  r   r  rg  )rJ   r
  r  rI  rt  rU  )r  rQ  r   rK   r  r  )rH  r   r   r#   rN  rZ   )rR   r  r  rK   r  rg  )rR   r
  r  rK  rt  rU  )rN  rQ  r   r    r  r  )r$   r   r   r  rN  rZ   )r   r  rg  r.   r  r  )r  rW  rN  rK   r
  r  )r  rQ  r   r    r  r  )r   r   r   rN  rN  rZ   )r.   r  rg  r   r  r  )rV   rW  rN  r  r
  r  )rU  rQ  r   rK   r  r  )rM  r   r   r  rN  rZ   )r  r  r  r.   r  rf  )r   r
  r  r   rt  rU  )r  rQ  r   rH  r  r  )r    r   r   r  rN  rZ   )r  r  rf  rR      w   )r   r
  r  r  rt  rU  )rK  rQ  r   rK  r  r  )r  r   r   r  rN  rZ   c                 "    || _         || _        d S r   )r&  r   )r   r&  r   s      r   r   zQRRSBlock.__init__0  s    $"r   c                    t                               | |          }|d k    rt          d| z   dz   |z             t          |          dz  }g }t	          |          D ]a}||dz  dz            }||dz  dz            }||dz  dz            }t	          |          D ]%}	|                    t          ||                     &b|S )Nzbad rs block @ version:z/errorCorrectLevel:rI   r   r"   r$   )r   getRsBlockTabler  r   r:   rw   )
r4   r   rsBlockr   r   r?   r  r&  r   r  s
             r   r   zQRRSBlock.getRSBlocks4  s    ++G5FGGd??5?124EF G G GW"v 	> 	>AAEAI&E Q+J Q+I5\\ > >Ij)<<====>r   c                 ^   |t           j        k    rt          j        | dz
  dz  dz            S |t           j        k    rt          j        | dz
  dz  dz            S |t           j        k    rt          j        | dz
  dz  dz            S |t           j        k    rt          j        | dz
  dz  dz            S d S )Nr"   r.   r   r$   rI   )r8  r9  r   RS_BLOCK_TABLEr:  r;  r<  )r4   r   s     r   r  zQRRSBlock.getRsBlockTableD  s     3 555+Wq[A,=,ABB"5"777+Wq[A,=,ABB#6#888+Wq[A,=,ABB#6#888+Wq[A,=,ABB4r   N)rA   rB   rC   r"  r   r6  r   r  rE   r   r   r   r   7  s       v 	v 	v 	v 	

v 	v 	v 	v  	!v& 	'v( 	)v* 	+v, 	-v2 	3v4 	5v6 	7v8 	

9v> 	?v@ 	AvB 	CvD 	EvJ 	KvL 	MvN 	OvP 	QvV 	WvX 	YvZ 	[v\ 	]vb 	cvd 	evf 	gvh 	ivn 	ovp 	qvr 	svt 	uvz 	{v| 	}v~ 	v@ 	AvF 	GvH 	IvJ 	KvL 	MvR 	!  SvT 	UvV 	WvX 	Yv^ 	_v` 	avb 	cvd 	 evj 	#""kvl 	mvn 	 ovp 	 qvv 	!  wvx 	yvz 	{v| 	}vB 	!  CvD 	EvF 	 GvH 	 IvN 	#""OvP 	 QvR 	 SvT 	 UvZ 	#""[v\ 	]v^ 	 _v` 	 avf 	#""gvh 	 ivj 	 kvl 	 mvr 	#""svt 	 uvv 	 wvx 	!  yv~ 	#""v@ 	AvB 	 CvD 	 EvJ 	#""KvL 	MvN 	 OvP 	QvV 	#""WvX 	 YvZ 	!  [v\ 	!  ]vb 	#""cvd 	 evf 	!  gvh 	 ivn 	#""ovp 	 qvr 	 svt 	!  uvz 	$##{v| 	 }v~ 	 v@ 	 AvF 	#""GvH 	 IvJ 	 KvL 	!  MvR 	$##SvT 	 UvV 	 WvX 	!  Yv^ 	#""_v` 	 avb 	 cvd 	!  evj 	$##kvl 	!  mvn 	!  ovp 	!  qvv 	$##wvx 	 yvz 	 {v| 	!  }vB 	CvD 	!  EvF 	!  GvH 	!  IvN 	$##OvP 	!  QvR 	!  SvT 	!  UvZ 	$##[v\ 	!  ]v^ 	 _v` 	 avf 	$##gvh 	!  ivj 	!  kvl 	!  mvr 	$##svt 	 uvv 	!  wvx 	 yv~ 	$##v@ 	!  AvB 	!  CvD 	!  EvJ 	$##KvL 	!  MvN 	!  OvP 	!  QvV 	$##WvX 	 YvZ 	!  [v\ 	!  ]vb 	$##cvd 	!  evf 	!  gvh 	!  ivNp# # #   \ 
 
 \
 
 
r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r  c                 "    g | _         d| _        d S r   )r3   r   r   s    r   r   zQRBitBuffer.__init__R  s    r   c                 J    d                     d | j        D                       S )N.c                 ,    g | ]}t          |          S rE   )r`   )r   r>   s     r   r   z(QRBitBuffer.__repr__.<locals>.<listcomp>W  s    555AQ555r   )joinr3   r   s    r   r,   zQRBitBuffer.__repr__V  s%    xx55555666r   c                 F    |dz  }| j         |         d|dz  z
  z	  dz  dk    S )NrY   r   r"   )r3   )r   r<   bufIndexs      r   r"  zQRBitBuffer.getY  s/    A:+h'A	M:q@QFFr   c                 t    t          |          D ]'}|                     |||z
  dz
  z	  dz  dk               (d S r  )r:   r  )r   r  r   r?   s       r   r0   zQRBitBuffer.put]  sQ    v 	A 	AAKKCFQJN39a?@@@@	A 	Ar   c                     | j         S r   )r   r   s    r   r  zQRBitBuffer.getLengthInBitsa  s
    {r   c                     | j         dz  }t          | j                  |k    r| j                            d           |r | j        |xx         d| j         dz  z	  z  cc<   | xj         dz  c_         d S )NrY   r   r  r"   )r   r   r3   rw   )r   r  r*  s      r   r  zQRBitBuffer.putBitd  s    ;!#t{x''Kq!!! 	BK!!!dt{Q&?A!!!qr   N)	rA   rB   rC   r   r,   r"  r0   r  r  rE   r   r   r  r  Q  st          7 7 7G G GA A A      r   r  )rM   r   r   r   r]   	NameErrorr`   r   rG   rQ   rX   rd   r   r   r   r   r   r   r8  r>  r   r  r:   r  r  r?   r)  r   r  rE   r   r   <module>r/     su  0 
			    6%%%%%%%655555555GG   GGG3  3  3  3  3  3  3  3 j    r                 &+ + + + +b + + +Z2 2 2 2 2b 2 2 2l1 1 1 1 1B 1 1 1&# # # # #R # # #&+ + + + +" + + +    2   \ \ \ \ \ \ \ \~
 
 
 
 
 
 
 
       m m m m m m m m^        $#c

###	##c

###		q  A6IaLL	q# 9 9Aa!e$yQ'77a!e$%'0Q'78IaLL	s ! !A Iil, , , , , , , ,BX X X X X X X Xt         s    " ,,