Ë
    P/æjŠ8  ã            	       óV  — d dl Z d dlZd dlmZmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZmZ d dlZddlmZ ddlmZ erd dlmZ d	„ Zd dlZ ej4                  e«      Zej:                  j=                  ed
«      Z G d„ de «      Z! G d„ de!«      Z" G d„ de!«      Z# G d„ de#«      Z$ G d„ de#«      Z% G d„ de#«      Z& G d„ de!«      Z' G d„ de!«      Z( G d„ de!«      Z) G d„ de!«      Z* G d„ d e!«      Z+ G d!„ d"e!«      Z, G d#„ d$e!«      Z- G d%„ d&e,«      Z. G d'„ d(e,«      Z/ G d)„ d*e.«      Z0 G d+„ d,e«      Z1 G d-„ d.e,«      Z2 G d/„ d0e!«      Z3 G d1„ d2e3e,«      Z4 G d3„ d4e!«      Z5 G d5„ d6e!«      Z6 G d7„ d8e7«      Z8 G d9„ d:e!«      Z9 G d;„ d<e9«      Z: G d=„ d>e9«      Z; G d?„ d@e9«      Z<e=e:e>e;e?e<iZ@dA„ ZAdB„ ZBej†                  jˆ                  jŠ                  ej†                  jˆ                  jŒ                  ej†                  jˆ                  jŽ                  ej†                  jˆ                  j�                  fZIdCe7dDeJdEefdF„ZK eL«       ZMeMddGœdDeJdHedIeeJ   dEefdJ„ZNdDeJdEdfdK„ZO G dL„ dM«      ZPdXdNe7dDeJdOeQdEdfdP„ZRdCe7dQdRdEeeeJ   eeS   f   fdS„ZTdYdNe7dEee	   fdT„ZUdU„ ZV	 dZdNe7dEeJfdV„ZWdZdNe7dEeJfdW„ZXy)[é    N)ÚautoÚEnum)Úextract_stackÚ
format_excÚformat_listÚStackSummary)ÚAnyÚcastÚNoReturnÚOptionalÚTupleÚTYPE_CHECKINGé   )Úconfig)Úcounters)Ú	CompileIdc                 ó,   — d| j                  dd«      z   S )NzhFor more information about this error, see: https://pytorch.org/docs/main/generated/exportdb/index.html#Ú_ú-)Úreplace©Ú	case_names    úT/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/exc.pyÚexportdb_error_messager      s"   € ð	Ià
×
Ñ
˜C Ó
%ñ	&ðó    Úgraph_breaksc                   ó   — e Zd Zy)ÚTorchDynamoExceptionN©Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   !   ó   „ Ør   r   c                   ó   — e Zd Zy)ÚInternalTorchDynamoErrorNr   r#   r   r   r&   r&   %   r$   r   r&   c                   ó2   ‡ — e Zd ZU eed<   ddœdˆ fd„Zˆ xZS )ÚRestartAnalysisÚrestart_reasonN)r)   c                ó,   •— || _         t        ‰| �  |Ž  y ©N)r)   ÚsuperÚ__init__)Úselfr)   ÚargsÚ	__class__s      €r   r-   zRestartAnalysis.__init__,   s   ø€ Ø,ˆÔÜ‰Ñ˜$Òr   ©ÚreturnN)r    r!   r"   ÚstrÚ__annotations__r-   Ú__classcell__©r0   s   @r   r(   r(   )   s   ø… ØÓà-1÷  ó  r   r(   c                   ó   — e Zd Zy)ÚSpeculationRestartAnalysisNr   r#   r   r   r8   r8   1   r$   r   r8   c                   ó   — e Zd Zy)ÚUnspecializeRestartAnalysisNr   r#   r   r   r:   r:   5   r$   r   r:   c                   ó   — e Zd Zy)Ú CompileCollectiveRestartAnalysisNr   r#   r   r   r<   r<   9   r$   r   r<   c                   ó   — e Zd Zy)Ú	SkipFrameNr   r#   r   r   r>   r>   =   r$   r   r>   c                   ó   — e Zd Zy)ÚTorchRuntimeErrorNr   r#   r   r   r@   r@   A   r$   r   r@   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚInvalidBackendc                 ó,   •— t         ‰| �  d|›d�«       y )NzInvalid backend: z=, see `torch._dynamo.list_backends()` for available backends.©r,   r-   )r.   Únamer0   s     €r   r-   zInvalidBackend.__init__F   s   ø€ Ü‰ÑØ ˜xÐ'dÐeõ	
r   r1   ©r    r!   r"   r-   r5   r6   s   @r   rB   rB   E   s   ø„ ÷
ñ 
r   rB   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚResetRequiredc                 óJ   •— t         ‰| �  t        j                  d«      «       y )NzÃ
                Must call `torch._dynamo.reset()` before changing backends.  Detected two calls to
                `torch.compile()` with a different backend compiler arguments.
                )r,   r-   ÚtextwrapÚdedent)r.   r0   s    €r   r-   zResetRequired.__init__M   s!   ø€ Ü‰ÑÜ�O‰Oðóõ	
