a
    њhO                     @   sL   d dgZ ddlmZ ddlT G dd deZG dd dZG dd  d Zd	S )
ScannerScannerError   )MarkedYAMLError)*c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r	   r	   G/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/yaml/scanner.pyr       s   c                   @   s   e Zd Zdd ZdS )	SimpleKeyc                 C   s(   || _ || _|| _|| _|| _|| _d S N)token_numberrequiredindexlinecolumnmark)selfr   r   r   r   r   r   r	   r	   r
   __init__&   s    zSimpleKey.__init__N)r   r   r   r   r	   r	   r	   r
   r   #   s   r   c                   @   sz  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~dddddddddddddddddZAddddZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdS )r   c                 C   s<   d| _ d| _g | _|   d| _d| _g | _d| _i | _dS )zInitialize the scanner.F    TN)	done
flow_leveltokensfetch_stream_starttokens_takenindentindentsallow_simple_keypossible_simple_keysr   r	   r	   r
   r   0   s    zScanner.__init__c                 G   sD   |   r|   q | jr@|s dS |D ]}t| jd |r$ dS q$dS )NTr   F)need_more_tokensfetch_more_tokensr   
isinstance)r   choiceschoicer	   r	   r
   check_tokenq   s    
zScanner.check_tokenc                 C   s*   |   r|   q | jr"| jd S d S d S )Nr   )r!   r"   r   r    r	   r	   r
   
peek_token}   s
    

zScanner.peek_tokenc                 C   s6   |   r|   q | jr2|  jd7  _| jdS d S )Nr   r   )r!   r"   r   r   popr    r	   r	   r
   	get_token   s
    
zScanner.get_tokenc                 C   s2   | j r
dS | jsdS |   |  | jkr.dS d S )NFT)r   r   stale_possible_simple_keysnext_possible_simple_keyr   r    r	   r	   r
   r!      s    zScanner.need_more_tokensc                 C   s  |    |   | | j |  }|dkr4|  S |dkrL|  rL|  S |dkrd|  rd| 	 S |dkr|| 
 r||  S |dkr|  S |dkr|  S |dkr|  S |dkr|  S |d	kr|  S |dkr|  r|  S |d
kr|  r|  S |dkr|  r|  S |dkr*|  S |dkr<|  S |dkrN|  S |dkrh| jsh|  S |dkr| js|  S |dkr|  S |dkr|  S |  r|   S t!dd d| | " d S )N %-.[{]},?:r   &!|>'"z!while scanning for the next tokenz.found character %r that cannot start any token)#scan_to_next_tokenr*   unwind_indentr   peekfetch_stream_endcheck_directivefetch_directivecheck_document_startfetch_document_startcheck_document_endfetch_document_endfetch_flow_sequence_startfetch_flow_mapping_startfetch_flow_sequence_endfetch_flow_mapping_endfetch_flow_entrycheck_block_entryfetch_block_entry	check_key	fetch_keycheck_valuefetch_valuefetch_aliasfetch_anchor	fetch_tagr   fetch_literalfetch_foldedfetch_singlefetch_doublecheck_plainfetch_plainr   get_markr   chr	   r	   r
   r"      s`    	





zScanner.fetch_more_tokensc                 C   s6   d }| j D ]&}| j | }|d u s*|j|k r
|j}q
|S r   )r   r   )r   Zmin_token_numberlevelkeyr	   r	   r
   r+     s    

z Scanner.next_possible_simple_keyc                 C   s\   t | jD ]L}| j| }|j| jks4| j|j dkr
|jrNtd|jd|  | j|= q
d S )Ni   while scanning a simple keycould not find expected ':')listr   r   r   r   r   r   r[   )r   r^   r_   r	   r	   r
   r*     s    
