
    Rizr              
       
   U d dl mZ d dlmZ d dlmZmZ d dlm	Z	 	  ej
                    Zeed<    ej                    Zeed<    ej                    Zeed<    ej                    Zeed<    ej                    Zeed	<   eez   Z ej                    Zeed
<    ej                    Zeed<    ej                    Zeed<    ej                    Zeed<    ej                    Z eed<   e ez   Z! ej"                    Z#eed<    ej$                    Z%eed<    ej&                    Z'eed<    ej(                    Z)eed<    ej*                    Z+eed<   e+e)z   Z, ej-                    Z.eed<    ej/                    Z0eed<    ej1                    Z2eed<    ej3                    Z4eed<    ej5                    Z6eed<   e6e4z   Z7 ej8                    Z9eed<    ej:                    Z;eed<    ej<                    Z=eed<    ej>                    Z?eed<    ej@                    ZAeed<   eAe?z   Z7 ejB                    ZCeed<    ejD                    ZEeed<    ejF                    ZGeed <    ejH                    ZIeed!<    ejJ                    ZKeed"<   eKeIz   Z7d#eLd$eeL         d%eLd&eLd'eLf
d(ZMd)eLd$eeL         d%eLd&eLd'eLf
d*ZNd#eLd$eeL         d%eLd&eLd'eLf
d+ZOd)eLd$eeL         d%eLd&eLd'eLf
d,ZPd#eLd$eeL         d%eLd&eLd'eLf
d-ZQd)eLd$eeL         d%eLd&eLd'eLf
d.ZRd#eLd$eeL         d%eLd&eLd'eLf
d/ZSd)eLd$eeL         d%eLd&eLd'eLf
d0ZTd#eLd$eeL         d%eLd&eLd'eLf
d1ZUd)eLd$eeL         d%eLd&eLd'eLf
d2ZVd#eLd$eeL         d%eLd&eLd'eLf
d3ZWd)eLd$eeL         d%eLd&eLd'eLf
d4ZXd5S )6    )Optional)
exceptions)ffilib)ensure*crypto_aead_chacha20poly1305_ietf_KEYBYTES+crypto_aead_chacha20poly1305_ietf_NSECBYTES+crypto_aead_chacha20poly1305_ietf_NPUBBYTES(crypto_aead_chacha20poly1305_ietf_ABYTES2crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX%crypto_aead_chacha20poly1305_KEYBYTES&crypto_aead_chacha20poly1305_NSECBYTES&crypto_aead_chacha20poly1305_NPUBBYTES#crypto_aead_chacha20poly1305_ABYTES-crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX+crypto_aead_xchacha20poly1305_ietf_KEYBYTES,crypto_aead_xchacha20poly1305_ietf_NSECBYTES,crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)crypto_aead_xchacha20poly1305_ietf_ABYTES3crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAXcrypto_aead_aegis256_KEYBYTEScrypto_aead_aegis256_NSECBYTEScrypto_aead_aegis256_NPUBBYTEScrypto_aead_aegis256_ABYTES%crypto_aead_aegis256_MESSAGEBYTES_MAXcrypto_aead_aegis128l_KEYBYTEScrypto_aead_aegis128l_NSECBYTEScrypto_aead_aegis128l_NPUBBYTEScrypto_aead_aegis128l_ABYTES&crypto_aead_aegis128l_MESSAGEBYTES_MAXcrypto_aead_aes256gcm_KEYBYTEScrypto_aead_aes256gcm_NSECBYTEScrypto_aead_aes256gcm_NPUBBYTEScrypto_aead_aes256gcm_ABYTES&crypto_aead_aes256gcm_MESSAGEBYTES_MAXmessageaadnoncekeyreturnc                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |r|}t          |          }nt          j        }d}|t          z   }t          j        d	          }t          j        d
|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
dk    dt          j                   t          j        |	|d                   dd         S )aZ  
    Encrypt the given ``message`` using the IETF ratified chacha20poly1305
    construction described in RFC7539.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
     Input message type must be bytesraising%Message must be at most {} bytes longN%Additional data must be bytes or None,Nonce must be a {} bytes long bytes sequence*Key must be a {} bytes long bytes sequencer   unsigned long long *unsigned char[]Encryption failed.)r   
isinstancebytesexc	TypeErrorlenr   format
ValueErrorr
   r   r   NULLr   newr   )crypto_aead_chacha20poly1305_ietf_encryptCryptoErrorbufferr&   r'   r(   r)   mlen_aadaalenmxoutclen