r   r1   rF   r6   s   @r   rH   rH   L   s   ø„ ÷
ñ 
r   rH   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚBackendCompilerFailedc                 ó¦   •— t        |dd«      | _        || _        d| j                  ›dt        |«      j                  › d|› �}t
        ‰| �  |«       y )Nr    Ú?zbackend=z	 raised:
z: )ÚgetattrÚbackend_nameÚinner_exceptionÚtyper    r,   r-   )r.   Ú
backend_fnrR   Úmsgr0   s       €r   r-   zBackendCompilerFailed.__init__Y   sW   ø€ Ü# J°
¸CÓ@ˆÔØ.ˆÔØ˜×*Ñ*Ð-¨Z¼¸_Ó8M×8VÑ8VÐ7WÐWYÐZiÐYjÐkˆÜ‰Ñ˜Õr   r1   rF   r6   s   @r   rM   rM   X   s   ø„ ÷ñ r   rM   c                   ó4   ‡ — e Zd Zddœdˆ fd„Zd„ Zdd„Zˆ xZS )ÚUnsupportedNr   c                óÈ   •— t         ‰| �  |«       t        j                  j                  j                  «       | _        || _        d | _        | j                  «        || _
        y r+   )r,   r-   ÚtorchÚ_guardsÚTracingContextr   Ú
real_stackrU   ÚcategoryÚadd_to_statsr   )r.   rU   r   r0   s      €r   r-   zUnsupported.__init__a   sK   ø€ Ü‰Ñ˜ÔÜŸ-™-×6Ñ6×DÑDÓFˆŒØˆŒØ'+ˆŒØ×ÑÔØ(1ˆ�r   c                 óô   — | j                   €J ‚t        | j                      | j                  xx   dz  cc<   t        | j                      | j                     dk  rt        | j                      | j                  = y y )Nr   r   ©r]   r   rU   ©r.   s    r   Úremove_from_statszUnsupported.remove_from_statsi   sc   € Ø�}‰}Ð(Ð(Ð(Ü�—‘Ñ §¡Ó)¨QÑ.Ó)Ü�D—M‘MÑ" 4§8¡8Ñ,°Ò1Ü˜Ÿ™Ñ'¨¯©Ñ1ð 2r   c                 óN   — || _         t        |   | j                  xx   dz  cc<   y )Nr   r`   )r.   r]   s     r   r^   zUnsupported.add_to_statso   s"   € Ø ˆŒÜ�Ñ˜4Ÿ8™8Ó$¨Ñ)Ô$r   r1   )Úunimplemented)r    r!   r"   r-   rb   r^   r5   r6   s   @r   rW   rW   `   s   ø„ Ø)-÷ 2ò2÷*r   rW   c                   ó   — e Zd Zy)ÚRecompileErrorNr   r#   r   r   rf   rf   t   r$   r   rf   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚArgsMismatchErrorc                 ó$   •— t         ‰| �  |«       y r+   rD   ©r.   rU   r0   s     €r   r-   zArgsMismatchError.__init__y   ó   ø€ Ü‰Ñ˜Õr   r1   rF   r6   s   @r   rh   rh   x   ó   ø„ ÷ñ r   rh   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚAttributeMutationErrorc                 ó$   •— t         ‰| �  |«       y r+   rD   rj   s     €r   r-   zAttributeMutationError.__init__~   rk   r   r1   rF   r6   s   @r   rn   rn   }   rl   r   rn   c                   ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚCondOpArgsMismatchErrorz?
    Internal error from cond() due to arguments mismatch.
    c                 ó$   •— t         ‰| �  |«       y r+   rD   rj   s     €r   r-   z CondOpArgsMismatchError.__init__‡   rk   r   r1   )r    r!   r"   Ú__doc__r-   r5   r6   s   @r   rq   rq   ‚   s   ø„ ñ÷ñ r   rq   c                   ón   — e Zd Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z	 e«       Z