z"Scanner.stale_possible_simple_keysc                 C   s^   | j  o| j| jk}| jrZ|   | jt| j }t||| j	| j
| j|  }|| j| j < d S r   )r   r   r   r   remove_possible_simple_keyr   lenr   r   r   r   r[   r   )r   r   r   r_   r	   r	   r
   save_possible_simple_key'  s    z Scanner.save_possible_simple_keyc                 C   s@   | j | jv r<| j| j  }|jr2td|jd|  | j| j = d S )Nr`   ra   )r   r   r   r   r   r[   )r   r_   r	   r	   r
   rc   8  s    z"Scanner.remove_possible_simple_keyc                 C   s@   | j r
d S | j|kr<|  }| j | _| jt|| q
d S r   )r   r   r[   r   r(   r   appendZBlockEndToken)r   r   r   r	   r	   r
   r>   E  s    
zScanner.unwind_indentc                 C   s&   | j |k r"| j| j  || _ dS dS )NTF)r   r   rf   )r   r   r	   r	   r
   
add_indent]  s
    
zScanner.add_indentc                 C   s$   |   }| jt||| jd d S )N)encoding)r[   r   rf   ZStreamStartTokenrh   r   r   r	   r	   r
   r   g  s    zScanner.fetch_stream_startc                 C   sB   |  d |   d| _i | _|  }| jt|| d| _d S )Nr   FT)	r>   rc   r   r   r[   r   rf   ZStreamEndTokenr   ri   r	   r	   r
   r@   s  s    
zScanner.fetch_stream_endc                 C   s,   |  d |   d| _| j|   d S )Nr   F)r>   rc   r   r   rf   scan_directiver    r	   r	   r
   rB     s    
zScanner.fetch_directivec                 C   s   |  t d S r   )fetch_document_indicatorZDocumentStartTokenr    r	   r	   r
   rD     s    zScanner.fetch_document_startc                 C   s   |  t d S r   )rk   ZDocumentEndTokenr    r	   r	   r
   rF     s    zScanner.fetch_document_endc                 C   sH   |  d |   d| _|  }| d |  }| j||| d S )Nr   F   )r>   rc   r   r[   forwardr   rf   r   
TokenClass
start_markend_markr	   r	   r
   rk     s    

z Scanner.fetch_document_indicatorc                 C   s   |  t d S r   )fetch_flow_collection_startZFlowSequenceStartTokenr    r	   r	   r
   rG     s    z!Scanner.fetch_flow_sequence_startc                 C   s   |  t d S r   )rr   ZFlowMappingStartTokenr    r	   r	   r
   rH     s    z Scanner.fetch_flow_mapping_startc                 C   sJ   |    |  jd7  _d| _|  }|   |  }| j||| d S )Nr   T)re   r   r   r[   rm   r   rf   rn   r	   r	   r
   rr     s    z#Scanner.fetch_flow_collection_startc                 C   s   |  t d S r   )fetch_flow_collection_endZFlowSequenceEndTokenr    r	   r	   r
   rI     s    zScanner.fetch_flow_sequence_endc                 C   s   |  t d S r   )rs   ZFlowMappingEndTokenr    r	   r	   r
   rJ     s    zScanner.fetch_flow_mapping_endc                 C   sJ   |    |  jd8  _d| _|  }|   |  }| j||| d S )Nr   F)rc   r   r   r[   rm   r   rf   rn   r	   r	   r
   rs     s    z!Scanner.fetch_flow_collection_endc                 C   s<   d| _ |   |  }|   |  }| jt|| d S NT)r   rc   r[   rm   r   rf   ZFlowEntryToken)r   rp   rq   r	   r	   r
   rK     s    zScanner.fetch_flow_entryc                 C   s   | j sF| jstd d d|  | | jrF|  }| jt|| n d| _| 	  |  }| 
  |  }| jt|| d S )Nz%sequence entries are not allowed hereT)r   r   r   r[   rg   r   r   rf   ZBlockSequenceStartTokenrc   rm   ZBlockEntryTokenr   r   rp   rq   r	   r	   r
   rM     s    zScanner.fetch_block_entryc                 C   s   | j sD| jstd d d|  | | jrD|  }| jt|| | j  | _| 	  |  }| 
  |  }| jt|| d S )Nz!mapping keys are not allowed here)r   r   r   r[   rg   r   r   rf   BlockMappingStartTokenrc   rm   KeyTokenru   r	   r	   r
   rO     s    
zScanner.fetch_keyc                 C   s  | j | jv r|| j| j  }| j| j = | j|j| j t|j|j | j st| |j	rt| j|j| j t
|j|j d| _n\| j s| jstd d d|  | j s| | j	r|  }| jt
|| | j  | _|   |  }|   |  }| jt|| d S )NFz#mapping values are not allowed here)r   r   r   insertr   r   rw   r   rg   r   rv   r   r   r[   rf   rc   rm   Z
ValueToken)r   r_   r   rp   rq   r	   r	   r
   rQ   !  s8    

