
    Z jd                        S SK r S SKJr  S SKrS SKJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJrJr  SSKJr  SSKJrJrJrJr  SSKJ r   SSK!J"r"  SSK#J$r$J%r%  SSK&J'r'J(r(  \RR                  " \*5      r+  S-S\RX                  S\RZ                  S\RZ                  S\RZ                  S\RZ                  S-  S\.S-  S\.4S jjr/ " S S\RX                  5      r0 " S S \5      r1\ " S! S"\5      5       r2\" S#S$9 " S% S&\25      5       r3 " S' S(\RX                  5      r4\" S)S$9 " S* S+\2\5      5       r5/ S,Qr6g).    N)Callable)nn   )ACT2FN)CacheEncoderDecoderCache)GenerationMixin)create_bidirectional_mask)FlashAttentionKwargs)GradientCheckpointingLayer)BaseModelOutputWithPoolingCausalLMOutputWithPast)ALL_ATTENTION_FUNCTIONSPreTrainedModel)Unpack)TransformersKwargsauto_docstringcan_return_tuplelogging)merge_with_config_defaults)capture_outputs   )	AutoModelAutoModelForCausalLM   )AudioFlamingo3ConfigAudioFlamingo3EncoderConfigmodulequerykeyvalueattention_maskscalingdropoutc                    Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X-   n[        R
                  R                  USS9n[        R
                  R                  XU R                  S9n[        R                  " X5      n	U	R                  SS5      R                  5       n	X4$ )N      r   r   )dimptrainingr   )
sizetorchmatmul	transposer   
functionalsoftmaxr$   r+   
contiguous)
r   r   r    r!   r"   r#   r$   kwargsattn_weightsattn_outputs
             ڋ/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/audioflamingo3/modeling_audioflamingo3.pyeager_attention_forwardr7   /   s     **R.D(<<}}Q':;gEL!#4==((2(>L==((6??([L,,|3K''1-88:K$$    c                   L  ^  \ rS rSrSr      SS\S\S\S\S\S	\S