ciphertextress              Q/srv/django_bis/venv311/lib/python3.11/site-packages/nacl/bindings/crypto_aead.pyr?   r?   x   s   $ 7E""*    w<<D
BB/66>	
 	
     3/3$;/    5%   	FJJEE6==7	
 	
     3 	CHHBB4;;6	
 	
      Cx;;E7)**D*E22J

7D'4uchs C 3!8)3?CCCC:j$q'**111--    rH   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |t          z
  }t          j        d          }t          j        d	|          }|r|}t          |          }	nt          j        }d
}	t          j        ||t          j        | |||	||	  	        }
t          |
d
k    dt          j                   t          j        ||d
                   dd         S )aR  
    Decrypt the given ``ciphertext`` using the IETF ratified chacha20poly1305
    construction described in RFC7539.

    :param ciphertext:
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    #Input ciphertext type must be bytesr-   (Ciphertext must be at most {} bytes longNr0   r1   r2   r3   r4   r   Decryption failed.)r   r6   r7   r8   r9   r:   *_aead_chacha20poly1305_ietf_CRYPTBYTES_MAXr;   r<   r
   r   r   r   r>   r=   r   )crypto_aead_chacha20poly1305_ietf_decryptr@   rA   rH   r'   r(   r)   rG   rF   rC   r&   rD   rE   rI   s              rJ   rQ   rQ      s   $ :u%%-    z??D
::2996	
 	
     3/3$;/    5%   	FJJEE6==7	
 	
     3 	CHHBB4;;6	
 	
     ;;E7)**Dg'//G
 Cx

7sxT4s C 3!8)3?CCCC:gtAw''**rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |r|}t          |          }nt          j        }d}|t          z   }t          j        d	          }t          j        d
|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
dk    dt          j                   t          j        |	|d                   dd         S )a[  
    Encrypt the given ``message`` using the "legacy" construction
    described in draft-agl-tls-chacha20poly1305.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   $crypto_aead_chacha20poly1305_encryptr@   rA   rB   s              rJ   rT   rT     s   $ 7E""*    w<<D
==/669	
 	
     3/3$;/    5%   	AJJ@@6==2	
 	
     3 	>HH==4;;1	
 	
      Cx;;E7)**D*E22J

2D'4uchs C 3!8)3?CCCC:j$q'**111--rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |t          z
  }t          j        d          }t          j        d	|          }|r|}t          |          }	nt          j        }d
}	t          j        ||t          j        | |||	||	  	        }
t          |
d
k    dt          j                   t          j        ||d
                   dd         S )al  
    Decrypt the given ``ciphertext`` using the "legacy" construction
    described in draft-agl-tls-chacha20poly1305.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   %_aead_chacha20poly1305_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   $crypto_aead_chacha20poly1305_decryptr@   rA   rR   s              rJ   rW   rW   e  s   $ :u%%-    z??D
552991	
 	
     3/3$;/    5%   	AJJ@@6==2	
 	
     3 	>HH==4;;1	
 	
     66E7)**Dg'//G
 Cx

2sxT4s C 3!8)3?CCCC:gtAw''**rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |r|}t          |          }nt          j        }d}|t          z   }t          j        d	          }t          j        d
|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
dk    dt          j                   t          j        |	|d                   dd         S )aD  
    Encrypt the given ``message`` using the long-nonces xchacha20poly1305
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   *crypto_aead_xchacha20poly1305_ietf_encryptr@   rA   rB   s              rJ   rY   rY     s   $ 7E""*    w<<D
CC/66?	
 	
     3/3$;/    5%   	GJJFF6==8	
 	
     3 	DHHCC4;;7	
 	
      Cx<<E7)**D*E22J

8D'4uchs C 3!8)3?CCCC:j$q'**111--rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |t          z
  }t          j        d          }t          j        d	|          }|r|}t          |          }	nt          j        }d
}	t          j        ||t          j        | |||	||	  	        }
t          |
d
k    dt          j                   t          j        ||d
                   dd         S )aU  
    Decrypt the given ``ciphertext`` using the long-nonces xchacha20poly1305
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   +_aead_xchacha20poly1305_ietf_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   *crypto_aead_xchacha20poly1305_ietf_decryptr@   rA   rR   s              rJ   r\   r\     s   $ :u%%-    z??D
;;2997	
 	
     3/3$;/    5%   	GJJFF6==8	
 	
     3 	DHHCC4;;7	
 	
     <<E7)**Dg'//G
 Cx