zScanner.fetch_valuec                 C   s$   |    d| _| j| t d S NF)re   r   r   rf   scan_anchorZ
AliasTokenr    r	   r	   r
   rR   Y  s    zScanner.fetch_aliasc                 C   s$   |    d| _| j| t d S ry   )re   r   r   rf   rz   ZAnchorTokenr    r	   r	   r
   rS   d  s    zScanner.fetch_anchorc                 C   s"   |    d| _| j|   d S ry   )re   r   r   rf   scan_tagr    r	   r	   r
   rT   o  s    zScanner.fetch_tagc                 C   s   | j dd d S )Nr9   stylefetch_block_scalarr    r	   r	   r
   rU   z  s    zScanner.fetch_literalc                 C   s   | j dd d S )Nr:   r|   r~   r    r	   r	   r
   rV   }  s    zScanner.fetch_foldedc                 C   s$   d| _ |   | j| | d S rt   )r   rc   r   rf   scan_block_scalarr   r}   r	   r	   r
   r     s    zScanner.fetch_block_scalarc                 C   s   | j dd d S )Nr;   r|   fetch_flow_scalarr    r	   r	   r
   rW     s    zScanner.fetch_singlec                 C   s   | j dd d S )Nr<   r|   r   r    r	   r	   r
   rX     s    zScanner.fetch_doublec                 C   s$   |    d| _| j| | d S ry   )re   r   r   rf   scan_flow_scalarr   r	   r	   r
   r     s    zScanner.fetch_flow_scalarc                 C   s"   |    d| _| j|   d S ry   )re   r   r   rf   
scan_plainr    r	   r	   r
   rZ     s    zScanner.fetch_plainc                 C   s   | j dkrdS d S )Nr   T)r   r    r	   r	   r
   rA     s    
zScanner.check_directivec                 C   s.   | j dkr*| ddkr*| ddv r*dS d S )Nr   rl   ---     	
  Tr   prefixr?   r    r	   r	   r
   rC     s
    
zScanner.check_document_startc                 C   s.   | j dkr*| ddkr*| ddv r*dS d S )Nr   rl   ...r   Tr   r    r	   r	   r
   rE     s
    
zScanner.check_document_endc                 C   s   |  ddv S )Nr   r   )r?   r    r	   r	   r
   rL     s    zScanner.check_block_entryc                 C   s   | j r
dS | ddv S d S NTr   r   r   r?   r    r	   r	   r
   rN     s    zScanner.check_keyc                 C   s   | j r
dS | ddv S d S r   r   r    r	   r	   r
   rP     s    zScanner.check_valuec                 C   s6   |   }|dvp4|  ddvo4|dkp4| j o4|dv S )Nu      	
  -?:,[]{}#&*!|>'"%@`r   r   r.   z?:)r?   r   r\   r	   r	   r
   rY     s
    zScanner.check_plainc                 C   s~   | j dkr|  dkr|   d}|sz|  dkr<|   q&|  dkr^|  dvr^|   qH|  rt| jsxd| _q"d}q"d S )Nr   u   ﻿F #    
  T)r   r?   rm   scan_line_breakr   r   )r   foundr	   r	   r
   r=     s    

zScanner.scan_to_next_tokenc                 C   s   |   }|   | |}d }|dkr:| |}|   }n:|dkrV| |}|   }n|   }|  dvrt|   q^| | t||||S )NYAMLZTAGr   )r[   rm   scan_directive_namescan_yaml_directive_valuescan_tag_directive_valuer?   scan_directive_ignored_lineZDirectiveToken)r   rp   namevaluerq   r	   r	   r
   rj     s    