y)ÚUserErrorTypeN)r    r!   r"   r   ÚDYNAMIC_CONTROL_FLOWÚANTI_PATTERNÚSTANDARD_LIBRARYÚCONSTRAINT_VIOLATIONÚDYNAMIC_DIMÚINVALID_INPUTÚINVALID_OUTPUTr#   r   r   ru   ru   ‹   s6   „ Ù›6ÐÙ“6€LÙ“vÐÙ›6ÐÙ“&€KÙ“F€MÙ“V�Nr   ru   c                   ó*   ‡ — e Zd Zddeddfˆ fd„Zˆ xZS )Ú	UserErrorNÚ
error_typer2   c                 ó¼   •— |�<t        |t        «      sJ ‚|j                  d«      r|dz  }n|dz  }|t        |«      z  }t        ‰| �  |«       || _        || _        y)aG  
        Type of errors that would be valid in Eager, but not supported in TorchDynamo.
        The error message should tell user about next actions.

        error_type: Type of user error
        msg: Actionable error message
        case_name: (Optional) Unique name (snake case) for the usage example in exportdb.
        Nú.ú ú
)Ú
isinstancer3   Úendswithr   r,   r-   r   Úmessage)r.   r   rU   r   r0   s       €r   r-   zUserError.__init__–   sd   ø€ ð Ð Ü˜i¬Ô-Ð-Ð-Ø�|‰|˜CÔ Ø�s‘
‘à�t‘�ØÔ)¨)Ó4Ñ4ˆCÜ‰Ñ˜ÔØ$ˆŒØˆ�r   r+   )r    r!   r"   ru   r-   r5   r6   s   @r   r~   r~   •   s   ø„ ñ =ð È$÷ ñ r   r~   c                   ó   — e Zd Zy)ÚSkipCodeRecursiveExceptionNr   r#   r   r   rˆ   rˆ   «   r$   r   rˆ   c                   ó   — e Zd Zy)ÚCacheLimitExceededNr   r#   r   r   rŠ   rŠ   ¯   r$   r   rŠ   c                   ó   — e Zd Zy)ÚUnsafeScriptObjectErrorNr   r#   r   r   rŒ   rŒ   ³   r$   r   rŒ   c                   ó   — e Zd Zy)ÚUncapturedHigherOrderOpErrorNr   r#   r   r   rŽ   rŽ   ·   r$   r   rŽ   c                   ó   — e Zd Zy)ÚIncorrectUsageNr   r#   r   r   r�   r�   »   r$   r   r�   c                   ó   — e Zd Zy)ÚObservedExceptionNr   r#   r   r   r’   r’   ¿   ó   „ àr   r’   c                   ó2   ‡ — e Zd ZU ee   ed<   dˆ fd„Zˆ xZS )ÚObservedUserStopIterationÚvaluec                 ód   •— t         ‰| �  d«       t        |«      dkD  r|d   | _        y d | _        y )Nzunhandled `raise StopIteration`r   )r,   r-   Úlenr–   )r.   r/   Úkwargsr0   s      €r   r-   z"ObservedUserStopIteration.__init__Ê   s.   ø€ Ü‰ÑÐ:Ô;Üˆt‹9�qŠ=Ø˜a™ˆD�JàˆD�Jr   r1   )r    r!   r"   r   r	   r4   r-   r5   r6   s   @r   r•   r•   Ä   s   ø… à�C‰=Ó÷ñ r   r•   c                   ó   — e Zd Zy)ÚObservedKeyErrorNr   r#   r   r   r›   r›   Ò   r“   r   r›   c                   ó   — e Zd Zy)ÚObservedAttributeErrorNr   r#   r   r   r�   r�   ×   r“   r   r�   c                 óˆ   — ddl m}  || «      j                  |g i «      }|j                  j	                  |«       t
        |    ‚)Nr   )ÚBuiltinVariable)Ú	variablesrŸ   Úcall_functionÚexn_vt_stackÚappendÚobserved_exception_map)ÚeÚtxÚvtrŸ   Úexception_vts        r   Úraise_observed_exceptionr©   ã   s=   € Ý*ñ # 1Ó%×3Ñ3°B¸¸BÓ?€LØ‡O�O×Ñ˜<Ô(Ü
  Ñ
