
    `ic                       U d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ ddlmZmZmZ ddlmZ d d	lZdSdZdSdZdTdZdUdZ G d de          Zi Zded<   dVd"ZdVd#Z G d$ d%e          Z  G d& d'e ej!        (          Z! G d) d*e ej"        (          Z" G d+ d,e ej#        (          Z# G d- d.e ej$        (          Z$ G d/ d0e ej%        (          Z% G d1 d2e ej&        (          Z& G d3 d4e ej'        (          Z' G d5 d6e ej(        (          Z( G d7 d8e ej)        (          Z) G d9 d:e ej*        (          Z* G d; d<e ej+        (          Z+ G d= d>e ej,        (          Z, G d? d@e ej-        (          Z- G dA dBe ej.        (          Z. G dC dDe ej/        (          Z/ G dE dFe ej0        (          Z0 G dG dHe ej1        (          Z1 G dI dJe ej2        (          Z2 G dK dLe ej3        (          Z3 G dM dNe ej4        (          Z4 G dO dPe ej5        (          Z5 G dQ dRe ej6        (          Z6d	S )W    )annotations)ABCabstractmethod)AnyCallableSequence)log2ceil)	DTypeLike   )GGML_QUANT_SIZESGGMLQuantizationTypeQK_K)LazyNumpyTensorNshapeSequence[int]
quant_typer   returntuple[int, ...]c           	         t           |         \  }}| d         |z  dk    r$t          d| d          d|j         d| d          g | d d         | d         |z  |z  R S )Nr   zQuantized tensor row size () is not a multiple of z block size ()r   
ValueErrornamer   r   
block_size	type_sizes       _/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/gguf/quants.pyquant_shape_to_byte_shaper!      s    ,Z8J	Ry:""  EuRy  E  EYcYh  E  E  xB  E  E  E  F  F  	F=U3B3Z=rj09<===    c           	         t           |         \  }}| d         |z  dk    r$t          d| d          d|j         d| d          g | d d         | d         |z  |z  R S )Nr   r   z Quantized tensor bytes per row (r   z type size (r   r   r   s       r    quant_shape_from_byte_shaper$      s    ,Z8J	Ry9!!  HE"I  H  H^h^m  H  H  |E  H  H  H  I  I  	I=U3B3Z=ri/*<===r"   func"Callable[[np.ndarray], np.ndarray]arr
np.ndarrayotyper   oshapec                F    |                     d|j        d         f          }d}|D ]}||z  }t          j        ||          }|j        d         dz  pd}t          j         fdt          j        ||          D             d|           |                     |          S )Nr   r   )r   dtyper      c                J    g | ]} |                                            S  )ravel).0groupr%   s     r    
<listcomp>z,_apply_over_grouped_rows.<locals>.<listcomp>%   s-    TTTEDDKK%%''TTTr"   )axisout)reshaper   npemptyconcatenatearray_split)	r%   r'   r)   r*   rowsosizedimr5   n_groupss	   `        r    _apply_over_grouped_rowsr?      s    ;;CIbM*++DE  
(e
,
,
,C
1#)HNTTTTR^D(5S5STTT[\beffff;;vr"   nc                    t          |           }t          j        |          }|t          j        d||z
  z            z   }t          j        |           |z  S )N   )absr7   floorsign)r@   aflooredbs       r    	np_roundfrI   +   sI    AAhqkkG"(1G,---A71::>r"   c                      e Zd ZdS )
QuantErrorN)__name__
__module____qualname__r/   r"   r    rK   rK   2   s          r"   rK   z)dict[GGMLQuantizationType, type[__Quant]]_type_traitsdataqtypec                X   |t           j        k    r!|                     t          j        d          S |t           j        k    r!|                     t          j        d          S t                              |          x}|	                    |           S t          d|j         d          )NFcopyzQuantization for  is not yet implemented)r   F32astyper7   float32F16float16rO   getquantizeNotImplementedErrorr   rP   rQ   qs      r    r\   r\   8   s    $((({{2:E{222	&*	*	*{{2:E{222&&
&!	3zz$!"Yej"Y"Y"YZZZr"   c                   |t           j        k    r|                     t          j                  S |t           j        k    r<|                     t          j                                      t          j                  S t          	                    |          x}|
                    |           S t          d|j         d          )NzDequantization for rU   )r   rV   viewr7   rX   rY   rZ   rW   rO   r[   
dequantizer]   r   r^   s      r    rb   rb   C   s    $(((yy$$$	&*	*	*yy$$++BJ777&&
&!	3||D!!!!"[
"["["[\\\r"   c                     e Zd ZU ded<   ded<   ded<   dZded<   d	Zd
ed<   dZded<   dZded<   d Zd/dZ	e
d             Ze
ed0d                        Ze
ed0d                        Ze
d1d            Ze
d1d            Ze
d2d            Ze
d2d             Ze
d3d"            Ze
d3d#            Ze
d4d'            Ze
d4d(            Ze
d5d,            Ze
d6d-            Ze
d6d.            ZdS )7__Quantr   rQ   intr   r   Nz,np.ndarray[Any, np.dtype[np.float32]] | Nonegrid)r   r   ztuple[int, int]
grid_shaper/   ztuple[int | float, ...]grid_mapzbytes | Nonegrid_hexc                     t          d          S )Nz-Quant conversion classes can't have instances)	TypeError)selfs    r    __init__z__Quant.__init__X   s    HIIIr"   r   Nonec                6   || _         t          |         \  | _        | _        t	          j        | j        t          j        | j	        f          | _
        t	          j        | j        t          j        | j        f          | _        |t          vsJ | t          |<   d S )N)	meta_noop)rQ   r   r   r   r   _wrap_fn_Quant__quantize_arrayr7   uint8_Quant__shape_to_bytes_Quant__quantize_lazy_Quant__dequantize_arrayrX   _Quant__shape_from_bytes_Quant__dequantize_lazyrO   )clsrQ   s     r    __init_subclass__z__Quant.__init_subclass__[   s    	(8(?%-6 x!56
 
 
 !0 8"z3#9:!
 !
 !
 L((((!Ur"   c           
        | j         | j        d S t          t          t	          | j                                      }|dk    sJ | j        j                    d|z  }t          j	        | j        t          j
                  }|                    d          }t          j        |dk    |dz   |          dz  t          j        ddgt          j
                                      d	          z  }|d
         |d         z  }|                    d          t          j        d t          ddd|z            D             t          j
                                      d|f          z	  }|d|z  dz
  z                      d          }t          j        | j        t          j                                      d          }t          j        ||d          }|                    ddg| j        R           | _         d S )Nr      r,   )r   rB   @   	         )r   rB   .r   .r   )r   r   c                    g | ]}|S r/   r/   r1   is     r    r3   z%__Quant.init_grid.<locals>.<listcomp>x   s    1^1^1^!1^1^1^r"   r   )r   r   r   r4   )rf   ri   r
   r	   lenrh   rQ   r   r7   