zScanner.scan_directivec                 C   s   d}|  |}d|  kr"dksXn d|  kr8dksXn d|  krNdksXn |dv rl|d	7 }|  |}q|std
|d| |  | |}| | |   }|dvrtd
|d| |  |S )Nr   09AZaz-_r   while scanning a directive6expected alphabetic or numeric character, but found %r     
  )r?   r   r[   r   rm   )r   rp   lengthr]   r   r	   r	   r
   r   &  s2    
B

zScanner.scan_directive_namec                 C   s   |   dkr|   q | |}|   dkrFtd|d|    |  |   | |}|   dvr~td|d|    |  ||fS )Nr   r/   r   z%expected a digit or '.', but found %rr   z%expected a digit or ' ', but found %r)r?   rm   scan_yaml_directive_numberr   r[   )r   rp   majorminorr	   r	   r
   r   ;  s     




z!Scanner.scan_yaml_directive_valuec                 C   s|   |   }d|  krdks4n td|d| |  d}d|  |  krRdkr`n n
|d7 }q8t| |}| | |S )Nr   r   r   zexpected a digit, but found %rr   r   )r?   r   r[   intr   rm   )r   rp   r]   r   r   r	   r	   r
   r   L  s    

z"Scanner.scan_yaml_directive_numberc                 C   sH   |   dkr|   q | |}|   dkr6|   q | |}||fS )Nr   )r?   rm   scan_tag_directive_handlescan_tag_directive_prefix)r   rp   handler   r	   r	   r
   r   Y  s    



z Scanner.scan_tag_directive_valuec                 C   s6   |  d|}|  }|dkr2td|d| |  |S )N	directiver   r   expected ' ', but found %r)scan_tag_handler?   r   r[   r   rp   r   r]   r	   r	   r
   r   c  s    z!Scanner.scan_tag_directive_handlec                 C   s6   |  d|}|  }|dvr2td|d| |  |S )Nr   r   r   r   )scan_tag_urir?   r   r[   r   r	   r	   r
   r   l  s    z!Scanner.scan_tag_directive_prefixc                 C   sj   |   dkr|   q |   dkr8|   dvr8|   q"|   }|dvr^td|d| |  |   d S )Nr   r   r   r   0expected a comment or a line break, but found %rr?   rm   r   r[   r   r   rp   r]   r	   r	   r
   r   u  s    

z#Scanner.scan_directive_ignored_linec           	      C   s  |   }|  }|dkrd}nd}|   d}| |}d|  krLdksn d|  krbdksn d	|  krxd
ksn |dv r|d7 }| |}q8|std| |d| |   | |}| | |  }|dvrtd| |d| |   |   }||||S )Nr   aliasanchorr   r   r   r   r   r   r   r   r   zwhile scanning an %sr   u     	
  ?:,]}%@`)r[   r?   rm   r   r   )	r   ro   rp   Z	indicatorr   r   r]   r   rq   r	   r	   r
   rz     s@    	
B



zScanner.scan_anchorc           	      C   s"  |   }| d}|dkrdd }| d | d|}|  dkrZtd|d|   |   |   nz|dv r~d }d	}|   n`d}d
}|dvr|d	krd}q|d7 }| |}qd	}|r| d|}nd	}|   | d|}|  }|dvrtd|d| |   ||f}|   }t|||S )Nr   <   tagr:   zwhile parsing a tagzexpected '>', but found %rr   r8   Fr   Tzwhile scanning a tagr   )r[   r?   rm   r   r   r   ZTagToken)	r   rp   r]   r   suffixr   Z
use_handler   rq   r	   r	   r
   r{     sL    





zScanner.scan_tagc                 C   s  |dkrd}nd}g }|   }|   | |\}}| | | jd }|dk rTd}|d u rv|  \}}	}
t||	}n|| d }| |\}}
d}| j|krr| 	 dkrr|
| | 	 dv}d}| 	|d	vr|d7 }q|| | | | |  }| |\}}
| j|krr| 	 dkrr|r`|d
kr`|r`| 	 dvr`|sj|d n
|| qqrq|dur|| |du r|
| td|d||
|S )Nr:   TFr    r,    	r   r   
r   )r[   rm   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner   scan_block_scalar_indentationmaxscan_block_scalar_breaksr   r?   extendrf   r   r   ScalarTokenjoin)r   r}   foldedchunksrp   chomping	incrementZ
min_indentbreaks
max_indentrq   r   
line_breakZleading_non_spacer   r	   r	   r
   r     sX    