8sxT4s C 3!8)3?CCCC:gtAw''**rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |r|}t          |          }nt          j        }d}|t          z   }t          j        d	          }t          j        d
|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
dk    dt          j                   t          j        |	|d                   dd         S )a0  
    Encrypt the given ``message`` using the AEGIS-256
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   crypto_aead_aegis256_encryptr@   rA   rB   s              rJ   r^   r^   Q  s   $ 7E""*    w<<D
55/661	
 	
     3/3$;/    5%   	9JJ886==*	
 	
     3L3s88/L#L4;;)	
 	
      Cx..E7)**D*E22J

*D'4uchs C 3!8)3?CCCC:j$q'**111--rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |t          z
  }t          j        d          }t          j        d	|          }|r|}t          |          }	nt          j        }d
}	t          j        ||t          j        | |||	||	  	        }
t          |
d
k    dt          j                   t          j        ||d
                   dd         S )aA  
    Decrypt the given ``ciphertext`` using the AEGIS-256
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   _aead_aegis256_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   crypto_aead_aegis256_decryptr@   rA   rR   s              rJ   ra   ra     s   $ :u%%-    z??D
--299)	
 	
     3/3$;/    5%   	9JJ886==*	
 	
     3L3s88/L#L4;;)	
 	
     ..E7)**Dg'//G
 Cx

*sxT4s C 3!8)3?CCCC:gtAw''**rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |r|}t          |          }nt          j        }d}|t          z   }t          j        d	          }t          j        d
|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
dk    dt          j                   t          j        |	|d                   dd         S )a1  
    Encrypt the given ``message`` using the AEGIS-128L
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r    r;   r<   r   r   r   r=   r   r>   r   crypto_aead_aegis128l_encryptr@   rA   rB   s              rJ   rc   rc     s   $ 7E""*    w<<D
66/662	
 	
     3/3$;/    5%   	:JJ996==+	
 	
     3M3s88/M#M4;;*	
 	
      Cx//E7)**D*E22J

+D'4uchs C 3!8)3?CCCC:j$q'**111--rK   c                 V   t          t          | t                    dt          j                   t          |           }t          |t          k    d                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   |t          z
  }t          j        d          }t          j        d	|          }|r|}t          |          }	nt          j        }d
}	t          j        ||t          j        | |||	||	  	        }
t          |
d
k    dt          j                   t          j        ||d
                   dd         S )aB  
    Decrypt the given ``ciphertext`` using the AEGIS-128L
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   r`   r;   r<   r   r   r   r   r>   r=   r   crypto_aead_aegis128l_decryptr@   rA   rR   s              rJ   re   re   :  s   $ :u%%-    z??D
--299)	
 	
     3/3$;/    5%   	:JJ996==+	
 	
     3M3s88/M#M4;;*	
 	
     //E7)**Dg'//G
 Cx

+sxT4s C 3!8)3?CCCC:gtAw''**rK   c                    t          t          j                    dk    dt          j                   t          t          | t                    dt          j                   t          |           }t          |t          k    d
                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d
                    t                    t          j                   t          t          |t                    ot          |          t          k    d	
                    t                    t          j                   |r|}t          |          }nt          j        }d
}|t           z   }t          j        d          }t          j        d|          }	t          j        |	|| |||t          j        ||	  	        }
t          |
d
k    dt          j                   t          j        |	|d
                   dd         S )a{  
    Encrypt the given ``message`` using the AES-256-GCM
    construction.  Requires the Intel AES-NI extensions,
    or the ARM Crypto extensions.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
       +Construction requires hardware accelerationr-   r,   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r   "crypto_aead_aes256gcm_is_availabler8   UnavailableErrorr6   r7   r9   r:   r%   r;   r<   r#   r!   r   r=   r$   r>   crypto_aead_aes256gcm_encryptr@   rA   rB   s              rJ   rk   rk     sH   & .00A55$    7E""*    w<<D
66/662	
 	
     3/3$;/    5%   	:JJ996==+	
 	
     3M3s88/M#M4;;*	
 	
      Cx//E7)**D*E22J

+D'4uchs C 3!8)3?CCCC:j$q'**111--rK   c                    t          t          j                    dk    dt          j                   t          t          | t                    dt          j                   t          |           }t          |t          k    d
                    t                    t          j                   t          t          |t                    p|du dt          j                   t          t          |t                    ot          |          t          k    d
                    t                    t          j                   t          t          |t                    ot          |          t          k    d	
                    t                    t          j                   |t          z
  }t          j        d
          }t          j        d|          }|r|}t          |          }	nt          j        }d}	t          j        ||t          j        | |||	||	  	        }
t          |
dk    dt          j                   t          j        ||d                   dd         S )a  
    Decrypt the given ``ciphertext`` using the AES-256-GCM
    construction.  Requires the Intel AES-NI extensions,
    or the ARM Crypto extensions.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rg   rh   r-   rM   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r   ri   r8   rj   r6   r7   r9   r:   r`   r;   r<   r#   r!   r$   r   r>   r=   crypto_aead_aes256gcm_decryptr@   rA   rR   s              rJ   rm   rm     sH   & .00A55$    :u%%-    z??D