\S-  S\S-  4U 4S jjjr	    SS\
R                  S\
R                  S-  S\S-  S\
R                  S-  S\S\\   S\\
R                  \
R                  S-  \\
R                     S-  4   4S jjrSrU =r$ )AudioFlamingo3AttentionI   z=Multi-headed attention from 'Attention Is All You Need' paperN	embed_dim	num_headsr$   
is_decoderbias	is_causal	layer_idxconfigc	                 `  > [         T	U ]  5         Xl        X l        X0l        X-  U l        Xl        U R
                  U-  U R                  :w  a  [        SU R                   SU S35      eU R
                  S-  U l        X@l	        X`l
        Uc4  U(       a-  [        R                  SU R                  R                   S35        Xpl        [         R"                  " XSS9U l        [         R"                  " XUS9U l        [         R"                  " XUS9U l        [         R"                  " XUS9U l        g )	Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r'   zInstantiating a decoder z without passing `layer_idx` is not recommended and will to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.Fr?   )super__init__r<   r=   r$   head_dimrB   
ValueErrorr#   r>   r@   loggerwarning_once	__class____name__rA   r   Lineark_projv_projq_projout_proj)
selfr<   r=   r$   r>   r?   r@   rA   rB   rK   s
            r6   rF    AudioFlamingo3Attention.__init__L   s    	""!.MMI%$..8MdnnM]$YKr3  }}d*$"*4>>+B+B*C D, ,
 #ii	5Aii	4@ii	4@		)TBr8   hidden_stateskey_value_statespast_key_valuesr"   output_attentionsr3   returnc                 8   USLnUR                   SS n/ UQSPU R                  P7n	U R                  U5      U R                  -  R	                  U	5      R                  SS5      R                  5       n
Ubs  [        U[        5      (       a^  UR                  R                  U R                  5      nU(       a&  SUR                  U R                  '   UR                  nOUR                  nUb  UOUnU(       aU  U(       aN  W(       aG  UR                  U R                     R                  nUR                  U R                     R                   nOUS   SU R"                  U R                  4nU R%                  U5      R	                  U5      R                  SS5      R                  5       nU R'                  U5      R	                  U5      R                  SS5      R                  5       nUb  UR)                  XU R                  5      u  p[*        R,                  " U R.                  R0                  [2        5      nU" U U
UUU4U R4                  (       d  SOU R6                  SUS	.UD6u  nnUR8                  " / UQSP76 R                  5       nU R;                  U5      nUU4$ )
z#Input shape: Batch x Time x ChannelNr&   r   r   Tr                 ?)r$   r#   rW   )shaperG   rP   r#   viewr/   r2   
isinstancer   
is_updatedgetrA   cross_attention_cacheself_attention_cachelayerskeysvaluesr=   rN   rO   updater   get_interfacerB   _attn_implementationr7   r+   r$   reshaperQ   )rR   rT   rU   rV   r"   rW   r3   is_cross_attentioninput_shapehidden_shapequery_statesr_   current_states
key_statesvalue_stateskv_shapeattention_interfacer5   r4   s                      r6   forwardAudioFlamingo3Attention.forwardt   s]    .T9#))#2.88b8$--8 M2T\\AGGU__`acdeppr &:oGZ+[+[(3377GJ!=A**4>>:"1"G"G"1"F"F .>-I)}/j(//?DDJ*11$..AHHL
 $ADNNDMMJH^499(CMMaQRS^^`J;;~6;;HEOOPQSTU``bL*+:+A+A*\`\j\j+k(
(?(M(MKK,,.E)
 %8
%
  $}}C$,,/
%
 
%
!\ "));;;;FFHmmK0L((r8   )rB   r$   r<   rG   r@   r>   rN   rA   r=   rQ   rP   r#   rO   )rZ   FTFNN)NNNF)rL   
__module____qualname____firstlineno____doc__intfloatboolr   rF   r-   Tensorr   r   r   tuplers   __static_attributes____classcell__rK   s   @r6   r:   r:   I   s2   G   $.2&C&C &C 	&C
 &C &C &C :&C %t+&C &CV 15(,.2"'H)||H)  ,,-H) 	H)
 t+H)  H) -.H) 
u||U\\D0%2E2LL	MH) H)r8   r:   c                      ^  \ rS rSrS\4U 4S jjrS\R                  S\R                  S\\	   S\R                  4S jr
S	rU =r$ )
AudioFlamingo3EncoderLayer   rB   c                 j  > [         TU ]  5         UR                  U l        [	        U R                  UR
                  UR                  US9U l        [        R                  " U R                  5      U l
        UR                  U l        [        UR                     U l        UR                  U l        [        R                   " U R                  UR"                  5      U l        [        R                   " UR"                  U R                  5      U l        [        R                  " U R                  5      U l        g )N)r<   r=   r$   rB   )rE   rF   d_modelr<   r:   encoder_attention_headsattention_dropout	self_attnr   	LayerNormself_attn_layer_normr$   r   activation_functionactivation_fnactivation_dropoutrM   encoder_ffn_dimfc1fc2final_layer_normrR   rB   rK   s     r6   rF   #AudioFlamingo3EncoderLayer.__init__   s    0nn44,,	
 %'LL$@!~~#F$>$>?"(";";99T^^V-C-CD99V33T^^D "T^^ <r8   rT   r"   r3   rX   c                    UnU R                  U5      nU R                  " SUUS.UD6u  p[        R                  R	                  XR                  U R
                  S9nXA-   nUnU R                  U5      nU R                  U R                  U5      5      n[        R                  R	                  XR                  U R
                  S9nU R                  U5      n[        R                  R	                  XR                  U R
                  S9nXA-   nUR                  [        R                  :X  aC  [        R                  " UR                  5      R                  S-
  n[        R                   " X* US9nU$ )a  
Args:
    hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
    attention_mask (`torch.FloatTensor`): attention mask of size
        `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
)rT   r"   r)   i  )minmax )r   r   r   r0   r$   r+   r   r   r   r   r   dtyper-   float16finfor   clamp)rR   rT   r"   r3   residual_clamp_values          r6   rs   "AudioFlamingo3EncoderLayer.forward   sD    !11-@>> 
')
 

 --m||VZVcVc-d 0 --m<**488M+BC--m?V?Vaeanan-o/--m||VZVcVc-d 0%--/++m&9&9:>>EK!KK<[YMr8   )	r   r   r$   r<   r   r   r   r   r   )rL   ru   rv   rw   r   rF   r-   r|   r   r   rs   r~   r   r   s   @r6   r   r      sR    =3 =$"||" " +,	"
 
" "r8   r   c                   >    \ rS rSr% \\S'   SrSrSrS/r	Sr
SrSrSrg	)
AudioFlamingo3PreTrainedModel   rB   model)audiotextTr:   rV   r   N)rL   ru   rv   rw   r   __annotations__base_model_prefixinput_modalitiessupports_gradient_checkpointing_no_split_modules_skip_keys_device_placement_supports_flash_attn_supports_sdpar~   r   r8   r6   r   r      s4      (&*#23"3Nr8   r   zT
    The audio model from AudioFlamingo3 without any head or projection on top.
    custom_introc            
       (  ^  \ rS rSr% Sr\\S'   SrSrS/r	\
\S.rS\4U 4S jjrS	 rS
\R                   4S jrS\R                   4S jr\\ SS\R,                  S\R,                  S-  S
\\-  4S jj5       5       rS\R4                  4S jrSrU =r$ )AudioFlamingo3Encoderi  zQ
AudioFlamingo3 encoder: Whisper encoder, average pool (time/2), then LayerNorm.
rB   input_featuresr   r   )rT   
attentionsc                 l  > [         TU ]  U5        UR                  U l        UR                  U l        UR
                  nUR                  U l        UR                  U l        UR                  (       a  [        R                  " U5      OSU l        [        R                  " U R                  USSS9U l        [        R                  " X"SSSS9U l        [        R                   " U R                  U5      U l        U R"                  R%                  S5        [        R&                  " [)        UR*                  5       Vs/ s H  n[-        U5      PM     sn5      U l        [        R0                  " UR
                  5      U l        [        R4                  " SSS9U l        SU l        U R;                  5         g s  snf )	Nr[   r   r   )kernel_sizepaddingr   )r   strider   F)r   )rE   rF   r$   encoder_layerdrop	layerdropr   num_mel_binsmax_source_positionsscale_embeddingmathsqrtembed_scaler   Conv1dconv1conv2	Embeddingembed_positionsrequires_grad_
ModuleListrangeencoder_layersr   rc   r   
layer_norm	AvgPool1d
avg_poolergradient_checkpointing	post_init)rR   rB   r<   r   rK   s       r6   rF   AudioFlamingo3Encoder.__init__  s;    ~~11NN	"//$*$?$?!393I3I499Y/sYYt00)TUV
YYy1VWX
!||D,E,EyQ++E2mmQVW]WlWlQm$nQmA%?%GQm$no,,v~~6,,q3&+# %os   9F1c                 N    U R                  5        H
  nSUl        M     SU l        g )NF)
parametersrequires_grad_requires_grad)rR   params     r6   _freeze_parameters(AudioFlamingo3Encoder._freeze_parameters1  s#    __&E"'E '#r8   rX   c                     U R                   $ Nr   rR   s    r6   get_input_embeddings*AudioFlamingo3Encoder.get_input_embeddings6  s    zzr8   r!   c                     Xl         g r   r   rR   r!   s     r6   set_input_embeddings*AudioFlamingo3Encoder.set_input_embeddings9  s    
r8   Ninput_features_maskc                    UR                   S   S-
  S-  S-   nUR                  S5      nUS-
  S-  S-   n[        R                  " XAR                  S9USS2S4   :  n[
        R                  R                  U R                  U5      5      n[
        R                  R                  U R                  U5      5      nUR                  SSS5      nX`R                  R                  -   n[
        R                  R                  XpR                  U R                  S9n[        U R                   UUS9nU R"                   HJ  n	U R                  =(       a#    [        R$                  " / 5      U R&                  :  n
U
(       a  MB  U	" Xx5      nML     UR                  SSS5      nU R)                  U5      R                  SSS5      nU R+                  U5      n[-        US	9$ )
a(  
Args:
    input_features (`torch.FloatTensor` of shape `(batch_size, feature_size, sequence_length)`):
        Log-Mel features extracted from raw audio. Use the processor/feature extractor to compute and pad
        these features from waveform input.
    input_features_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
        Mask to avoid performing attention on padding feature indices. Mask values selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.
r&   r   r   deviceNr   r)   )rB   inputs_embedsr"   )last_hidden_state)r\   sumr-   aranger   r   r0   gelur   r   permuter   weightr$   r+   r
   rB   rc   randr   r   r   r   )rR   r   r   r3   seq_leninput_features_lengthsr   rT   r"   layerdrops              r6   rs   AudioFlamingo3Encoder.forward<  s   ( "''+a/A59!4!8!8!<"81"<!BQ!F#ll7;P;PQTjklnrkrTss **4::n+EF**4::m+DE%--aA6 &(<(<(C(CC--m||VZVcVc-d2;;'.
 [[E==DUZZ^dnn%DD4 %m D ! &--aA66>>q!QG6)+
 	
r8   input_lengthsc                 4    US-
  S-  S-   nUS-
  S-  S-   nX4$ )zc
Computes the output length of the convolutional layers and the output length of the audio encoder
r   r   r   )rR   r   output_lengthss      r6    _get_feat_extract_output_lengths6AudioFlamingo3Encoder._get_feat_extract_output_lengthst  s5     '*q014'!+1A5,,r8   )r   r   r   r   r$   r   r   r   r   r   rc   r   r   r   )rL   ru   rv   rw   rx   r   r   main_input_namer   r   r   r:   _can_record_outputsrF   r   r   Moduler   r   r   r   r-   r|   r}   r   rs   
LongTensorr   r~   r   r   s   @r6   r   r     s    
 ('&O56 4-
: 2$
bii "))    483
3
 #\\D03

 
+	+3
   3
l-e>N>N - -r8   r   c                   :   ^  \ rS rSrSrS\4U 4S jjrS rSrU =r	$ )!AudioFlamingo3MultiModalProjectori}  z
Audio adaptor (small MLP) that projects AudioFlamingo3Encoder features
to the LLM embedding space so they can replace `<sound>` tokens.
rB   c                   > [         TU ]  5         [        R                  " UR                  R
                  UR                  R
                  UR                  S9U l        [        UR                     U l        [        R                  " UR                  R
                  UR                  R
                  UR                  S9U l        g )NrD   )rE   rF   r   rM   audio_confighidden_sizetext_configprojector_biaslinear_1r   projector_hidden_actactlinear_2r   s     r6   rF   *AudioFlamingo3MultiModalProjector.__init__  s    		++V-?-?-K-KRXRgRg
 &556		**F,>,>,J,JQWQfQf
r8   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r  r  r  )rR   audio_featuresrT   s      r6   rs   )AudioFlamingo3MultiModalProjector.forward  s2    n5/m4r8   )r  r  r  )
rL   ru   rv   rw   rx   r   rF   rs   r~   r   r   s   @r6   r   r   }  s    

3 
 r8   r   z
    The AudioFlamingo3 model which consists of a fine-tuned Whisper encoder, a multi-modal projector and a Qwen2 language model.
    c                   *  ^  \ rS rSrSrSrSrSrU 4S jrS r	S r
S rS rS	 rS
 r\\" SS9S\R$                  S\R&                  S\\   S\\-  4S j5       5       r\\          S S\R2                  S-  S\R$                  S-  S\R&                  S-  S\R&                  S-  S\R2                  S-  S\S-  S\R$                  S-  S\R2                  S-  S\S-  S\\R&                  -  S\\   S\4S jj5       5       rSS.S\4U 4S jjjrSr U =r!$ )!&AudioFlamingo3ForConditionalGenerationi  NTc                 .  > [         TU ]  U5        UR                  R                  U l        [        R
                  " UR                  5      U l        [        R
                  " UR                  5      U l	        [        U5      U l        U R                  5         g r   )rE   rF   r   
vocab_sizer   from_configr   audio_towerr   language_modelr   multi_modal_projectorr   r   s     r6   rF   /AudioFlamingo3ForConditionalGeneration.__init__  sn      ,,77$001D1DE2>>v?Q?QR%Fv%N" 	r8   c                 6    U R                   R                  5       $ r   )r  r   r   s    r6   r   ;AudioFlamingo3ForConditionalGeneration.get_input_embeddings  s    ""7799r8   c                 :    U R                   R                  U5        g r   )r  r   r   s     r6   r   ;AudioFlamingo3ForConditionalGeneration.set_input_embeddings  s    007r8   c                 6    U R                   R                  5       $ r   )r  get_output_embeddingsr   s    r6   r  <AudioFlamingo3ForConditionalGeneration.get_output_embeddings  s    ""88::r8   c                 :    U R                   R                  U5        g r   )r  set_output_embeddings)rR   new_embeddingss     r6   r  <AudioFlamingo3ForConditionalGeneration.set_output_embeddings  s    11.Ar8   c                 :    U R                   R                  U5        g r   )r  set_decoder)rR   decoders     r6   r  2AudioFlamingo3ForConditionalGeneration.set_decoder  s    ''0r8   c                 6    U R                   R                  5       $ r   )r  get_decoderr   s    r6   r"  2AudioFlamingo3ForConditionalGeneration.get_decoder  s    ""..00r8   zThis method is used to get the audio embeddings from input features (a log mel spectrogram), meaning inferring the audio encoder and the multi-modal projector.r   r   r   r3   rX   c                    U R                   " U4USS.UD6nU R                  UR                  5      nUR                  S5      R	                  [
        R                  5      nU R                   R                  U5      u  px[
        R                  " UR                  S   UR                  S9SSS24   USS2S4   :  n	XYR	                  UR                  5         Ul        U$ )a  
input_features (`torch.FloatTensor`):
    Float values of mel features extracted from the raw speech waveform. Raw speech waveform can be
    obtained by loading a `.flac` or `.wav` audio file into an array of type `list[float]` or a
    `numpy.ndarray`, *e.g.* via the soundfile library (`pip install soundfile`). To prepare the array into
    `input_features`, the [`AutoFeatureExtractor`] should be used for extracting the mel features, padding
    and conversion into a tensor of type `torch.FloatTensor`. See [`~WhisperFeatureExtractor.__call__`]
input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
    Mask to avoid performing attention on padded feature indices.
T)r   return_dictr&   r   r   N)r  r  r   r   tor-   longr   r   r\   r   pooler_output)
rR   r   r   r3   audio_outputaudio_embedsr   r   post_lengths
valid_masks
             r6   get_audio_features9AudioFlamingo3ForConditionalGeneration.get_audio_features  s    * ''
0CQU
Y_
 11,2P2PQ ,//366uzzB**KKMZ\\,"4"4Q"7@S@STUY[\U\]`lmnptmt`uu
%1--@S@S2T%U"r8   	input_idsr"   position_idsrV   r   labels	use_cachelogits_to_keepc                    Uc  U R                  5       " U5      nUb  Ub  U R                  X#SS9R                  nXR                  R                  :H  R                  S5      nUR                  UR                  UR                  5      UR                  UR                  5      5      nU R                  " SUUUUUU	U
S.UD6nU$ )a	  
input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
    Mask to avoid performing attention on padding feature indices. Mask values selected in `[0, 1]`:

    - 1 for tokens that are **not masked**,
    - 0 for tokens that are **masked**.
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
    config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
    (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

Example:

```python
>>> from transformers import AudioFlamingo3ForConditionalGeneration, AutoProcessor

>>> model_id = "nvidia/audio-flamingo-3-hf"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = AudioFlamingo3ForConditionalGeneration.from_pretrained(model_id, device_map="auto")

>>> conversations = [
>>>     [
>>>         {
>>>             "role": "user",
>>>             "content": [
>>>                 {"type": "text", "text": "Transcribe the input speech."},
>>>                 {
>>>                     "type": "audio",
>>>                     "path": "https://huggingface.co/datasets/nvidia/AudioSkills/resolve/main/assets/t_837b89f2-26aa-4ee2-bdf6-f73f0dd59b26.wav",
>>>                 },
>>>             ],
>>>         }
>>>     ],
>>>     [
>>>         {
>>>             "role": "user",
>>>             "content": [
>>>                 {
>>>                     "type": "text",
>>>                     "text": "This track feels really peaceful and introspective. What elements make it feel so calming and meditative?",
>>>                 },
>>>                 {"type": "audio", "path": "https://huggingface.co/datasets/nvidia/AudioSkills/resolve/main/assets/FPSbCAANfbJLVSwD.mp3"},
>>>             ],
>>>         }
>>>     ],
>>> ]

>>> inputs = processor.apply_chat_template(
>>>     conversations,
>>>     tokenize=True,
>>>     add_generation_prompt=True,
>>>     return_dict=True,
>>> ).to(model.device)

>>> outputs = model.generate(**inputs, max_new_tokens=500)

>>> decoded_outputs = processor.batch_decode(
>>>     outputs[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True
>>> )
>>> print(decoded_outputs)
["The spoken content of the audio is...", "The track's calming and meditative feel can be attributed to..."]
```T)r%  r&   )r   r"   r0  rV   r1  r2  r3  r   )
r   r-  r(  rB   audio_token_id	unsqueezemasked_scatterr&  r   r  )rR   r/  r   r   r"   r0  rV   r   r1  r2  r3  r3   r*  audio_token_maskoutputss                  r6   rs   .AudioFlamingo3ForConditionalGeneration.forward  s    ^   557	BM%)*?22>dh2iwwL !*[[-G-G GRRSUV)88 ##M$8$89<??=K_K_;`M +/*=*= 	+
')%+)	+
 	+
 r8   F)is_first_iterationr;  c                   > UR                  SS 5      nUR                  SS 5      n[        TU ]  " U0 UD6nU(       d  UR                  SS5      (       d  Ub  XFS'   Ub  XVS'   U$ )Nr   r   r2  F)poprE   prepare_inputs_for_generationr`   )rR   r;  argsr3   r   r   model_inputsrK   s          r6   r>  DAudioFlamingo3ForConditionalGeneration.prepare_inputs_for_generationD  ss    $4d;$jj)>Ew<dMfM\%5%5k5%I%I)1?-.".6I23r8   )r  r  r  r  )
NNNNNNNNNr   )"rL   ru   rv   rw   _keep_in_fp32_modules_strict_supports_attention_backend_tp_plan_pp_planrF   r   r   r  r  r  r"  r   r   r-   FloatTensorr|   r   r   r}   r   r-  r   r   r{   ry   r   rs   r>  r~   r   r   s   @r6   r
  r
    s    $( "&HH:8;B11  w)) #\\ +,	
 
+	+ <  .23737.204(,26*.!%-.c##d*c ))D0c #\\D0	c
 t+c &&-c c ((4/c   4'c $;c ell*c +,c 
 c  cJ OT t  r8   r
  )r
  r   r   )NrZ   )7r   collections.abcr   r-   r   activationsr   cache_utilsr   r   
generationr	   masking_utilsr
   modeling_flash_attention_utilsr   modeling_layersr   modeling_outputsr   r   modeling_utilsr   r   processing_utilsr   utilsr   r   r   r   utils.genericr   utils.output_capturingr   autor   r   configuration_audioflamingo3r   r   
get_loggerrL   rI   r   r|   rz   r7   r:   r   r   r   r   r
  __all__r   r8   r6   <module>rX     sh  ,  $   ! 5 ) 6 B 9 R F & R R 7 5 2 [ 
		H	% !%II%<<% 
% <<	%
 LL4'% T\% %4s)bii s)l5!; 5p O   
r-9 r-
r-j		 . 
w-JO w
wt or8   