zScanner.scan_block_scalarc                 C   s   d }d }|   }|dv rn|dkr&d}nd}|   |   }|dv rt|}|dkrdtd|d|  |   n\|dv rt|}|dkrtd|d|  |   |   }|dv r|dkrd}nd}|   |   }|d	vrtd|d
| |  ||fS )Nz+-+TF
0123456789r   while scanning a block scalarz<expected indentation indicator in the range 1-9, but found 0r   z9expected chomping or indentation indicators, but found %r)r?   rm   r   r   r[   )r   rp   r   r   r]   r	   r	   r
   r     sP    
z$Scanner.scan_block_scalar_indicatorsc                 C   sj   |   dkr|   q |   dkr8|   dvr8|   q"|   }|dvr^td|d| |  |   d S )Nr   r   r   r   r   r   r   r	   r	   r
   r   D  s    

z&Scanner.scan_block_scalar_ignored_linec                 C   sd   g }d}|   }|  dv rZ|  dkr@||   |   }q|   | j|kr| j}q|||fS )Nr       
  r   )r[   r?   rf   r   rm   r   )r   r   r   rq   r	   r	   r
   r   R  s    

z%Scanner.scan_block_scalar_indentationc                 C   sx   g }|   }| j|k r,|  dkr,|   q|  dv rp||   |   }| j|k r,|  dkr,|   qNq,||fS )Nr   
   
  )r[   r   r?   rm   rf   r   )r   r   r   rq   r	   r	   r
   r   a  s    
z Scanner.scan_block_scalar_breaksc                 C   s   |dkrd}nd}g }|   }|  }|   || || |  |krr|| || || || q@|   |   }td|d|||S )Nr<   TFr   )r[   r?   rm   r   scan_flow_scalar_non_spacesscan_flow_scalar_spacesr   r   )r   r}   doubler   rp   quoterq   r	   r	   r
   r   n  s     zScanner.scan_flow_scalarr,   	r   r   r<   \/       u    u    )r   r   btr   nvfrer   r<   r   r   N_LPr         )xuUc              	   C   s  g }d}|  |dvr |d7 }q|r>|| | | | |   }|sv|dkrv|  ddkrv|d | d q|r|dks|s|dv r|| |   q|r|dkr|   |   }|| jv r|| j|  |   n|| jv rn| j| }|   t|D ]6}|  |dvrtd	|d
||  |f |  qt	| |d}|t
| | | n<|dv r|   || || ntd	|d| |  q|S qd S )Nr   u   '"\  	
  r   r;   r   z"\r   0123456789ABCDEFabcdefz%while scanning a double-quoted scalarz@expected escape sequence of %d hexadecimal numbers, but found %r   r   z!found unknown escape character %r)r?   rf   r   rm   ESCAPE_REPLACEMENTSESCAPE_CODESranger   r[   r   chrr   r   scan_flow_scalar_breaks)r   r   rp   r   r   r]   kcoder	   r	   r
   r     sR    








z#Scanner.scan_flow_scalar_non_spacesc           	      C   s   g }d}|  |dv r |d7 }q| |}| | |   }|dkrXtd|d|  nT|dv r|  }| ||}|dkr|| n|s|d	 || n
|| |S )
Nr   r   r   r,   while scanning a quoted scalarzfound unexpected end of streamr   r   r   )	r?   r   rm   r   r[   r   r   rf   r   )	r   r   rp   r   r   whitespacesr]   r   r   r	   r	   r
   r     s*    