#Ð#r   c                 ó8   — | j                   j                  «        y r+   )r¢   Úpop)r¦   s    r   Úhandle_observed_exceptionr¬   í   s   € ð2 ‡O�O×ÑÕr   r¥   rU   r2   c                 óŒ   — t        | |«      }t        j                  d|«       t        j	                  |«       t        || ¬«       y )Nz%s)Úfrom_exc)Úformat_error_msg_verboseÚgraph_breaks_logÚdebugÚlogÚwarningrd   )r¥   ÚcoderU   Úgraph_break_msgs       r   Úunimplemented_with_warningr¶     s6   € ô /¨q°$Ó7€OÜ×Ñ˜4 Ô1Ü‡K�K�ÔÜ�# Ö"r   )r®   r   r®   r   c                ó’   — | t         j                  j                  dd«      k7  sJ ‚|t        urt	        | |¬«      |‚t	        | |¬«      ‚)NÚBREAKFr   )ÚosÚenvironÚgetÚ_NOTHINGrW   )rU   r®   r   s      r   rd   rd   #  sE   € ð ”"—*‘*—.‘. ¨%Ó0Ò0Ð0Ð0Ø”xÑÜ˜#¨Ô3¸ÐAÜ
�c YÔ
/Ð/r   c                 óv   — t         d   | xx   dz  cc<   | t        j                  j                  dd«      k7  sJ ‚y )NÚwarningsr   r¸   F)r   r¹   rº   r»   )rU   s    r   r³   r³   ,  s4   € ÜˆZÑ˜Ó Ñ"ÓØ”"—*‘*—.‘. ¨%Ó0Ò0Ð0Ñ0r   c                   ó,   — e Zd Zdd„Zdefd„Zdefd„Zy)ÚKeyErrorMsgr2   Nc                 ó   — || _         y r+   )r–   )r.   r–   s     r   r-   zKeyErrorMsg.__init__4  s	   € Øˆ�
r   c                 ó,   — t        | j                  «      S r+   )r3   r–   ra   s    r   Ú__str__zKeyErrorMsg.__str__7  s   € Ü�4—:‘:‹Ðr   c                 ó"   — | j                  «       S r+   )rÃ   ra   s    r   Ú__repr__zKeyErrorMsg.__repr__:  s   € Ø�|‰|‹~Ðr   r1   )r    r!   r"   r-   r3   rÃ   rÅ   r#   r   r   rÀ   rÀ   3  s   „ óð˜ó ð˜#ô r   rÀ   ÚexcÚexportc                 ó´  — dd l }d | _        t        | «      }|�>t        |«      dkD  r0|d   | _        |ddj	                  |j                  |«      «      › �z  }t        j                  r,t        | d«      r |d| j                  › d| j                  › d�z  }t        j                  st        | d	«      r|d
z  }t        | d«      r~t        | j                  d«      rht        | j                  d«      r5|d| j                  j                  › d| j                  j                  › d�z  }n|d| j                  j                  › d�z  }t        j                  s|s|dz  }t        | j                  «      dk(  rdnt!        | j                  d   «      }t#        | t$        «      r%t'        ||z   «      f| j                  dd  z   | _        y ||z   }|f| j                  dd  z   | _        y )Nr   éÿÿÿÿz
from user code:
 Ú Úrecord_filenamez!