--299)	
 	
     3/3$;/    5%   	:JJ996==+	
 	
     3M3s88/M#M4;;*	
 	
     //E7)**Dg'//G
 Cx

+sxT4s C 3!8)3?CCCC:gtAw''**rK   N)Ytypingr   naclr   r8   nacl._sodiumr   r   nacl.exceptionsr   *crypto_aead_chacha20poly1305_ietf_keybytesr   int__annotations__+crypto_aead_chacha20poly1305_ietf_nsecbytesr	   +crypto_aead_chacha20poly1305_ietf_npubbytesr
   (crypto_aead_chacha20poly1305_ietf_abytesr   2crypto_aead_chacha20poly1305_ietf_messagebytes_maxr   rP   %crypto_aead_chacha20poly1305_keybytesr   &crypto_aead_chacha20poly1305_nsecbytesr   &crypto_aead_chacha20poly1305_npubbytesr   #crypto_aead_chacha20poly1305_abytesr   -crypto_aead_chacha20poly1305_messagebytes_maxr   rV   +crypto_aead_xchacha20poly1305_ietf_keybytesr   ,crypto_aead_xchacha20poly1305_ietf_nsecbytesr   ,crypto_aead_xchacha20poly1305_ietf_npubbytesr   )crypto_aead_xchacha20poly1305_ietf_abytesr   3crypto_aead_xchacha20poly1305_ietf_messagebytes_maxr   r[   crypto_aead_aegis256_keybytesr   crypto_aead_aegis256_nsecbytesr   crypto_aead_aegis256_npubbytesr   crypto_aead_aegis256_abytesr   %crypto_aead_aegis256_messagebytes_maxr   r`   crypto_aead_aegis128l_keybytesr   crypto_aead_aegis128l_nsecbytesr   crypto_aead_aegis128l_npubbytesr   crypto_aead_aegis128l_abytesr   &crypto_aead_aegis128l_messagebytes_maxr    crypto_aead_aes256gcm_keybytesr!   crypto_aead_aes256gcm_nsecbytesr"   crypto_aead_aes256gcm_npubbytesr#   crypto_aead_aes256gcm_abytesr$   &crypto_aead_aes256gcm_messagebytes_maxr%   r7   r?   rQ   rT   rW   rY   r\   r^   ra   rc   re   rk   rm    rK   rJ   <module>r      sE          " " " " " " ! ! ! ! ! ! ! ! " " " " " " 3C244 +C    4C355 ,S    4C355 ,S    1C022 )#    ;C:<< 3C    7./ + .C-// &s    /C.00 '    /C.00 '    ,C+-- $S    6C577 .s    2)* & 4C355 ,S    5C466 -c    5C466 -c    2C133 *3    <C;== 4S    8/0 ,
 &GS%F%H%H s H H H&Hc&H&J&J  J J J&Hc&H&J&J  J J J#B3#B#D#D S D D D-C-// &s    *,GG  'Ic&H&J&J  J J J'Js'J'L'L  L L L'Js'J'L'L  L L L$DC$D$F$F c F F F.C.00 '    +-II  'Ic&H&J&J  J J J'Js'J'L'L  L L L'Js'J'L'L  L L L$DC$D$F$F c F F F.C.00 '    +-II 
L.L.!%L.16L.=BL.
L. L. L. L.^L+L+$UOL+49L+@EL+
L+ L+ L+ L+^L.L.!%L.16L.=BL.
L. L. L. L.^L+L+$UOL+49L+@EL+
L+ L+ L+ L+^L.L.!%L.16L.=BL.
L. L. L. L.^K+K+$UOK+49K+@EK+
K+ K+ K+ K+\K.K.!%K.16K.=BK.
K. K. K. K.\J+J+$UOJ+49J+@EJ+
J+ J+ J+ J+ZK.K.!%K.16K.=BK.
K. K. K. K.\J+J+$UOJ+49J+@EJ+
J+ J+ J+ J+ZR.R.!%R.16R.=BR.
R. R. R. R.jQ+Q+$UOQ+49Q+@EQ+
Q+ Q+ Q+ Q+ Q+ Q+rK   