zScanner.scan_flow_scalar_spacesc                 C   sz   g }|  d}|dks|dkr>| ddv r>td|d|  |  dv rT|   q>|  dv rp||   q|S qd S )	Nrl   r   r   r   r   z#found unexpected document separatorr   r   )r   r?   r   r[   rm   rf   r   )r   r   rp   r   r   r	   r	   r
   r     s    

zScanner.scan_flow_scalar_breaksc                 C   s  g }|   }|}| jd }g }d}|  dkr0q| |}|dv s|dkrj| |d d| jrbdnd v s| jrz|dv rzq|d7 }q0|dkrqd	| _|| || | | | |   }| 	||}|r|  dks| js| j
|k rqqtd|d
||S )Nr   r   r   r   r6   z,[]{}r   z,?[]{}FT)r[   r   r?   r   r   r   rf   r   rm   scan_plain_spacesr   r   r   )r   r   rp   rq   r   spacesr   r]   r	   r	   r
   r     sJ    




zScanner.scan_plainc           
      C   s&  g }d}|  |dv r |d7 }q| |}| | |   }|dv r|  }d| _| d}|dksn|dkr|  dd	v rd S g }	|   d
v r|   dkr|   q|	|   | d}|dks|dkr|  dd	v rd S q|dkr|| n|	s|d ||	 n|r"|| |S )Nr   r   r   r   Trl   r   r   r   r   r   )r?   r   rm   r   r   rf   r   )
r   r   rp   r   r   r   r]   r   r   r   r	   r	   r
   r     sB    








zScanner.scan_plain_spacesc                 C   s   |   }|dkr*td| |d| |  d}|  |}|dkrd|  krTdksn d|  krjd	ksn d
|  krdksn |dv r|d7 }|  |}q@|dkr| | td| |d| |  |d7 }| |}| | |S )Nr8   while scanning a %szexpected '!', but found %rr   r   r   r   r   r   r   r   r   )r?   r   r[   rm   r   )r   r   rp   r]   r   r   r	   r	   r
   r   D  s,    

B



zScanner.scan_tag_handlec                 C   s   g }d}|  |}d|  kr&dks\n d|  kr<dks\n d|  krRdks\n |dv r|d	kr|| | | | d}|| || n|d
7 }|  |}q|r|| | | | d}|std| |d| |  d|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%r-   r   zwhile parsing a %szexpected URI, but found %rr   )r?   rf   r   rm   scan_uri_escapesr   r[   r   )r   r   rp   r   r   r]   r	   r	   r
   r   \  s,    
B


zScanner.scan_tag_uric              
   C   s   g }|   }|  dkr~|   tdD ]2}| |dvr(td| |d| | |   q(|t| dd | d qzt|	d}W n: t
y } z"td| |t||W Y d }~n
d }~0 0 |S )Nr-   r   r   r   zCexpected URI escape sequence of 2 hexadecimal numbers, but found %rr   zutf-8)r[   r?   rm   r   r   rf   r   r   bytesdecodeUnicodeDecodeErrorstr)r   r   rp   codesr   r   r   excr	   r	   r
   r   u  s&    
,zScanner.scan_uri_escapesc                 C   sN   |   }|dv r6| ddkr*| d n|   dS |dv rJ|   |S dS )Nu   
r   z
r   u     r   )r?   r   rm   r\   r	   r	   r
   r     s    	zScanner.scan_line_breakN)Lr   r   r   r   r&   r'   r)   r!   r"   r+   r*   re   rc   r>   rg   r   r@   rB   rD   rF   rk   rG   rH   rr   rI   rJ   rs   rK   rM   rO   rQ   rR   rS   rT   rU   rV   r   rW   rX   r   rZ   rA   rC   rE   rL   rN   rP   rY   r=   rj   r   r   r   r   r   r   r   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   .   s   A

l
!8

#
		$)L(+)%N)__all__errorr   r   r   r   r   r	   r	   r	   r
   <module>   s
   