Last frame execution written to zD. To run only this frame while debugging, run torch._dynamo.replay('z').
r\   zI
Set TORCH_LOGS="+dynamo" and TORCHDYNAMO_VERBOSE=1 for more information
rR   Úminifier_pathÚbuck_commandz
Minifier script written to zW. Run this buck command to find the smallest traced graph which reproduces this error: rƒ   zQ. Run this script to find the smallest traced graph which reproduces this error.
zŽ

You can suppress this exception and fall back to eager by setting:
    import torch._dynamo
    torch._dynamo.config.suppress_errors = True
r   )Ú	tracebackÚinnermost_user_frame_summaryÚget_real_stackr˜   Újoinr   r   Úreplay_record_enabledÚhasattrrË   ÚverboserR   rÌ   rÍ   Úsuppress_errorsr/   r3   r„   ÚKeyErrorrÀ   )rÆ   rU   rÇ   rÎ   r\   Úold_msgÚnew_msgs          r   Úaugment_exc_messagerÙ   >  sæ  € Ûà'+€CÔ$ä Ó$€JØÐ¤# j£/°AÒ"5Ø+5°b©>ˆÔ(ØÐ% b§g¡g¨i×.CÑ.CÀJÓ.OÓ&PÐ%QÐRÑRˆä×#Ò#¬°Ð5FÔ(GØÐ3°C×4GÑ4GÐ3Hð IØ×+Ñ+Ð,¨Eð3ñ 	3ˆô �>Š>œg c¨<Ô8ØÐ\Ñ\ˆäˆsÐ%Ô&¬7Ø×Ñ˜_ô,ô �3×&Ñ&¨Ô7ØØ/°×0CÑ0C×0QÑ0QÐ/Rð S0à03×0CÑ0C×0PÑ0PÐ/QÐQSðUñ‰Cð Ø/°×0CÑ0C×0QÑ0QÐ/Rð S_ð _ñˆCô
 ×!Ò!©&Øð@ñ	
ˆô ˜Ÿ™“M QÒ&‰b¬C°·±¸±Ó,<€Gä�#”xÔ Ü ¨#¡Ó.Ð0°3·8±8¸A¸B°<Ñ?ˆ�à˜C‘-ˆØ�: §¡¨¨ Ñ,ˆ�r   Ú
compile_idr   c                 ó�   — d }d }| j                   �,| j                   j                  }| j                   j                  }|| _        ||fS r+   )rÏ   ÚfilenameÚlinenorÚ   )r¥   rÚ   rÜ   rÝ   s       r   Úget_exc_messagerÞ   o  sN   € ð €HØ€FØ×%Ñ%Ð1Ø×1Ñ1×:Ñ:ˆØ×/Ñ/×6Ñ6ˆØ€A„LØ�VÐÐr   c                 óv   — t        | dd «      }|€y g }|�t        t        «       «      }t        t        ||z   «      S )Nr\   )rP   Úfilter_stackr   r
   r   )rÆ   Úframer\   Ústack_above_dynamos       r   rÐ   rÐ   {  sI   € Ü˜˜l¨DÓ1€JØÐØð ÐØÐô *¬-«/Ó:Ðä”Ð0°:Ñ=Ó>Ð>r   c                 ó–   — g }| D ]A  }d|j                   v r |S d|j                   v sd|j                  v rŒ1|j                  |«       ŒC |S )NÚconvert_frameÚ
