
    hV                     (   d dl mZmZ d dlZd dlZ	 eZd Z G d de      Z	 e	d d      e	_
         e	dd       e	_         e	dd      e	_         e	dd      e	_         G d	 d
e      Z G d de      Z G d de      Zd Z G d de      Zd Zy#  Y }xY w)    )print_functionunicode_literalsNc                     | dz   dz  rdS dS )N             )vers    O/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/stolen/qrcodegen.pynum_char_count_bitsr      s    'b2'a'    c                       e Zd Zd Zy)Eccc                      || _         || _        y N)ordinal
formatbits)selfifbs      r   __init__zEcc.__init__   s    r   N)__name__
__module____qualname__r   r
   r   r   r   r      s    r   r            c                   2    e Zd Zed        Zd Zed        Zy)	QrSegmentc                 r    t               }| D ]  }|j                  |d        t        t        |       |      S Nr	   )
_BitBufferappend_bitsr    len)databbbs      r   make_segzQrSegment.make_seg-   s7    \ 	!ANN1a 	!TB''r   c                 P    |dk  r
t               || _        t        |      | _        y Nr   )
ValueErrornumcharslistbitdata)r   numchr/   s      r   r   zQrSegment.__init__7   s#    19,G}r   c                     d}| D ]?  }t        |      }|j                  d|z  k\  r y |d|z   t        |j                        z   z  }A |S )Nr   r      )r   r-   r%   r/   )segsr   resultsegccbitss        r   get_total_bitszQrSegment.get_total_bits=   sV     	4C)#.F||V,a&j3s{{#333F		4
 r   N)r   r   r   staticmethodr)   r   r7   r
   r   r   r    r    ,   s-    ( (%  r   r    c                   8   e Zd Zed        Zeej                  dddfd       Zd Zd(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ed        Zed        Zed        Zd Zd Zd ZdZdZdZdZ dZ!dZ"d d  d! d" d# d$ d% d& fZ#y'))QrCodec                 T    t         j                  t        j                  |       g      S r   )r:   encode_segmentsr    r)   )r&   s    r   encode_binaryzQrCode.encode_binaryI   s!    %%y'9'9$'?&@AAr   r   (   c           
      X   t        ||dz         D ];  }t        j                  ||      dz  }t        j	                  | |      }|5||k  s; n sJ t
        j                  t
        j                  t
        j                  fD ]!  }|t        j                  |      dz  k  s |}# t               }	| D ]T  }
|	j                  dd       |	j                  |
j                  t                     |	j                  |
j                         V t        |	      |k(  sJ t        j                  |      dz  }t        |	      |k  sJ |	j                  dt!        d|t        |	      z
               |	j                  dt        |	       dz         t        |	      dz  dk(  sJ t#        j$                  d      D ]$  }t        |	      |k\  r n|	j                  |d       & t'        dgt        |	      dz  z        }t)        |	      D ]  \  }}||dz	  xx   |d|dz  z
  z  z  cc<     t        ||||      S )Nr   r	   r2   r   )   r   r   r   )ranger:   _get_num_data_codewordsr    r7   r   MEDIUMQUARTILEHIGHr#   r$   r-   r   extendr/   r%   min	itertoolscycle	bytearray	enumerate)r3   eclminvermaxvermaskr   datacapacitybitsdatausedbitsneweclr'   r5   padbytedatacodewordsr   bits                  r   r<   zQrCode.encode_segmentsM   s&    !, 	C & > >sC H1 L%44T3?L(|?O/O		 | JJLLHH
 	F
 v==c6JQNN	 \ 	#CNN1a NN3<<)<S)ABIIckk"	# 2w,&&& "99#sCaG2w****