frombufferrs   r6   wherearrayrangerX   take_along_axisrg   )ry   bits_per_elemelems_per_byterf   rh   s        r    	init_gridz__Quant.init_gridi   s   83<#7FT#cl"3"34455!!!39>!!!m+}S\:::||G$$dQh55<1a&XZX`AaAaAaAiAijpAqAqqF|d6l*||G$$1^1^U1anI\=]=]1^1^1^fhfn(o(o(o(w(wyz  }K  yL  )M  )M  Mm+q01::7CC8CL
;;;CCGLL!(Dr:::<<A 7 7 788r"   blocksr(   c                    t           Nr]   ry   r   s     r    quantize_blocksz__Quant.quantize_blocks~   
     "!r"   c                    t           r   r   r   s     r    dequantize_blocksz__Quant.dequantize_blocks   r   r"   r;   c                   |                     t          j        d          }|j        }|j        | j        z  }|                    || j        f          }|                     |          }|j        t          j	        k    sJ |j        d         | j
        k    sJ |                    |                     |                    S )NFrS   r   )rW   r7   rX   r   sizer   r6   r   r,   rs   r   rt   ry   r;   r   n_blocksr   s        r    quantize_rowsz__Quant.quantize_rows   s    {{2:E{22
9.x899$$V,,|rx''''|B3=0000~~c22599:::r"   c                |   |                     t          j                  }|j        }|j        | j        z  }|                    || j        f          }|                     |          }|j        t          j	        k    sJ |j        d         | j
        k    sJ |                    |                     |                    S )Nr   )ra   r7   rs   r   r   r   r6   r   r,   rX   r   rw   r   s        r    dequantize_rowsz__Quant.dequantize_rows   s    yy""
9-x788&&v..|rz))))|B3>1111~~c44U;;<<<r"   r   r   c                ,    t          || j                  S r   )r!   rQ   ry   r   s     r    __shape_to_bytesz__Quant.__shape_to_bytes   s    (	:::r"   c                ,    t          || j                  S r   )r$   rQ   r   s     r    __shape_from_bytesz__Quant.__shape_from_bytes   s    *5#)<<<r"   r   c                v    t          | j        |t          j        |                     |j                            S N)r'   r)   r*   )r?   r   r7   rs   rt   r   ry   r   s     r    __quantize_arrayz__Quant.__quantize_array   s1    '(9uBH]`]q]qrwr}]~]~r"   c                    |                                   t          | j        |t          j        |                     |j                            S r   )r   r?   r   r7   rX   rw   r   r   s     r    __dequantize_arrayz__Quant.__dequantize_array   sV    '(;bjadawawx}  yD  bE  bE  F  F  F  	Fr"   lazy_tensorr   r   c                   d S r   r/   ry   r   s     r    __quantize_lazyz__Quant.__quantize_lazy       r"   c                   d S r   r/   r   s     r    __dequantize_lazyz__Quant.__dequantize_lazy   r   r"   tensornp.ndarray | LazyNumpyTensorboolc                4    |j         d         | j        z  dk    S )Nr   r   )r   r   ry   r   s     r    can_quantizez__Quant.can_quantize   s    |B#.0A55r"   c                    |                      |          s$t          d|j         d| j        j                   t          |t                    r|                     |          S |                     |          S )Nz!Can't quantize tensor with shape z to )	r   rK   r   rQ   r   
isinstancer   ru   rr   r   s     r    r\   z__Quant.quantize   s{    '' 	ecccSVS\Saccdddfo.. 	0&&v...''///r"   c                    t          |t                    r|                     |          S |                     |          S r   )r   r   rx   rv   r   s     r    rb   z__Quant.dequantize   s<    fo.. 	2((000))&111r"   )rQ   r   r   rn   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(   )rL   rM   rN   __annotations__rf   rg   rh   ri   rm   rz   classmethodr   r   r   r   r   r   rt   rw   rr   rv   ru   rx   r   r\   rb   r/   r"   r    rd   rd   N   su        OOONNN9=D===="(J(((((*H****!H!!!!J J J" " " " 9 9 [9( " " " ^ [" " " " ^ [" ; ; ; [; = = = [= ; ; ; [; = = = [= @ @ @ [@ F F F [F    [    [ 6 6 6 [6 0 0 0 [0 2 2 2 [2 2 2r"   rd   c                  >    e Zd Zedd            Zedd            ZdS )BF16r   r(   r   c                   |                     t          j                  }t          j        |dz  dk    |t          j        d          z  t          j        d          z  |          }t          j        |          d|dz	  dz  z   z   dz	  }|                    t          j                                       t          j                  S )Nii  l      i  @ i  r-   r   )ra   r7   uint32r   uint64rW   uint16rs   )ry   r   r@   s      r    r   zBF16.quantize_blocks   s     KK	""Ha*n
2Q:9N9N5NRTR[\dReRe4eghiiYq\\VR1}562=xx	""''111r"   c                    |                     t          j                                      t          j                  dz                       t          j                  S )Nr-   )ra   r7   int16rW   int32rX   r   s     r    r   zBF16.dequantize_blocks   s;    BH%%,,RX66"<BB2:NNNr"   Nr   rL   rM   rN   r   r   r   r/   r"   r    r   r      sX        2 2 2 [2 O O O [O O Or"   r   )rQ   c                  >    e Zd Zedd            Zedd            ZdS )Q4_0r   r(   r   c                   |j         d         }t          |                              dd          }t          j        ||d          }|dz  }t          j        d          5  t          j        |dk    dd	|z            }d d d            n# 1 swxY w Y   t          j        t          j        |          t          j        |          z  t          j        d
          z   t          j	                  
                    t          j                                      dd          }|                    |d| j        dz  f          }|ddd d f         |dd	d d f         t          j        d          z  z  }|
                    t          j                                      t          j                  }t          j        ||gd          S )Nr   r   Tr4   keepdimsr   iignoredivider   g      !@r}   r   rB   .r   )r   rC   argmaxr7   r   errstater   truncfloat64rX   rW   rs   clipr6   r   rZ   ra   r9   )ry   r   r   imaxmaxdidqss           r    r   zQ4_0.quantize_blocks   s   <?6{{!!rD!99 B777"H[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, Xrz&))BJrNN:bjooMUWU_```gghjhpqqvvwxz|}}ZZ1cn&9:;;Q	]bamrx{{:;HHRZ  %%bh//~q"gB////   #BBBc                t   |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |df                              t          j                  t          j        d	          z
  }||                    t          j                  z  S )
Nr   rB   r   r   r   r}   r   r   rB   r   r   r|   )r   r7   hsplitra   rZ   rW   rX   r6   r   r   rs   int8)ry   r   r   r   r   s        r    r   zQ4_0.dequantize_blocks   s    <?	&1#&&2FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb>::AA"'JJRWUVZZWBIIbj)))*r"   Nr   r   r/   r"   r    r   r      sR        0 0 0 [0& 
+ 
+ 
+ [
+ 
+ 
+r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q4_1r   r(   r   c                   |j         d         }|                    dd          }|                    dd          }||z
  dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          j        ||z
  |z  t          j        d	          z   t          j        
                              t          j	                  
                    dd          }|                    |d| j        dz  f          }|ddd d f         |ddd d f         t          j	        d          z  z  }|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }t          j        |||gd          S )Nr   r   Tr   r   r   r   r         ?r}   rB   .r   r   )r   r   minr7   r   r   r   rX   rW   rs   r   r6   r   rZ   ra   r9   )	ry   r   r   r   r   r   r   r   ms	            r    r   zQ4_1.quantize_blocks   s   <?jjb4j00jjb4j003Y"[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,Xv|r)BJsOO;2:NNNUUVXV^__ddefhjkkZZ1cn&9:;;Q	]bamrx{{:;HHRZ  %%bh//JJrz""''11~q!Rjr2222   BB
Bc                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |df                              t          j                  }||z  |z   S )	Nr   rB   r   r   r   r}   r   r   )r   r7   r   ra   rZ   rW   rX   r6   r   r   rs   )ry   r   r   r   restr   r   s          r    r   zQ4_1.dequantize_blocks  s   <?)FQC((4	$$$2FF2:%%bj11FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb>::AA"*MMB!|r"   Nr   r   r/   r"   r    r   r      sR        3 3 3 [3&    [  r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q5_0r   r(   r   c                j   |j         d         }t          |                              dd          }t          j        ||d          }|dz  }t          j        d          5  t          j        |dk    dd	|z            }d d d            n# 1 swxY w Y   t          j        t          j        |          t          j        |          z  t          j        d
          z   t          j	                  
                    t          j                                      dd          }|                    |d| j        dz  f          }|ddd d f         t          j        d          z  |dd	d d f         t          j        d          z  z  }t          j        |                    |d	df          t          j        d          z	  dd                              |d          }	|
                    t          j                                      t          j                  }t          j        ||	|gd          S )Nr   r   Tr   r   ir   r   r   g     0@r}      rB   .r   r       littler4   bitorder)r   rC   r   r7   r   r   r   r   r   rX   rW   rs   r   r6   r   packbitsrZ   ra   r9   )
ry   r   r   r   r   r   r   r_   r   qhs
             r    r   zQ5_0.quantize_blocks%  s   <?6{{!!rD!99 B777#I[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, Hbj((2:b>>9RZ=M=MMUWU_```gghjhpqqvvwxz|}}YY!S^q%89::ambhtnn,CAAAI"(1++1MN[Ha#455!D2X`aaaiijrtuvvHHRZ  %%bh//~q"bk3333r   c                D   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|                    |df          t          j	        d t          d          D             t          j                                      d          z	  }|                    |d	d| j        dz  f          t          j	        ddgt          j                                      d
          z	  }|t          j        d          z                      t          j                  }|t          j        d          z                      |d	f          }||t          j        d          z  z                      t          j                  t          j        d          z
  }||                    t          j                  z  S )Nr   rB   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_0.dequantize_blocks.<locals>.<listcomp>E      3I3I3I!A3I3I3Ir"   r   r}   r   r   r   r   r   r-   )r   r7   r   ra   rZ   rW   rX   r   r6   r   r   r   rs   r   )ry   r   r   r   r   r   r   qls           r    r   zQ5_0.dequantize_blocks;  s   <?)FQC((44!%%BFF2:%%bj11WWRYZZ1&&"(3I3IuRyy3I3I3IQSQZ*[*[*[*c*cdk*l*llZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy29T??"**284428D>>!**Hb>::B"(1++%&..rw77"'"++EBIIbj)))*r"   Nr   r   r/   r"   r    r   r   $  sR        4 4 4 [4* + + + [+ + +r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q5_1r   r(   r   c                   |j         d         }|                    dd          }|                    dd          }||z
  dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          j        ||z
  |z  t          j        d	          z   t          j        
                              t          j	                  
                    dd          }|                    |d| j        dz  f          }|ddd d f         t          j	        d          z  |ddd d f         t          j	        d          z  z  }t          j        |                    |ddf          t          j	        d          z	  dd                              |d          }	|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }
t          j        ||
|	|gd          S )Nr   r   Tr   r   r   r   r   r   r}   rB   .r   r   r   r   r   r   )r   r   r   r7   r   r   r   rX   rW   rs   r   r6   r   r   rZ   ra   r9   )ry   r   r   r   r   r   r   r_   r   r   r   s              r    r   zQ5_1.quantize_blocksP  s#   <?jjb4j00jjb4j003Y"[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,Hfslb(2:c??:"*MMMTTUWU]^^ccdegijjYY!S^q%89::ambhtnn,CAAAI"(1++1MN[Ha#455!D2X`aaaiijrtuvvHHRZ  %%bh//JJrz""''11~q!Rn26666r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }|                    t          j                  }|                    |df          t          j	        d t          d          D             t          j                                      d          z	  }|                    |d	d| j        dz  f          t          j	        ddgt          j                                      d
          z	  }|t          j        d          z                      t          j                  }|t          j        d          z                      |d	f          }||t          j        d          z  z                      t          j                  }||z  |z   S )Nr   rB   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_1.dequantize_blocks.<locals>.<listcomp>r  r   r"   r   r}   r   r   r   r   )r   r7   r   ra   rZ   rW   rX   r   r6   r   r   r   rs   )	ry   r   r   r   r   r   r   r   r   s	            r    r   zQ5_1.dequantize_blocksf  s   <?)FQC((4)D1#&&44!%%BFF2:%%bj11FF2:%%bj11WWRYZZ1&&"(3I3IuRyy3I3I3IQSQZ*[*[*[*c*cdk*l*llZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy29T??"**284428D>>!**Hb>::B"(1++%&..rz::B!|r"   Nr   r   r/   r"   r    r   r   O  sR        7 7 7 [7*    [  r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q8_0r   r(   r   c                (   t          |                              dd          dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                                      t          j	                  }|                    t          j
                                      t          j	                  }t          j        ||gd          S )	Nr   Tr      r   r   r   r   )rC   r   r7   r   r   rI   rW   rZ   ra   rs   r   r9   )ry   r   r   r   r   s        r    r   zQ8_0.quantize_blocks}  s    KKOOTO22S8[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{## HHRZ  %%bh//YYrw$$RX..~q"gA....s   A''A+.A+c                2   t          j        |dgd          \  }}|                    t           j                                      t           j                  }|                    t           j                                      t           j                  }||z  S )NrB   r   r   )r7   splitra   rZ   rW   rX   r   )ry   r   r   xs       r    r   zQ8_0.dequantize_blocks  sk    x!,,,1FF2:%%bj11FF27OO""2:..Ar"   Nr   r   r/   r"   r    r   r   |  sR        / / / [/    [  r"   r   c                  &    e Zd Zedd            ZdS )Q2_Kr   r(   r   c                R   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }||dz                      t          j                  z                      |t          dz  df          }||dz	                      t          j                  z                      |t          dz  df          }	t          j	        g dt          j
                                      d	          }
|                    |d
ddf          |
z	  t          j
        d          z  }|                    |t          dz  df                              t          j                  }||z  |	z
  }|                    |d
f          S )Nr   r-   r   rB   r   r   r   rB   r      r}   r   r   r   r   r   r      )r   r7   r   r   ra   rZ   rW   rX   r6   r   rs   )ry   r   r   scalesr   r   r   dmindlmlshifts              r    r   zQ2_K.dequantize_blocks  s   <?y$"*669TDAI;//D)D1#&&4FF2:%%bj11yy$$++BJ77 6C<''
333<<hPR
TU=VWWfk))"*555>>$RT*VW?XYYRX666>>|LLjj(B2.//58BHQKKGZZ42:r233::2:FF"Wr\zz8R.)))r"   Nr   rL   rM   rN   r   r   r/   r"   r    r  r    s2        * * * [* * *r"   r  c                  &    e Zd Zedd            ZdS )Q3_Kr   r(   r   c                   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }t          j        |dg          \  }}	|                    |ddf          t          j	        ddgt          j
                                      d          z	  }|                    |df          }|	                    |ddf          t          j	        g d	t          j
                                      d
          z	  }	|	                    |df          }	|t          j
        d          z  |	t          j
        d          z  t          j
        d          z  z  }|                    t          j                  t          j        d          z
                      t          j                  }||z                      |ddf          }
|                    |dddf          t          j	        g d	t          j
                                      d          z	  }|                    |ddd          t          j	        d t          d          D             t          j
                                      d          z	  }|                    |dt          dz  f          t          j
        d          z  }|                    |dt          dz  f          t          j
        d          z  }|t          j
        d          z  }|                    t          j                  |t          j
        d          z                      t          j                  z
                      t          j                  }|
|z                      |t          f          S )Nr   r|   r      r   r}   )r   rB   r   r-   r  )r   r   r   r   r
  r   r   r	  c                    g | ]}|S r/   r/   r   s     r    r3   z*Q3_K.dequantize_blocks.<locals>.<listcomp>  s    <Q<Q<Q1Q<Q<Q<Qr"   r   r   r|   r   rB   )r   r7   r   r   ra   rZ   rW   rX   r6   r   rs   r   r   )ry   r   r   hmaskr   r   r  r   lscaleshscalesr  r   r   r_   s                 r    r   zQ3_K.dequantize_blocks  s!   <?i44t9TDAI;//DIdRD))	FF2:%%bj11 9VaS11//8Q"233rxAbh7W7W7W7_7_`i7j7jj//8R.11//8Q"233rxTVT\7]7]7]7e7efo7p7pp//8R.11BHTNN*"(4..0HRXVW[[/XY--((272;;6>>rzJJ&j!!8R"344ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn]]8RB//28<Q<Qa<Q<Q<QY[Ya3b3b3b3j3jkw3x3xxZZ2trz233bhqkkAjj(B
344rx{{B"(1++YYrw2!#4"<"<RW"E"EEMMbjYYQ4 0111r"   Nr   r  r/   r"   r    r  r    s2        '2 '2 '2 ['2 '2 '2r"   r  c                  B    e Zd ZdZed
d            Zedd            Zd	S )Q4_Kr  r  r(   r   tuple[np.ndarray, np.ndarray]c                   | j         d         }|                     t          j                  } |                     |ddf          } t          j        | dd          \  }}}t          j        |dz  |dz  |dz	  d	z  z  gd
          }t          j        |dz  |dz	  |dz	  d	z  z  gd
          }|                    |df          |                    |df          fS )Nr   r
  r   r   ?   r   rB   0   r   r|   )r   ra   r7   rs   r6   r  r9   )r  r   r   r   m_dscr   s          r    get_scale_minzQ4_K.get_scale_min  s    <?RX&& 1a 011HVQR000	1c^QXd
Q$'GHrRRRna$hqAvo(FGbQQQ

Ha=))3;;!}+E+EFFr"   r   c                <   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        || j        g          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }t          	                    |          \  }}	||                    t          j                  z  
                    |ddf          }||	                    t          j                  z  
                    |ddf          }
|
                    |dddf          t          j        ddgt          j                  
                    d          z	  }|t          j        d	          z  
                    |ddf                              t          j                  }||z  |
z
  
                    |t          f          S )
Nr   rB   r   r   r   r   r}   r   r   )r   r7   r   K_SCALE_SIZEra   rZ   rW   rX   r  r#  r6   r   rs   r   )ry   r   r   r   r   r  r  r   r"  r   dms              r    r   zQ4_K.dequantize_blocks  s   <?)FQC((4YtaS))
dYtc&6%788
FF2:%%bj11yy$$++BJ77""6**A2:&&&//2q0ABBQXXbj)))22Hb!3DEEZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hh28D>>!**Hb"+=>>EEbjQQB$$h%5666r"   N)r  r(   r   r  r   )rL   rM   rN   r%  staticmethodr#  r   r   r/   r"   r    r  r    s[        LG G G \G0 7 7 7 [7 7 7r"   r  c                  &    e Zd Zedd            ZdS )Q5_Kr   r(   r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |t          j        g          \  }}t          j        |t
          dz  g          \  }}|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }t          
                    |          \  }	}
||	                    t          j	                  z                      |ddf          }||
                    t          j	                  z                      |ddf          }|                    |dddf          t          j        ddgt          j                                      d	          z	  }|                    |dddf          t          j        d
 t          d          D             t          j                                      d          z	  }|t          j        d          z                      |ddf          }|t          j        d          z                      |ddf          }||t          j        d          z  z                      t          j	                  }||z  |z
                      |t
          f          S )Nr   rB   r|   r   r   r   r   r}   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_K.dequantize_blocks.<locals>.<listcomp>"  s    ;P;P;P!A;P;P;Pr"   r  r   )r   r7   r   r  r%  r   ra   rZ   rW   rX   r#  r6   r   rs   r   )ry   r   r   r   r   r  r  r   r   r"  r   r&  r   r_   s                 r    r   zQ5_K.dequantize_blocks  sW   <?)FQC((4YtaS))
dy(9':;;4$!)--BFF2:%%bj11yy$$++BJ77""6**A2:&&&//2q0ABBQXXbj)))22Hb!3DEEZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hhZZ2q"-.."(;P;PuQxx;P;P;PXZX`2a2a2a2i2ijv2w2ww28D>>!**Hb"+=>>28D>>!**Hb"+=>>2!$%--bj99A
##Xt$4555r"   Nr   r  r/   r"   r    r)  r)    s2        6 6 6 [6 6 6r"   r)  c                  &    e Zd Zedd            ZdS )Q6_Kr   r(   r   c                X   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }||z  	                    |t          dz  df          }|	                    |dddf          t          j
        ddgt          j                  	                    d	          z	  }|t          j        d
          z  	                    |ddf          }|	                    |dddf          t          j
        g dt          j                  	                    d          z	  }|t          j        d          z  	                    |ddf          }||t          j        d          z  z                      t          j                  t          j        d          z
  }|	                    |t          dz  df                              t          j                  }||z  	                    |t          f          S )Nr   rB   r   r-   r   r   r~   r}   r   r   r   r  r	  r
  )r   r7   r   r   ra   r   rW   rX   rZ   r6   r   rs   )	ry   r   r   r   r   r   r  r   r_   s	            r    r   zQ6_K.dequantize_blocks+  s   <?9Vdai[11D9TDAI;//DIdTRZL11	RW%%,,RZ88FF2:%%bj11Z  (DBJ!:;;ZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hh28D>>!**Hb"+=>>ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn28D>>!**Hb"+=>>2!$%--bg66DIIxR01188DDA$/000r"   Nr   r  r/   r"   r    r-  r-  *  s2        1 1 1 [1 1 1r"   r-  c                  >    e Zd Zedd            Zedd            ZdS )TQ1_0r   r(   r   c                J   |j         d         }t          |                              dd          }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                  t          j        d          z                       t          j	                  }|dd d	f         |dd	d
f         |dd
d f         }}}|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }t          j        |||gd          }|                    t          j                  dz  dz   dz  }|                    t          j	                  }|                    t          j                                      t          j	                  }t          j        ||gd          S )Nr   r   Tr   r   r   r   .         r   )Q      r   r
  r   r}   r   r   r4  r   r  r   r-   r   )r5  r6  r   r
  r	           )r   rC   r   r7   r   r   rI   rW   r   rs   r6   r   sumr9   r   rZ   ra   )	ry   r   r   r   r   r   qs0qs1r   s	            r    r   zTQ1_0.quantize_blocksB  s   <?KKOOdO33[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{##ii  271::-55bh??#yy.)2cFV3D.D+Er#PVyy.GY"Skk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttfSr"""**Hb>::kk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttfSr"""**Hb>::ZZ2q!,--rx0X0X0X0`0`am0n0nnVBR   (((B88^S#rN444ii	""S(G4<YYrx  HHRZ  %%bh//~r1gB////   A11A58A5c                   |j         d         }t          j        |t          dt          z  dz  z
  dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|dd df         |ddd f         }}|                    |dddf          t          j	        g d	t          j
        
                              d          z  }|                    |df          }|                    |dddf          t          j	        g d	t          j
        
                              d          z  }|                    |df          }|                    |dddf          t          j	        g dt          j
        
                              d          z  }|                    |df          }t          j        |||gd          }|                    t          j                  dz  dz	                      t          j                  t          j        d          z
  }||                    t          j                  z  S )Nr   r   r~   r4  .r   r   r   )r   r
  r   r6  r5  r}   r7  r-   )r   r
  r   r6  r	  r   r
  r|   )r   r7   r   r   ra   rZ   rW   rX   r6   r   rs   r9   r   r   )	ry   r   r   r   r   r   r   r<  r=  s	            r    r   zTQ1_0.dequantize_blocks[  s   <?9Vta$h"n'<&B%CDDD	$--AFF2:%%bj11c3B3h<CHSkk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttkk8R.))kk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttkk8R.))ZZ2q!,--bh0W0W0W0_0_`l0m0mmZZ2''^S#rN444yy##a'A-55bg>>KBIIbj)))*r"   Nr   r   r/   r"   r    r0  r0  A  sR        0 0 0 [00 + + + [+ + +r"   r0  c                  >    e Zd Zedd            Zedd            ZdS )TQ2_0r   r(   r   c                   |j         d         }t          |                              dd          }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                  t          j        d          z                       t          j	                  }|
                    |ddd	f          t          j        g d
t          j	                  
                    d          z  }|ddd d f         |ddd d f         z  |ddd d f         z  |ddd d f         z  }|
                    |df          }|                    t          j                                      t          j	                  }t          j        ||gd          S )Nr   r   Tr   r   r   r   r   r   r  r}   r	  .rB   r
  r   )r   rC   r   r7   r   r   rI   rW   r   rs   r6   r   rZ   ra   r9   )ry   r   r   r   r   r   s         r    r   zTQ2_0.quantize_blocksr  s   <?KKOOdO33[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{##ii  271::-55bh??ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nnQ	]RQ	]*RQ	]:RQ	]JZZ2''HHRZ  %%bh//~r1gB////r>  c                P   |j         d         }t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |dddf          t          j	        g dt          j
                                      d          z	  }|d	z                      |df                              t          j                  t          j        d          z
  }||                    t          j                  z  S )
Nr   r   r   r   r   r  r}   r	  r
  )r   r7   r   r   ra   rZ   rW   rX   r6   r   rs   r   )ry   r   r   r   r   s        r    r   zTQ2_0.dequantize_blocks  s    <?	&419+..AFF2:%%bj11ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn4i  (B0077@@271::MBIIbj)))*r"   Nr   r   r/   r"   r    rA  rA  q  sR        0 0 0 [0" 
+ 
+ 
+ [
+ 
+ 
+r"   rA  c                  B    e Zd ZU dZded<   dZdZdZedd
            Z	dS )IQ2_XXSs    	
!"$'(+-.03569:<?ABDGHKMNPSUVYZ\_`cefijloqrtwx{}~bytesksigns)r8  r|   r|      +   s   00000200050008000a00110014002000220028002a00410044005000580061006400800082008a00a20001010401100115014001840198010002020222028202010404041004210424044004420448046004810484049004a404000502050805200546056905800591050906100640068406a406000805080808140828084108440850085208880804094009020a140a01100410101021104010601084109010951000110811201150115a1180112412451200140814201425144914801418156215001616160118041810184018811800190519a019511a002002200a2044206120802082202921482100220222012404241024402456240025412564259026082820289428442a0140044010401840214024404040484056406040814084409040004120416141804185410142104248425642684200440844204480449944124524450046014804481048404845480049584961498249454a904a005008501150195020508050885004514251a4519152905492540a550156545600581158195864584059085a04601060406068600061556118626062006405641065126584654268008002800a8041808280048118814081118201840484108415844084608400854685948509864086608602880489118a0490109024904090a19016918091459200942294449451958198209902a050a085a009a100a218a450a804a9r   r(   r   c           	        |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      |dd          }|t          j        d          |d         dz	                      t          j                  z   z  t          j        d          z  }|                    |dddf          }|d                             |ddf          t          j	        g d	t          j        
                              d          z	  }t          j
        | j        t          j        
                              d          }|t          j        d          z                      |dddf          }t          j        ||d          }|                    |dddf          t          j	        d t          d          D             t          j        
                              d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }| j        J t          j        | j        |d                                                             t          j                                      |dddf          d          }|                    |dddf          }||z  |z                      |df          S )Nr   rB   r   r   r            ?r   r            r}   r   r   r   r   r   r      r   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z-IQ2_XXS.dequantize_blocks.<locals>.<listcomp>      @U@U@Uq@U@U@Ur"   r|   r   r   r   r|   r   r  )r   r7   r   ra   rZ   rW   rX   r   r6   r   r   rG  rs   r   r   r   rf   rT   )	ry   r   r   r   r   dbsignsrG  rf   s	            r    r   zIQ2_XXS.dequantize_blocks  s   <?	&1#&&2FF2:%%bj11WWRY''"a88"*S//RZ2%5$=$=bj$I$IIJRZX\M]M]]ZZ2q!,-- 6
""Hb!#455...XZXa9b9b9b9j9jkt9u9uusz:::BB>RR4(118RA2FGG"65r:::xQ233rx@U@UERSHH@U@U@U]_]e7f7f7f7n7no{7|7||&!RZ]]BJrNNCCxQ233x###!#(BvJOO,=,=,B,B28,L,L,T,TV^`bdeghUi,j,jqsttt||Xr1a011T	E!**Hb>:::r"   Nr   )
rL   rM   rN   rG  r   rg   rh   ri   r   r   r/   r"   r    rE  rE    sl         	L  	 	 	 	 J!H	L & ; ; ; [; ; ;r"   rE  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ2_XS)   r|   rH  s   00000200050008000a001100140016001900200022002500280041004400460049005000520055005800610064008000820085008800910094009900a000010104010601090110011201150118011a0121012401400142014501480151015401600168018101840190010002020205020802110214022002410244025002550280028a02010404040604090410041204150418042104240440044204450448045104540456046004810484049004000502050505080511051405200541054405500561058005010604061006260640064206840600080208050808080a08110814082008250841084408500858088008a008aa08010904091009400981098909000a200a280a960aa00a011004100610091010101210151018102110241040104210451048105110541060106a108110841090100011021105110811111114112011411144115011801194119611011204120612101240126012001402140514081411141414201441144414491450146414801401150415101540150016141649160118041810181218401854188618001905196619511aa91a00200220052008200a201120142020204120442050208020a020012104211021402148216521002222228022a82201240424102429244024002541255225992501261a26a626002808280a28202855288828a22868299029082a202a822a882a8a2a014004400640094010401240154018402140244040404240454048404a405140544060406540814084409040004102410541084111411441204141414441504180418541a2410142044210421242294240420044024405440844114414441944204441444444504480449444014504451045244540459a4500460a4644465046014804481048404845485448624800491149444950496949044a00500250055008501150145020502850415044505050805001510451105115514051425100524452aa520154045410542154405460548154a154005508558055885521566856a156005814584158505899581a5940594259855a0160046010604060546062608660a960006124624a62926200641664106540654565a46501686a682569066a546a626a00800280058008801180148020802a8041804480508080808280a880aa8001810481068110814081518159810082208280828282a082a8820184048410841284158440846084898400854485a58518866a860088088825885a8880888288a8880689228a808a888a968aa88a019004901090409056908490009122916491569289920094059444945094589429959095929541965198a6984999159a609a00a002a008a00aa020a02aa0a0a051a159a1a6a100a202a208a22aa280a2a0a240a495a465a698a60aa820a822a828a8a0a8a8a804a984a986a928aa2aaa91aaaaaar   r(   r   c           	     :   |j         d         }t          j        |dg          \  }}t          j        |dt          z  dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|	                    |ddf          t          j
        ddgt          j                  	                    d          z	  }|d	z  	                    |df          }|t          j        d
          |z   z  t          j        d          z  }|	                    |dddf          }t          j        t          j        t          j                  	                    ddd          }t          j        ||dz	  	                    |ddf          d          }|	                    |ddf          t          j
        d t!          d          D             t          j                  	                    d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|	                    |dddf          }| j        J t          j        | j        |t          j        d          z  	                    |dddf          d          }	|		                    |dddf          }	||	z  |z  	                    |df          S )Nr   rB   r|   r   r   r   r}   r   r   rB   r   r   rM  rT  r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z,IQ2_XS.dequantize_blocks.<locals>.<listcomp>      =R=R=RAa=R=R=Rr"   r   r   r|   i  r  )r   r7   r   r   ra   rZ   rW   rX   r   r6   r   rs   r   rE  rG  r   r   r   rf   )
ry   r   r   r   r   r   r  rX  rY  rf   s
             r    r   zIQ2_XS.dequantize_blocks  s   <?)FQC((4Yta$h!m_55
FFF2:%%bj11WWRY2q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88"*S//F*+bj.>.>>ZZ2q!,-- gnBH===EEaCPP"527*;*;Xr1<M*N*NUWXXXxQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233x###!#(R")C..-@,I,I8UWYZ\]J^,_,_fhiii||Xr1a011T	E!**Hb>:::r"   Nr   rL   rM   rN   rg   rh   ri   r   r   r/   r"   r    r[  r[    sL         J!H	L F ; ; ; [; ; ;r"   r[  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ2_S)i   r|   rH  s   00000200050008000a0011001400160019002000220025002800410044004600490050005200550058006100640066006900800082008500880091009400a000a500aa0001010401060109011001120115011801210124014001420145014801510154015601590160016501680181018401900192019501a101a40100020202050208021102140220022a02410244024602490250025502800285028a029402a20201040404060409041004120415041804210424042604290440044204450448044a0451045404560459046004620465048104840486048904900495049804a104a40400050205050508050a0511051405160519052005250528054105440546054905500552055505580561056405800582058505880591059405a00501060406060609061006150640064506480651065406600681068406900600080208050808081108140816081908200825082a084108440846084908500852085508580861086408800885089408aa08010904091009120915091809210940094509480951095409600981099009000a110a140a220a280a2a0a500a990a01100410061009101010121015101810211024102610401042104510481051105410561059106010621065106810811084108610901095109810a110a41000110211051108110a1111111411161119112011221125112811411144114611491150115211551158116111641180118211851188119111941101120412091210121512211224124012451251125412811284129012001402140514081411141414161419142014251428144114441446144914501452145514581461146414801482148514881491149414a014011504150615091510151215151518152115241540154215451548155115541560158115841590150016051608161116141620164116441650168016aa160118041806180918101815181818211840184218451848185118541860188118841800190219051908191119141920194119441950196919a219041a101a401a561a00200220052008201120142016201920202025202a2041204420502052205520642080208a209420aa2001210421102112211521212140214221452151215421602181218421902100220a22222228222a224422502288228a22a8220124042406240924102415241824212424244024422445244824512454246024812484249024002505250825112514252025412544255025662580250126042610264026592600280528112814284128442850288a28aa2801290429102995290a2a222a642a882a8a2a014004400640094010401240154018401a4021402440264040404240454048404a40514054405640594060406240654081408440904095409840a140a440004102410541084111411441164119412041224125414141444146414941504152415541584161416441804182418541884191419441a04101420442104212421542184224424042454248425142544260428142844200440244054408440a44114414441644194420442244254428444144444446444944504452445544584461446444804482448544884491449444a044014504450645094510451245154518452145244540454245454548455145544560456a4581458445904500460246054608461146144620464146444650468046a546014804480948104812481548184821482448404842484548484851485448604884489048004902490549084911491449204941494449504980499649014a044a104a404a0050025005500850115014501650195020502250255028504150445046504950505052505550585061506450805082508550885091509450015104510651095110511251155118512151245140514251455148515151545160518151845190510052055208521152145220524152445250526952805201540454065409541054125415541854215424544054425445544854515454546054815484549054005502550555085511551455205541554455505580550156045610562656405600580258055808581158145820584158445850585a5880580159045910594059005a195a855aa85a016004600660106012601560186021602460406045604860516054606060846090600061026105610861116114612061416144615061806199610462106240625662a162006405640864116414642064416444645064806401650465106540654a6568659265006694660168046810686568986800692a69426aa16a00800280058008801180148019802080258041804480508052805580588061808080858091809480018104810981108112811581188121812481408142814581488151815481818184819081a981008205820a82118214824182448250820184048406840984108412841584188421844084428445844884518454846084818484849084008502850585088511851485208541854485508580858a85018604861086298640860088058811881488418844885088a2880189048940896589228a588a5a8a828aa28a01900490099010901290159018902490409042904590489051905490609081908490909000910591119114914191449150915a910192049210924092a69200940294059408941194149420944194449450948094969401950495109540959895a19500964696649601980498109826984098a998009949995299909a00a005a00aa014a022a02aa041a044a050a0a2a0aaa040a165a102a20aa222a228a22aa282a288a28aa2a8a201a404a410a440a489a4a4a400a519a551a60aa828a8a2a854a986a908aa0aaa20aa22aa28aa88aaaaaar   r(   r   c           	        |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |ddf          t          j	        ddgt          j
                                      d	          z	  }|d
z                      |df          }|t          j        d          |z   z  t          j        d          z  }	|	                    |dddf          }	|                    |ddf          t          j	        d t          d          D             t          j
                                      d          z	  }|t          j
        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }|                    |ddf          t          j	        g dt          j
                                      d          z	  }|                    t          j                  |dz                      t          j                  dz                      |df          z  }| j        J t          j        | j        |                    |dddf          d          }
|
                    |dddf          }
|	|
z  |z                      |df          S )Nr   rB   r|   r   r   r   r   r}   r^  r   r   rM  c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ2_S.dequantize_blocks.<locals>.<listcomp>r  r`  r"   ra  r  rR  r
  r  r   r   r7   r   r   ra   rZ   rW   rX   r6   r   rs   r   r   r   rf   r   )ry   r   r   r   r   r   rY  r   r  rX  rf   s              r    r   zIQ2_S.dequantize_blocksa  s   <?)FQC((49TDAI;//Ditqyk22tYtdbj\22
FFF2:%%bj112q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88"*S//F*+bj.>.>>ZZ2q!,-- xQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233ZZ2q)**bh|||28.T.T.T.\.\]f.g.ggYYry!!b4i%7%7	%B%Ba%G$P$PRZ\^Q_$`$``x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   rb  r/   r"   r    rd  rd    sL         J!H?	L F ; ; ; [; ; ;r"   rd  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ3_XXS)r8  r   )r   r     rL  $   ,   4   >   s   0000020004001100130017002000220031004200730075000101030110011201210125013001320141015401700100020202040211022002220231023302370251025702750201030703100312032503700313043704440457047304750401050705320552053506640610071407160743076107011003101010121021102310301032103410471050100011021111112011221101120312101212122112301272120013021320133113461366130114051450142015241546157115051622174017002002201120132020202220262031204220012103210521102112212121302163216721702100220222112217222022222237224022552201231023142370237423352453240325272541257425012703271627452701301030123021302330503065307230003102312031313144314631013203321032253252327232113333333034473472340035063522355535143636366336333760370440174035403740534057407441204237424042604266420743454304445144644425454345704505471047124730471250415070500051065126515551145232527252025353531054235427547254025531555056245742572460446046606460216161611762646230633663446405655265336603672167037005700770107032705270267140711272457252720073157333736073217441740075027524753076r   r(   r   c           	     >   |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|t          j        d          |dz	                      t          j                  z   z  t          j        d          z  }|	                    |dddf          }|	                    |ddf          t          j
        g dt          j        	          	                    d
          z	  }t          j        t          j        t          j        	          	                    d          }	|t          j        d          z  	                    |dddf          }t          j        |	|d          }|	                    |dddf          t          j
        d t!          d          D             t          j        	          	                    d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|	                    |dddf          }| j        J t          j        | j        |	                    |dddf          d          }
|
	                    |dddf          }
||
z  |z  	                    |df          S )Nr   rB   r   r   rL  r   r   rN  r}   rR  rS  r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z-IQ3_XXS.dequantize_blocks.<locals>.<listcomp>  rV  r"   r|   rW  r  )r   r7   r   r   ra   rZ   rW   rX   r   r6   r   r   rE  rG  rs   r   r   r   rf   )ry   r   r   r   r   r   r  rX  rY  rG  rf   s              r    r   zIQ3_XXS.dequantize_blocks  s   <?)FQC((4Ytdai[11
FFF2:%%bj11RY''"*S//Vr\$9$9"*$E$EEFTWXZZ2q!,-- "a011RXnnnTVT]5^5^5^5f5fgp5q5qqw~RX>>>FF~VV4(118RA2FGG"65r:::xQ233rx@U@UERSHH@U@U@U]_]e7f7f7f7n7no{7|7||&!RZ]]BJrNNCCxQ233x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   rb  r/   r"   r    ri  ri    sI        J?H	L & ; ; ; [; ; ;r"   ri  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ3_S)r\  r   )r   r
  r4  rO  r         r   s   00000100020005000700100011001200140016002000210025003300400042004500470051005300600062007100740077000001010102010401100111011501200123012701310135014401610165017201000201020502070210021302160221022502300234024202450247025102530270027302030311031503200322033103330336034403500352036703710375030004130417042104240432044004430451047004020504052005220526053305410545054705660573050606110613063106520671060007020704072007220726073307500754070010011002100410101011101310151017102010221031103410361054105610611072100011011103110611101114112111301133114111501152117011761100121212151217122012241232124012431255126012721201130413071310131313211327133013341341136213701303140514121414143114331442144614501454140115101513152115301532155115201624162716441646160117031710171217211735174117621770170020012003200520072010201220142016202120232027203020322041204320452050205220672070207320752000210221102113211721222125213121342142215121012204220722212223223022372241225322572271227422002302230523112322232423312333234223502366230124072420242324322435244124722475240425112522253725402553257025002602260726212655266126052711272627302743275027023011301330153017302230313033303530423044304730513063307130013103310531143121312331403160317231763100321232203232323432503201331033143321332333273330334133433347335533733303341134163422343134523460346434013510351235253532354435563573351636413601370337203722373537004004401240204024402740324041405040704002410741114113412241304135414341514155410142034210421542214233424042574262427042044311431343204322433143354300440244244437444044714405450745214562451346344660461047154730474347514702501050145022504050445047505250665074500151035105511251215132517251005211522352305236525352025307531053275344535153655373530154045420543254465412552655515553554256025704572257116013601560316033606060006120612761646112623462426255626262706200631463216340632564436462640065036534656065056640661167136700700470077020702270367040705470627002711171247143714571017204721072167221723072517202733273357353730174057413742074507422754275027631760077r   r(   r   c           	        |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |ddf          t          j	        ddgt          j
                                      d	          z	  }|d
z                      |df          }|dd|z  z   z  }	|	                    |dddf          }	|                    |ddf          t          j	        d t          d          D             t          j
                                      d          z	  }|t          j
        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }|                    |ddf          t          j	        d t          d          D             t          j
                  z	  }|dz                      t          j                                      |df          }|                    t          j                  |dz  z  }| j        J t          j        | j        |                    |dddf          d          }
|
                    |dddf          }
|	|
z  |z                      |df          S )Nr   rB   r   r   r|   r   r   r}   r^  r   c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ3_S.dequantize_blocks.<locals>.<listcomp>  r`  r"   ra  c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ3_S.dequantize_blocks.<locals>.<listcomp>  s    7L7L7La7L7L7Lr"   r  r   rg  )ry   r   r   r   r   r   r   rY  r  rX  rf   s              r    r   zIQ3_S.dequantize_blocks  s   <?)FQC((49TDAI;//D9TDBJ<00D	$44vFF2:%%bj112q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88!a&j.!ZZ2q!,-- xQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233ZZ2q)**bh7L7L5887L7L7LTVT\.].].]]4i	**22Hb>BBYYry!!R1W-x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   rb  r/   r"   r    rr  rr    sJ        J?H	L F ; ; ; [; ; ;r"   rr  c                  R    e Zd ZdZdZdZ ej        d          Ze	d
d            Z
d	S )IQ1_S)i   r|   )r   r   r   s    00000200050008000a00110015002000220028002a00450051005400560065008000820088008a009500a000a200a800aa000401050111011401160119011a012501410146014901520155015a0161016401660168018501910194019601a5010002020208020a0215022002220228022a02450251025902640269028002820288028a02910295029902a002a202a802aa0211041404160425044104490455045a046404650491049904a5040105040505050605150518051a052905400545054a0550055105540555055605590560056205650568056a0581059105950598059a05a105a405a505a605a90514061906410644065006520655065806600661066606690685069106940699060008020808080a0815082008220828082a0845085108560865088008820888088a089508a008a208a808aa0805091109140919092409250941095009510955096109640969099109940996099909a509000a020a080a0a0a150a200a220a280a2a0a450a510a590a610a650a800a820a850a880a8a0a950aa00aa20aa80aaa0a101011101410191024102510411044105010551058106110641065106910911094109610a110a5100111041106110911101112111511181121112411291145114a11501151115211541155115611591160116511841192119511a111a41111121412161225124012461249125212551258125a12641266128512911294129612a51201140614091414141514181419142114261441144514461448144a145114541455145614591462146514681484148914901494149514981499149a14a114a414a514a914021505150a151115141515151615191520152215251528152a1541154415451546155115521554155515561559155a1561156415651566156915801582158415851588158a159015911594159515961599159a15a015a215a51501160416051606161516161618161a1621162616401642164416451648164a1651165516561658165916611664166516681669166a1686168a1692169516a416a91611181618251841184418461849185018551858185a1860186118641866186918851891189418a5181019121915191a19211925194219441945194819511954195519561959195a19601965196a1989199119921995199819a119a619a919091a161a241a261a441a461a491a501a521a551a581a611a661a691a851a911a961a9a1a0020022008200a20152020202220252028202a20452051205920612065208020822088208a209520a020a220a520a820aa2005211121142119212521422144214921552158215a2161216421652166218521902196219921a521012208220a22112215222022222228222a2245225122562259226522812288228a2291229522a022a222a822aa220524142416241924252444244524462449245224552458245a2466248524912494249924a124a52409251525212529254025452548255125542555255925622565256825892590259425952598259a25a125a425a625a925052610261226192625264126492655266026612669268426862690269a260028022808280a2815282028222828282a2845285128542865288028822888288a28a028a228a828aa2809291129142919292529462949295229552961296429662969298529902996299929a429a529002a022a082a0a2a202a222a282a2a2a452a512a562a592a652a802a822a882a8a2a952aa02aa22aa82aaa2a054011401640254049405240554058405a4061406440664094409940a140a6400041014104410641094112411541164118411a41214126412941454148414a41514154415541564159415a41654168416a41814184418641904192419541a041a141a241054211421442164225424142524255425a426442694289429442a5420144154419442944454448444a44514454445544564461446244654468446a44814486448944904492449544a044a144a9440145024505450a4511451445154516451945204525452a45414544454545464549455045514554455545564558455945614564456545664569458245844585458845914594459545964599459a45a545a845aa450146054609461446154618461a462146244629464046424645464846504651465246554656465946624665466846814685468a4694469546a146a446a6460548114815481a48254842484948504855485848614864486648694885489148944896489948a5480149054906490a491049144915491849214924492649404945494a4951495249544955495649594960496249654966496a49864989499249954996499849a149a449a649a949164a444a464a494a554a584a5a4a644a694a944aa54a01500450055006500950125015501a5021502450295040504550485051505450555056505950655068508650895095509850a050a150a650a9500551085109510a5111511451155116511851195120512551265128512a5141514451455146514951505151515251545155515651585159515a51615164516551665169518251855191519451955196519951a051a551aa5101520652125215521a5221522452425245524a525152545255525652595262526552855290529252955299529a52a452045405541154145415541654185419542154255428542a54415444544554465449544a5450545154545455545654585459545a54615462546454655466546954805488548a5491549454955496549954a154a454a554aa5401550255045505550655095510551155125514551555165519551a552155245525552655295540554155425544554555465548554955505551555255545555555655585559555a5560556155645565556655685569556a5581558455855589558a559055915594559555965598559955a155a455a555a655a95500560156025604560656085609561156145615561856195620562156225624562556265628562956415645564656485649564a56505651565256545655565656585659565a566156645665566956825685568656885689568a56915695569a56a256a556a656a856a956045805580658095810581558185821582a58455848584a585158545855585658585859586058625864586558825889589058925895589858a158a9580159025905590a5911591459155916591959255941594459455946594959505951595259545955595659585959595a5961596459655966596959815985598959915994599559965998599959a559045a085a155a1a5a205a255a265a295a455a485a495a515a555a565a585a595a625a655a685a6a5a815a8a5a925a955a965a985a9a5aa15a05601460166019602560446050605560566058605a60616064606660696081609660a5600161046106610961126115612161226126612961456149615161556156615961656166616a6184618a6192619561a161a661a9611162166219624062416246625562566258626062856291629662a56211641264156416641a6421642664296440644264456448644a64516454645564566459645a646064626465648464856489649064926494649564966498649a64a164a464a964056508650a651165156516651965446545654665496550655165546555655665596561656465656566656965866589658a6591659565966599659a65a265a565a665a86502660966156620662666286629664066456648664a66516654665566566658665a666066656668668066826685668a669466966698669966a066a466a666aa661668196825684168526855685a6861686968856891689868a668016904691069156921692469266929694069416945694669486951695469556956695969606965696a69826984698a699569a169a469a569a969116a166a186a416a446a496a506a556a586a5a6a646a656a696a866a946a986a9a6aa66a0080028008800a802080228028802a8045805080518054805680598065808080828088808a809580a080a280a880aa8005811181148116811981258141814481498150815281558156815881598164816681698185818981948196819981a5810082028208820a8215822082228228822a8251825482598265828082828288828a829582a082a282a882aa821484198441844484518455845a846184648469849484998401850985128515851a85268529854085418545854885518554855585568559855a856585668568856a8581858485868589859085928595859885a68511861686198625864186448649864a865086558659865a86618666866a86858691869a86a4860088028808880a8815882088228828882a8841884588518854885988658869888088828888888a889588a088a288a888aa8805890689118914891689258941894489468949895089528955895a8961896489858996899989a589008a028a088a0a8a158a208a228a288a2a8a458a518a548a568a808a828a888a8a8a958aa08aa28aa88aaa8a059011901690189019902590419046904990559058905a9069906a9085909190949096909990a59001910491069109911091159118911a912191249126912991409145915091519154915591569159916291659184918691929195919891a191a491a691a99105921192149219922592449246924992509252925592589266926992859294929692a992019404940694109415941894269440944a945194549455945694589459946094619462946594849486949294949495949894a194a9940095059508950a951095119514951595169519952195259529952a9541954495459546954995509551955295549555955695589559955a95619564956595669569958195859588959195929594959595969599959a95a095a295a595a895aa950196049610961596199620962696299645964896499651965296559656965996659668968296849689968a96929694969596a496a696a99605981698199825984198469850985298559856985a98649865988598919896989998a59804990699099910991299159918991a99209921992499269940994299459948994a99519954995599569959996299659966996a99819984999099929995999a99a199a699059a159a259a449a469a499a509a559a589a619a859a919a949a959a969a00a002a008a00aa015a020a022a028a02aa045a051a054a056a059a080a082a088a08aa095a0a0a0a2a0a8a0aaa005a109a111a114a116a119a11aa146a149a151a155a158a15aa161a164a185a190a192a196a199a102a208a20aa210a219a222a228a22aa245a251a256a259a265a280a282a288a28aa295a2a0a2a2a2a8a2aaa219a425a441a444a450a454a455a458a45aa461a465a466a468a469a485a406a509a510a512a515a518a526a529a542a545a551a554a555a556a559a565a56aa581a584a585a586a589a592a595a598a505a611a616a61aa621a625a644a646a64aa652a655a656a658a660a662a686a690a695a696a699a6a1a6a4a6a6a600a802a808a80aa820a822a828a82aa851a854a856a859a880a882a888a88aa895a8a0a8a2a8a8a8aaa805a914a919a921a925a941a950a955a95aa961a966a969a990a996a900aa02aa08aa0aaa20aa22aa28aa2aaa51aa54aa56aa80aa82aa88aa8aaa95aaa0aaa2aaa8aaaaaag      ?r   r(   r   c           	     :   |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|d|dz	  dz  z  dz   z  }|	                    |dddf          }t          j
        |t          j        d          z  dk    | j        | j                   }|	                    |dddf          }|	                    |ddf          t          j        g d	t          j        
          	                    d          z	  }|                    t          j                  |dz  dz  	                    |df          z  }| j        J t          j        | j        |	                    |dddf          d          }	|		                    |dddf          }	||	|z   z  	                    |df          S )Nr   rB   r|   r  rO  r   r   i   r   r
  r  r   r}   rR  r  r   r   )r   r7   r   r   ra   rZ   rW   rX   r   r6   r   deltar   rf   r   )
ry   r   r   r   r   r   r   r  r|  rf   s
             r    r   zIQ1_S.dequantize_blocks  s   <?)FQC((44$!)--BFF2:%%bj11WWRY!bA~&*+ZZ2q!,--"ry000Q6	CI:NNxQ233ZZ2q)**bh|||29.U.U.U.].]^g.h.hhYYry!!b1f]$;$;XrN$K$KKx###!#(BJJ"a7K,L,LSUVVV||Xr1a011dUl#,,h^<<<r"   Nr   )rL   rM   rN   rg   rh   ri   r7   rX   r|  r   r   r/   r"   r    ry  ry    s^         JH	L F BJuE= = = [= = =r"   ry  c                  ^    e Zd Zej        Zej        Zej        Zej        Zedd            Z	dS )IQ1_Mr   r(   r   c           	     \   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                  }|                    |df          t          j        d          z  t          j        g dt          j                                      d          z	  }|d	         |d
         z  |d         z  |d         z  }|                    t          j                  	                    t          j
                                      |df          }|                    |dd          t          j        g dt          j                                      d          z	  }|dz                      |df          }|d|z  dz   z  }|                    |ddddf          }|                    |ddf          t          j        ddgt          j                                      d          z	  }|	                    t          j                  |dz  	                    t          j                  dz                      |df          z  }t          j        |dz  dk    | j        | j                   }	|	                    |ddddf          }	| j        J t          j        | j        |                    |dddf          d          }
|
                    |ddddf          }
||
|	z   z                      |df          S )Nr   r|   r-   r   i   )r  r|   r   r   r}   )r   r   r   r   ).rB   ).r
  r   r   r{  rR  rO  rB   r^  r  r   )r   r7   r   r   ra   r   r6   r   rZ   rW   rX   rs   r   r|  rf   r   )ry   r   r   r   r   r   r  r   r  r|  rf   s              r    r   zIQ1_M.dequantize_blocks  s   <?9Vdai[11DYtdbj\22
F RY''^^XqM**RYv->->>28MMMacajCkCkCkCsCstzC{C{{fI&	!AfI-&	9FF2:%%bj11998Q-HH"a00BH\\\QSQZ4[4[4[4c4cdm4n4nn4-(((B88!f*q.!ZZ2q!Q/00ZZ2q)**bh1vRX.N.N.N.V.VW`.a.aaYYry!!b4i%7%7	%B%Ba%G$P$PRZ\^Q_$`$``daSYJ??xQ1566x###!#(BJJ"a7K,L,LSUVVV||Xr1a344dUl#,,h^<<<r"   Nr   )
rL   rM   rN   ry  rg   rh   ri   r|  r   r   r/   r"   r    r~  r~    sQ        !J~H~HKE = = = [= = =r"   r~  c                  *    e Zd ZdZedd            ZdS )IQ4_NL)iiiiiiiir   rt  rI  &   5   E   Y   q   r   r(   r   c                   |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |ddf          }t          j	        | j        t          j                                      ddd	          }t          j        ||d
                              t          j                                      |df          }||z  S )Nr   rB   r   r   r   r}   r   r   r-   r   )r   r7   r   ra   rZ   rW   rX   r6   r   r   rs   kvaluesr   r   )ry   r   r   r   r   r  s         r    r   zIQ4_NL.dequantize_blocks  s*   <?	&1#&&2FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb!+<==(3;bg666>>q!RHH"555<<RZHHPPRZ\^Q_``Br"   Nr   )rL   rM   rN   r  r   r   r/   r"   r    r  r    s7        XG   [  r"   r  c                  &    e Zd Zedd            ZdS )IQ4_XSr   r(   r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|	                    |ddf          t          j
        ddgt          j                  	                    d          z	  }|	                    |ddf          t          j
        d	 t          t          d
z            D             t          j                  	                    d          z	  }|	                    |df          t          j        d          z  }|	                    |df                              t          j                  t          j        d          z  }||t          j        d          z  z                      t          j                  t          j        d
          z
  }||                    t          j                  z  	                    |ddf          }	|	                    |dddf          t          j
        ddgt          j                  	                    d          z	  }|	                    |dd
df          t          j        d          z  }t          j
        t          j        t          j                  	                    d          }
t          j        |
|d                              t          j                  	                    |dd
f          }|	|z  	                    |df          S )Nr   rB   r~   r   r   r   r}   r^  c                    g | ]}d |z  S )rB   r/   r   s     r    r3   z,IQ4_XS.dequantize_blocks.<locals>.<listcomp>  s    CeCeCeaAECeCeCer"   r   )r   r   r   r   r
  r-   r   )r   r   r   r   r   )r   r7   r   r   ra   rZ   rW   rX   r   r6   r   rs   r   r   r  r  r   )ry   r   r   r   r   scales_hscales_lr   r  r  r  s              r    r   zIQ4_XS.dequantize_blocks  s   <?)FQC((44!--$y
|44"FF2:%%bj11==++##Xr1$566"(Aq6QSQY:Z:Z:Z:b:bcl:m:mm##Xq"$566"(CeCeSXY]acYcSdSdCeCeCemomv:w:w:w::  AK  ;L  ;L  L##XrN33bhtnnD##XrN33::28DDrxPT~~Uh"(1++56>>rwGG"'RT++U&--
+++44hA5FGGZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hhZZ2r1-..$?(6>999AA-PP"555<<RZHHPPRZ\^`bQcddR  (B000r"   Nr   r  r/   r"   r    r  r    s2        1 1 1 [1 1 1r"   r  )r   r   r   r   r   r   )
r%   r&   r'   r(   r)   r   r*   r   r   r(   )r@   r(   r   r(   )rP   r(   rQ   r   r   r(   )7
__future__r   abcr   r   typingr   r   r   mathr	   r
   numpy.typingr   	constantsr   r   r   lazyr   numpyr7   r!   r$   r?   rI   	ExceptionrK   rO   r   r\   rb   rd   r   r   r   r   r   r   r  r  r  r)  r-  r0  rA  rE  r[  rd  ri  rr  ry  r~  r  r  r/   r"   r    <module>r     sl   " " " " " " " # # # # # # # # * * * * * * * * * *         " " " " " " C C C C C C C C C C ! ! ! ! ! !    > > > >> > > >	 	 	 	    !               ;= < < < <[ [ [ [] ] ] ]{2 {2 {2 {2 {2c {2 {2 {2|O O O O O7.3 O O O O  +  +  +  +  +7.3  +  +  +  +F" " " " "7.3 " " " "J(+ (+ (+ (+ (+7.3 (+ (+ (+ (+V* * * * *7.3 * * * *Z    7.3    4* * * * *7.3 * * * *6)2 )2 )2 )2 )27.3 )2 )2 )2 )2X/7 /7 /7 /7 /77.3 /7 /7 /7 /7d6 6 6 6 67.3 6 6 6 661 1 1 1 17.3 1 1 1 1.-+ -+ -+ -+ -+G/5 -+ -+ -+ -+`+ + + + +G/5 + + + +B>; >; >; >; >;g19 >; >; >; >;BC; C; C; C; C;W07 C; C; C; C;Le; e; e; e; e;G/5 e; e; e; e;P1; 1; 1; 1; 1;g19 1; 1; 1; 1;hD; D; D; D; D;G/5 D; D; D; D;N`= `= `= `= `=G/5 `= `= `= `=F$= $= $= $= $=G/5 $= $= $= $=N    W07    *1 1 1 1 1W07 1 1 1 1 1 1r"   