eval_frameztorch._dynamo.optimize()rÜ   Úliner£   )ÚstackÚ
user_stackrá   s      r   rà   rà   ™  s`   € Ø€JØò !ˆØ˜eŸn™nÑ,Øð
 Ðð	 ˜5Ÿ>™>Ñ)Ð-FÈ%Ï*É*Ñ-TØØ×Ñ˜%Õ ð!ð Ðr   c                 óò   — d|j                   › d|j                  › d|j                  › d�}|dz  }|t        «       z  }t	        | |«      }|�,|dz  }|dj                  t        |«      «      z  }|dz  }|dz  }|S )	NúWON'T CONVERT r‚   ú line rƒ   z.========== TorchDynamo Stack Trace ==========
zY
========== The above exception occurred while processing the following code ==========

rÊ   z
==========)Úco_nameÚco_filenameÚco_firstlinenor   rÐ   rÑ   r   )rÆ   r´   rË   rá   rU   r\   s         r   r¯   r¯   ¥  sŸ   € ð ˜Ÿ™˜ a¨×(8Ñ(8Ð'9¸À×@SÑ@SÐ?TÐTVÐWð ð ÐCÑC€CØŒ:‹<Ñ€CÜ  UÓ+€JØÐØðñ	
ˆð 	ˆr�w‰w”{ :Ó.Ó/Ñ/ˆØˆt‰ˆØˆx‰ˆà€Jr   c           	      óÔ   — t         j                  dz  }t        j                  rt	        | |||«      }|S d|j
                  › d|j                  › d|j                  › dt        «       › �}|S )Né   rê   r‚   rë   z 
due to: 
)	r¹   Úlinesepr   rÔ   r¯   rì   rí   rî   r   )rÆ   r´   rË   rá   rU   s        r   Úformat_error_msgrò   ½  so   € Ü
�*‰*�q‰.€Cä‡~‚~Ü& s¨D°/À5ÓIˆð
 €Jð ˜tŸ|™|˜n¨A¨d×.>Ñ.>Ð-?ð @Ø×ÑÐ˜=¬«¨ð8ˆð €Jr   )rƒ   Fr+   )NN)Yr¹   rJ   Úenumr   r   rÎ   r   r   r   r   Útypingr	   r
   r   r   r   r   Útorch._guardsrY   rÊ   r   Úutilsr   r   r   ÚloggingÚ	getLoggerr    r²   Ú_loggingÚgetArtifactLoggerr°   ÚRuntimeErrorr   r&   r(   r8   r:   r<   r>   r@   rB   rH   rM   rW   rf   rh   rn   rq   ru   r~   rˆ   rŠ   rŒ   rŽ   Ú	Exceptionr�   r’   r•   r›   r�   ÚStopIterationrÖ   ÚAttributeErrorr¤   r©   r¬   Ú_subclassesÚfake_tensorÚDataDependentOutputExceptionÚDynamicOutputShapeExceptionÚUnsupportedOperatorExceptionÚUnsupportedFakeTensorExceptionÚ!exceptions_allowed_to_be_fallbackr3   r¶   Úobjectr¼   rd   r³   rÀ   ÚboolrÙ   ÚintrÞ   rÐ   rà   r¯   rò   r#   r   r   ú<module>r	     sI  ðã 	Û ß ß JÓ Jß F× Fã å Ý ñ Ý'òó ð €g×Ñ˜Ó!€Ø—>‘>×3Ñ3°H¸nÓMÐ ô	˜<ô 	ô	Ð3ô 	ô Ð*ô  ô	 ô 	ô	 /ô 	ô	 ô 	ô	Ð$ô 	ô	Ð,ô 	ô
Ð)ô 
ô	
Ð(ô 	
ôÐ0ô ô*Ð&ô *ô(	Ð)ô 	ô˜ô ô
˜[ô ô
Ð/ô ô�Dô ô�ô ô,	Ð!5ô 	ô	Ð3°[ô 	ô	Ð2ô 	ô	Ð#7ô 	ô	�Yô 	ô	Ð,ô 	ô
Ð 1ô ô	Ð(ô 	ô
	Ð.ô 	ð Ð,ØÐØÐ*ðÐ ò$òð< 
×Ñ×!Ñ!×>Ñ>Ø	×Ñ×!Ñ!×=Ñ=Ø	×Ñ×!Ñ!×>Ñ>Ø	×Ñ×!Ñ!×@Ñ@ð	%Ð !ð# )ð #¸ð #Àó #ñ ‹8€ð "*Àdò0Ø	ð0Øð0Ø6>¸s±mð0àó0ð1�ð 1˜ó 1÷ñ ñ.-˜Yð .-¨Sð .-Àð .-ÐRVó .-ðb	Øð	Ø)ð	à
ˆ8�C‰=˜( 3™-Ð'Ñ(ó	ñ?˜	ð ?°(¸<Ñ2Hó ?ò<	ð 7;ñØ	ðàóñ0	˜)ð 	ÐPSô 	r   