q#a!1CG!;<=
q3r7(Q,'2w{a !|4 	'G2w**NN7A&	' "1#RA"67!" 	:HQ!q&!SQ!a%[%99!	: c3t44r   c                    || _         |dz  dz   | _        || _        t        | j                        D cg c]  }dg| j                  z   c}| _        t        | j                        D cg c]  }dg| j                  z   c}| _        | j                          | j                  t        |            }| j                  |       |dk(  r^d}t        d      D ]N  }| j                  |       | j                  |       | j                         }	|	|k  r|}|	}| j                  |       P d|cxk  rdk  sJ  J || _        | j                  |       | j                  |       y c c}w c c}w )	Nr2   r   Fr?   l        r	   r   r   )r   sizeecclvlrB   modules
unmaskable_draw_function_patterns_add_ecc_and_interleaverK   _draw_codewords_apply_mask_draw_format_bits_get_penalty_scorerP   )
r   r   rY   rU   msk_allcodewords
minpenaltyr   penaltys
             r   r   zQrCode.__init__   sJ    !GbL	5:4995EF$))+F8=dii8HI1E7TYY.I 	$$&44Y}5MN\*"9!J1X $  #&&q)113Z'C!(J  #$ C}1}}}	s#- GIs   E )E%c                 `   | j                   }| j                  }|dz  r|dk(  r|j                  dg|z         dg|z  g|z  |z   dg|z  g|z  z   }|D cg c]  }dg|z  |z   dg|z  z    }}g }|dk(  rqt        dt	        |      d      D ]W  }d}t        t	        ||               D ](  }||   |   rdnd}	|	||dz      |   rdndz  }	|d|	   z  }* |j                  |       Y n5|D ]0  }
d}|
D ]  }|dt        |         dz  z  } |j                  |       2 dj                  |      S c c}w )	Nr   r   Fr    u
    ▄▀█u    █
)rZ   rX   appendrB   r%   intjoin)r   zoompadtabszxrowsyrowvtrzbs               r   renderzQrCode.render   sr   llYY6daiJJw|$w|ns"S(UGbL>C+??:=>Qw}q E7S=0>>191c#h* !s3q6{+ +A VAYAAc!a%jm2A<?*C+ C !  ! /B6#b'?Q..C/C 	! yy% ?s   D+c                 P   t        | j                        D ]4  }| j                  d||dz  dk(         | j                  |d|dz  dk(         6 | j                  dd       | j                  | j                  dz
  d       | j                  d| j                  dz
         | j	                         }t        |      }dd|dz
  f|dz
  dff}t        |      D ]1  }t        |      D ]!  }||f|vs
| j                  ||   ||          # 3 | j                  d       | j                          y )N   r   r   r   r2   )r   r   r   )	rB   rX   _set_function_module_draw_finder_pattern _get_alignment_pattern_positionsr%   _draw_alignment_patternr`   	_draw_ver)r   r   alignpatposnumalignskipsjs         r   r\   zQrCode._draw_function_patterns   s6   tyy! 	8A%%aAEQJ7%%aAEQJ7	8
 	!!!Q'!!$))a-3!!!TYY]3 <<>$1\1

 x 	QA8_ Qq6&00QQPQ	Q 	q!r   c           	      J   | j                   j                  dz  |z  }|}t        d      D ]  }|dz  |dz	  dz  z  } |dz  |z  dz  }|dz	  dk(  sJ t        dd	      D ]  }| j                  d
|t	        ||             ! | j                  d
dt	        |d	             | j                  d
d
t	        |d             | j                  dd
t	        |d
             t        dd      D ]"  }| j                  d|z
  d
t	        ||             $ t        dd
      D ]/  }| j                  | j
                  dz
  |z
  d
t	        ||             1 t        d
d      D ]/  }| j                  d
| j
                  dz
  |z   t	        ||             1 | j                  d
| j
                  d
z
  d       y )Nr   
   r   	   i7  iT     r   rz   r	   r      T)rY   r   rB   r{   _get_bitrX   )r   rP   r&   remrc   bitsr   s          r   r`   zQrCode._draw_format_bits   s   &&!+d2r 	4A!8U 23C	4c!V+rzQ q! 	?A%%aHT1,=>	?!!!Qq(9:!!!Qq(9:!!!Qq(9:q" 	DA%%b1fa$1BC	D q! 	OA%%dii!ma&7HT1<MN	Oq" 	PA%%aR!);XdA=NO	P!!!TYY]D9r   c                 h   | j                   dk  ry | j                   }t        d      D ]  }|dz  |dz	  dz  z  } | j                   dz  |z  }|dz	  dk(  sJ t        d      D ]N  }t        ||      }| j                  dz
  |dz  z   }|dz  }| j	                  |||       | j	                  |||       P y )	Nr      r      i%     r   r   )r   rB   r   rX   r{   )r   r   rc   r   r   rV   ar(   s           r   r   zQrCode._draw_ver   s    88a< xxr 	6A!8f 45C	6B$rzQ r 	1AD!$CR!a%'AaA%%aC0%%aC0	1r   c                 "   t        dd      D ]  }t        dd      D ]o  }||z   ||z   }}d|cxk  r| j                  k  s#n &d|cxk  r| j                  k  s<n ?| j                  ||t        t	        |      t	        |            dv       q  y )N   r   )r   r2   )rB   rX   r{   maxabs)r   rq   rs   dydxxxyys          r   r|   zQrCode._draw_finder_pattern  s    A, 	BBl RRB'dii'a2.A		.A--BCGSW 5V C		r   c                     t        dd      D ]K  }t        dd      D ]:  }| j                  ||z   ||z   t        t        |      t        |            dk7         < M y )Nr   r   )rB   r{   r   r   )r   rq   rs   r   r   s        r   r~   zQrCode._draw_alignment_pattern  s_    A, 	VBBl V))!b&!b&#c"gs2w:OST:TUV	Vr   c                 L    || j                   |   |<   d| j                  |   |<   y )NT)rZ   r[   )r   rq   rs   isdarks       r   r{   zQrCode._set_function_module  s'    #Q $1r   c                 z   | j                   }t        |      t        j                  || j                        k(  sJ t        j
                  | j                  j                     |   }t        j                  | j                  j                     |   }t        j                  |      dz  }|||z  z
  }||z  }g }t        j                  |      }	d}
t        |      D ]e  }||
|
|z   |z
  ||k  rdndz    }|
t        |      z  }
t        j                  ||	      }||k  r|j                  d       |j                  ||z          g |
t        |      k(  sJ t               }t        t        |d               D ]7  }t        |      D ]'  \  }}|||z
  k7  s||k\  s|j                  ||          ) 9 t        |      |k(  sJ |S )Nr	   r   r   )r   r%   r:   rC   rY   _NUM_ERROR_CORRECTION_BLOCKSr   _ECC_CODEWORDS_PER_BLOCK_get_num_raw_data_modules_reed_solomon_compute_divisorrB   _reed_solomon_compute_remainderrj   rK   rL   )r   r&   r   	numblocksblockecclenrawcodewordsnumshortblocksshortblocklenblocksrsdivkr   dateccr4   r   blks                    r   r]   zQrCode._add_ecc_and_interleave!  s   xx4yF::3LLLL 889L9LMcR	66t{{7J7JKCP88=B#lY&>>%2 55kBy! 	%AA%3A<NqTUVC SMA99#uEC>!

1MM#)$	% CI~~ s6!9~& 	*A%f- *C44!~:MMM#a&)*	*
 6{l***r   c           	      $   t        |      t        j                  | j                        dz  k(  sJ d}t	        | j
                  dz
  dd      D ]  }|dk  r|dz  }t	        | j
                        D ]  }t	        d      D ]z  }||z
  }|dz   dz  dk(  }|r| j
                  dz
  |z
  n|}| j                  |   |   r<|t        |      dz  k  sNt        ||dz	     d|dz  z
        | j                  |   |<   |dz  }|   |t        |      dz  k(  sJ y )	Nr	   r   r   r   rz   r   r   r   )	r%   r:   r   r   rB   rX   r[   r   rZ   )	r   r&   r   rightvertr   rq   upwardrs   s	            r   r^   zQrCode._draw_codewordsE  s#   4yF<<TXXF!KKKK499q=!R0 	Ez
dii( q AA$qyAo2F39$))a-$.tA OOA.q1CIM8I-5d16lAQK-PQ*Q		 CIM!!!r   c           	         t         j                  |   }t        | j                        D ]U  }t        | j                        D ];  }| j                  |   |xx    |||      dk(  xr | j
                  |   |    z  cc<   = W y r+   )r:   _MASK_PATTERNSrB   rX   rZ   r[   )r   rP   maskerrs   rq   s        r   r_   zQrCode._apply_maskY  s    ))$/tyy! 	A499% Q"va|q'8 '*1--"	r   c                 l   d}| j                   }| j                  }t        |      D ]  }d}d}t        j                  dgdz  d      }t        |      D ]z  }||   |   |k(  r*|dz  }|dk(  r|t
        j                  z  },|dkD  s2|dz  }8| j                  ||       |s%|| j                  |      t
        j                  z  z  }||   |   }d}| || j                  |||      t
        j                  z  z  } t        |      D ]  }d}d}	t        j                  dgdz  d      }t        |      D ]z  }||   |   |k(  r*|	dz  }	|	dk(  r|t
        j                  z  },|	dkD  s2|dz  }8| j                  |	|       |s%|| j                  |      t
        j                  z  z  }||   |   }d}	| || j                  ||	|      t
        j                  z  z  } t        |dz
        D ]a  }t        |dz
        D ]N  }||   |   ||   |dz      cxk(  r!||dz      |   cxk(  r||dz      |dz      k(  s9n <|t
        j                  z  }P c t        d |D              }
|dz  }t        |
dz  |d	z  z
        |z   dz
  |z  dz
  }d|cxk  rd
k  sJ  J ||t
        j                  z  z  }d|cxk  rdk  sJ  J |S )Nr   Fr   r   r   c              3   6   K   | ]  }|D ]
  }|rd nd   yw)r   r   Nr
   ).0rt   cells      r   	<genexpr>z,QrCode._get_penalty_score.<locals>.<genexpr>  s$     J3cJd$QA%J%Js   r      r   r   i2' )rX   rZ   rB   collectionsdequer:   _PENALTY_N1_finder_penalty_add_history_finder_penalty_count_patterns_PENALTY_N3#_finder_penalty_terminate_and_count_PENALTY_N2sumr   _PENALTY_N4)r   r4   rX   rZ   rs   runcolorrunx
runhistoryrq   runydarktotalr   s                r   ra   zQrCode._get_penalty_scorea  sC   		<< t 	AHD$**A37A6J4[ 1:a=H,AIDqy&"4"44!44T:F# ??
K$001  'qz!}HD  884T$$%F)	4 t 	AHD$**A37A6J4[ 1:a=H,AIDqy&"4"44!44T:F# ??
K$001  'qz!}HD  884T$$%F)	4 tax 	1A4!8_ 1AJqMqz!a%(-q1u~a(- q1u~a!e,-
 f000F1	1 J'JJ $)ebj()E1A5%?!CA{{{{!f((((F%g%%%%% r   c                    | j                   }|dk(  rg S |dz  dz   }|dk(  rdn|dz  |dz  z   dz   |dz  dz
  z  dz  }t        |dz
        D cg c]  }| j                  dz
  ||z  z
   c}dgz   }t        t	        |            S c c}w )Nr   r   r          r2   rz   )r   rB   rX   r.   reversed)r   r   r   stepr   r4   s         r   r}   z'QrCode._get_alignment_pattern_positions  s    xx!8I1HqL r	 'HqL(1,(Q,2BCaG 	 16hl0C
+,TYY]QX%
C HV$%%
s   Bc                     d| z  dz   | z  dz   }| dk\  r#| dz  dz   }|d|z  dz
  |z  dz
  z  }| dk\  r|d	z  }d
|cxk  rdk  sJ  J |S )Nr      @   r   r      r   7   $      is  r
   )r   r4   r   s      r   r   z QrCode._get_num_raw_data_modules  sx    8c>S(2-!8q1HrH}r)X5::Fax"f%%%%%%r   c                     t         j                  |       dz  t         j                  |j                     |    t         j                  |j                     |    z  z
  S r"   )r:   r   r   r   r   )r   rM   s     r   rC   zQrCode._get_num_data_codewords  sV     ,,S1Q6--ckk:3?11#++>sCDD	
r   c                 V   d| cxk  rdk  st        d       t        d      t        dg| dz
  z  dgz         }d}t        |       D ]`  }t        |       D ]:  }t        j	                  ||   |      ||<   |dz   | k  s(||xx   ||dz      z  cc<   < t        j	                  |d      }b |S )Nr      zDegree out of ranger   r   )r,   rK   rB   r:   _reed_solomon_multiply)degreer4   rootrc   r   s        r   r   z$QrCode._reed_solomon_compute_divisor  s    V"s"233 #233 A3&1*-34
 v 	=A6] /"99&)TJq	q56>1IA.I/ 00t<D	= r   c           	          t        dgt        |      z        }| D ][  }||j                  d      z  }|j                  d       t	        |      D ]&  \  }}||xx   t
        j                  ||      z  cc<   ( ] |S r+   )rK   r%   poprj   rL   r:   r   )r&   divisorr4   r(   factorr   coefs          r   r   z&QrCode._reed_solomon_compute_remainder  s    A3W-. 	IA&**Q-'FMM!&w/ I	Dq	V::4HH	I	I r   c                     | dz	  dk7  s|dz	  dk7  rt        d      d}t        t        d            D ]  }|dz  |dz	  dz  z  }|||z	  dz  | z  z  }  |dz	  dk(  sJ |S )Nr	   r   zByte out of ranger   r   i  )r,   r   rB   )rq   rs   zr   s       r   r   zQrCode._reed_solomon_multiply  s    FaKQ!Vq[011%(# 	$AaQ!Vu,-A16Q,!##A	$ Av{{r   c                    |d   }|| j                   dz  k  sJ |dkD  xr. |d   |d   cxk(  xr |d   cxk(  xr |k(  nc xr |d   |dz  k(  }|r|d   |dz  k\  r
|d   |k\  rdnd|r|d   |dz  k\  r|d   |k\  rdz   S dz   S )Nr   r   r   r   r2   r   rz   )rX   )r   r   ncores       r   r   z%QrCode._finder_penalty_count_patterns  s    ]DIIM!!!E 'A*Q-E:a=EAE'1Q& 	 :a=AE1jmq6HAqJqMQU2z!}7IQS 	SPQS 	Sr   c                     |r| j                  ||       d}|| j                  z  }| j                  ||       | j                  |      S r+   )r   rX   r   )r   currentruncolorcurrentrunlengthr   s       r   r   z*QrCode._finder_penalty_terminate_and_count  sO     ,,-=zJ DII%(()9:F22:>>r   c                 T    |d   dk(  r|| j                   z  }|j                  |       y r+   )rX   
appendleft)r   r   r   s      r   r   z"QrCode._finder_penalty_add_history  s.     a=A		)./r   r   r   )))r?   r   r   r   r   r   r   r         r   r   r   r   r      r      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ))r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ))r?      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ))r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )))r?   r   r   r   r   r   r   r   r   r   r2   r2   r2   r2   r2   rz   rz   rz   rz   r   r	   r	   r   r   r   r   r   r   r   r   r   r   r   r      r   r      r   r   r   ))r?   r   r   r   r   r   r2   r2   r2   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r      r   r   r         !   #   %   &   r>   +   -   /   1   ))r?   r   r   r   r   r2   r2   rz   rz   r	   r	   r	   r   r   r   r   r   r   r   r   r   r   r   r      r   "   r   r   r   r>   r   r   0   3   5   8   ;   >   A   D   ))r?   r   r   r   r2   r2   r2   r   rz   r	   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   *   r   r  r  6   9   <   ?   B   F   J   M   Q   c                     | |z   dz  S Nr   r
   rq   rs   s     r   <lambda>zQrCode.<lambda>7      q1uk r   c                     |dz  S r  r
   r  s     r   r  zQrCode.<lambda>8  
    a!e r   c                     | dz  S Nr   r
   r  s     r   r  zQrCode.<lambda>9  r  r   c                     | |z   dz  S r  r
   r  s     r   r  zQrCode.<lambda>:  r  r   c                     | dz  |dz  z   dz  S )Nr   r   r
   r  s     r   r  zQrCode.<lambda>;  s    qAvQ!+ r   c                 $    | |z  dz  | |z  dz  z   S Nr   r   r
   r  s     r   r  zQrCode.<lambda><  s    a!eai!a%!)+ r   c                 *    | |z  dz  | |z  dz  z   dz  S r  r
   r  s     r   r  zQrCode.<lambda>=  s     q1uqy1q519,1 r   c                 *    | |z   dz  | |z  dz  z   dz  S r  r
   r  s     r   r  zQrCode.<lambda>>  s     A{QUQY.!3 r   N)r   r2   )$r   r   r   r8   r=   r   LOWr<   r   rx   r\   r`   r   r|   r~   r{   r]   r^   r_   ra   r}   r   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r:   r:   H   s@   B B  ww15 15t!$F68:21&V
%"H"(Ob&    
 
  ,    
S?0 KKKK!n%d  
"			!	+	+	1	3	Nr   r:   c                       e Zd Zd Zy)r#   c                     |dk  s|z	  dk7  rt        d      | j                  fdt        t        |            D               y )Nr   zValue out of rangec              3   .   K   | ]  }|z	  d z    yw)r   Nr
   )r   r   vals     r   r   z)_BitBuffer.append_bits.<locals>.<genexpr>G  s     AcQh!^As   )r,   rG   r   rB   )r   r&  r   s    ` r   r$   z_BitBuffer.append_bitsC  s;    Esax1}122AhuQx.@AAr   N)r   r   r   r$   r
   r   r   r#   r#   B  s    Br   r#   c                     | |z	  dz  dk7  S )Nr   r   r
   )rq   r   s     r   r   r   J  s    Fa<1r   c                       e Zd Zy)DataTooLongErrorN)r   r   r   r
   r   r   r)  r)  N  s    r   r)  c                 6   g }t        | j                        D ]M  }||z   }t        | j                        D ].  }| j                  |   |   s|j                  d||z   |fz         0 O d}|j	                  | j                  |dz  z   dj                  |            S )NzM%d,%dh1v1h-1zz<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 {0} {0}" stroke="none">
<rect width="100%" height="100%" fill="#F7F7F7"/>
<path d="{1}" fill="#111111"/>
</svg>
r    )rB   rX   rZ   rj   formatrl   )qrborderpartsrs   syrq   ts          r   qr2svgr2  R  s    E277^ BaZrww 	BAzz!}Q-!R0@@A	BB
	A 88BGGfqj(#((5/::r   )
__future__r   r   r   rI   xrangerB   r   objectr   r"  rD   rE   rF   r    r:   r.   r#   r   r,   r)  r2  r
   r   r   <module>r6     s    8  	E
(&  a)AY
1ayq!9 8wV wtB B	z 	;E	s   B B