
    BeP                    J   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ d dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZ d dl m!Z! d dl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z8m9Z9m:Z:m;Z; ddl<m=Z=m<Z<  e8j>        d          Z? e8j>        d          Z@ e8j>        d          ZA e8j>        d          ZB ejC        eD          jE        jE        ZF e(ej%                  ZG e(e%          ZHdZIdZJe4dz  d e%jK        dd           d z  ZLe4dz  d!eG d z  ZMe2 d"eH d ZNe3 d#eG d ZOd$eI d%ZPd$eI d&ZQd'eJ d(ZRd)e2 d*ZSd+eJ d,ZTd-eP d.ZUd-eP d.ZVi ZWe4d/z  ZXeXd0z  eXd1z  eXd2z  eXd3z  eXd4z  eXd5z  eXd6z  gZYed7         ZZd8Z[d9Z\d:Z]d;Z^d<Z_ej`         G d= d>                      Za G d? d@e          ZbdqdBZcdrdCZd	 	 	 	 	 	 	 	 	 	 dsdtd[Ze	 	 	 	 	 	 	 	 	 dudvdcZf	 	 	 dwdxdiZgddd\dDdAdAdAi dddDdAdFdAfdydpZhdS )z    )annotationsN)IOAnyDictListLiteral)ApplicationSessionContext)CodeHandler)serialize_json)MACROSget_env)Document)script_for_render_items)
RenderItem%standalone_docs_json_and_render_items)wrap_in_script_tag)make_id   )__version__config)base_versionescape   )LOADING_INDICATOR_CSS_CLASS) build_single_handler_application)find_requirements)
BASE_TEMPLATECDN_DISTCDN_ROOTDIST_DIRINDEX_TEMPLATE	Resources_envbundle_resourcesloading_cssset_resource_mode)
set_curdocstatesite.webmanifestserviceWorker.jszpyodide_worker.jszpyodide_handler.jszv0.24.1z	2023.05.1wheelszpanel-z-dirty z-py3-none-any.whlzbokeh-zwheels/panel-zwheels/bokeh-z!https://cdn.jsdelivr.net/pyodide/z/full/pyodide.jsz/pyc/pyodide.jsz;<link rel="stylesheet" href="https://pyscript.net/releases/z/pyscript.css" />z<link rel="stylsheet" href="zcss/pyscript.css" />z1<script defer src="https://pyscript.net/releases/z/pyscript.js"></script>z<script src="z"></script>imageszfavicon.icozicon-vector.svgzicon-32x32.pngzicon-192x192.pngzicon-512x512.pngzapple-touch-icon.pngzindex_background.png)pyodidepyscriptpyodide-workerzN
import asyncio

from panel.io.pyodide import init_doc, write_doc

init_doc()
z
await write_doc()z$
asyncio.ensure_future(write_doc());a@  
<script type="text/javascript">
async function main() {
  let pyodide = await loadPyodide();
  await pyodide.loadPackage("micropip");
  await pyodide.runPythonAsync(`
    import micropip
    await micropip.install([{{ env_spec }}]);
  `);
  code = `{{ code }}`
  await pyodide.runPythonAsync(code);
}
main();
</script>
a  
<script type="text/javascript">
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./serviceWorker.js').then(reg => {
    reg.onupdatefound = () => {
      const installingWorker = reg.installing;
      installingWorker.onstatechange = () => {
        if (installingWorker.state === 'installed' &&
            navigator.serviceWorker.controller) {
          // Reload page if service worker is replaced
          location.reload();
        }
      }
    }
  })
}
</script>
c                  .    e Zd ZU ded<   ded<   ded<   dS )Requestdictheaderscookies	argumentsN)__name__
__module____qualname____annotations__     0lib/python3.11/site-packages/panel/io/convert.pyr3   r3   z   s0         NNNNNNr=   r3   c                  X     e Zd Zdd fd
Zd Zed	d            Zed             Z xZS )
MockSessionContextNdocumentc               N    || _          t                      j        |d d d| d S )N)server_context
session_id)	_documentsuper__init__)selfrB   argskwargs	__class__s       r>   rH   zMockSessionContext.__init__   s3    !$tOOOOOOOr=   c                    d S Nr<   )rI   rJ   s     r>   with_locked_documentz'MockSessionContext.with_locked_document   s    r=   returnboolc                    dS )NFr<   rI   s    r>   	destroyedzMockSessionContext.destroyed   s    ur=   c                &    t          i i i           S )N)r5   r6   r7   )r3   rS   s    r>   requestzMockSessionContext.request   s    r2<<<<r=   )rP   rQ   )	r8   r9   r:   rH   rO   propertyrT   rV   __classcell__)rL   s   @r>   r@   r@      s        '+ P P P P P P P      X = = X= = = = =r=   r@   Tc                    |rd}d}d}nd x}x}}d t          |                                           D             }t          j        |||||t                    S )Nr*   zimages/favicon.icozimages/apple-touch-icon.pngc                Z    i | ](\  }}|d t           j                            |          z   )S )./)ospathbasename).0labelfs      r>   
<dictcomp>zmake_index.<locals>.<dictcomp>   s3    SSSUD))!,,,SSSr=   )itemsmanifest
apple_iconfavicontitle	PANEL_CDN)sortedrc   r"   renderr   )filesrg   rd   rf   re   rc   s         r>   
make_indexrl      su     /%&2

*...7ZSSVEKKMM=R=RSSSE h:u   r=   c                    t          |           dk    r|pd}d}n+|pd}t          |                                           d         }t          j        d||d|S )Nr   zPanel Applications
index.htmlr   )namer]   r<   )lenlistvaluesPWA_MANIFEST_TEMPLATErj   )rk   rg   rK   r]   s       r>   build_pwa_manifestrt      sw    
5zzA~~----ELLNN##A& '     r=   autor/   Ffilenamestr | os.PathLike | IOrequirementsLiteral['auto'] | List[str]js_resourcescss_resources"Literal['auto'] | List[str] | NoneruntimeRuntimes	prerenderrQ   panel_versionLiteral['auto', 'local'] | strrd   
str | None
http_patchinlinecompiledrP   strc                  ,-./0 t          | d          rVt          |                                 d          }dt          t	          j                               }t          |          }nwt          j        |           }d	                    |j
                            d          dd                   }t          t          |                                                    }t                      --fd-_        t!          -          5  |                    -           t%          j        d           ddd           n# 1 swxY w Y   |j        d	         j        j        }-j        st1          d
|  d          |dk    rt3          |          }nt5          |t                    rt          j        |                                          rut          j        |                              d                                          }	 d	dlm, ,0fd|D             }n$# t@          $ r}tC          d|           d}~ww xY w|dk    rdt          tD          #                                                              d          d         z   }dt          tH          #                                                              d          d         z   }n$|dk    rtJ          }tL          }nd| }dtN           }||g}|r|(                    d           |d |D             z   }tR          *                                D ]/\  /.tW          /fd|D                       r./fd|D             }0|dk    rtX          ntZ          }d	                    t\          ||g          }d}|g }|dk    rQ|dk    rt^          g}|dk    rt`          tb          g}n|sg }d	                    d |D                       }d| d | d!}n
|dk    rg }d"	                    d# |D                       }|2                    d$d%          2                    d&d'          }|d(k    rk|dk    rg }tf          4                    |tj          j6        d)          }tn          4                    |
rtp          ntr          ||d*          }tu          |          }nH|dk    r|
rtv          ntx          g}t{          j>        t~                    }|4                    ||d+          }|r{t                      }t          -          \  }}|d	         } t          t          |          d,-          }!|tu          |!d.|          z  }|tu          t          ||                    z  }nt          d/-j        d,0          } | g}t          |	rd1nd23          }"t          d4z  d5z                      d          }#t          tj          j6        tj          jI        tj          jJ                  }$|(                    d6|# d|$ d7           t!          -          5  t          -j        |"          \  }%}&ddd           n# 1 swxY w Y   |r	t          |%gn|%g}'d	                    ||'z             }%d	                    |&g|z             }&-jM        }(-jN        })|)O                                }*|*P                    t          -jR        |%|&||t          t          | | j        |t          8                     |(t          }(n9t5          |(t                    r$t                      >                    d9|(z             }(|(4                    |*          }+|+2                    d:d;t           d<tj          j6         d=          }+|+|fS )>a7  
    Converts a Panel or Bokeh script to a standalone WASM Python
    application.

    Arguments
    ---------
    filename: str | Path | IO
        The filename of the Panel/Bokeh application to convert.
    requirements: 'auto' | List[str]
        The list of requirements to include (in addition to Panel).
    js_resources: 'auto' | List[str]
        The list of JS resources to include in the exported HTML.
    css_resources: 'auto' | List[str] | None
        The list of CSS resources to include in the exported HTML.
    runtime: 'pyodide' | 'pyscript'
        The runtime to use for running Python in the browser.
    prerender: bool
        Whether to pre-render the components so the page loads.
    panel_version: 'auto' | str
        The panel release version to use in the exported HTML.
    http_patch: bool
        Whether to patch the HTTP request stack with the pyodide-http library
        to allow urllib3 and requests to work.
    inline: bool
        Whether to inline resources.
    compiled: bool
        Whether to use pre-compiled pyodide bundles.
    readz
convert.py)sourcerv   zapp-.Nc                 $    t                     S )NrA   )r@   rA   s   r>   <lambda>z script_to_html.<locals>.<lambda>   s    (:H(M(M(M r=   r   z	The file z~ does not publish any Panel contents. Ensure you have marked items as servable or added models to the bokeh document manually.ru   utf-8encoding)Requirementc                    g | ]>}|                     d           d                                         x1           <?S )#r   )splitstrip)r_   rr   r2s     r>   
<listcomp>z"script_to_html.<locals>.<listcomp>   s^       ''#,,q///111B7B{2  r=   z,Requirements parser raised following error: localr[   /zpanel==zbokeh==zpyodide-http==0.2.1c                    g | ]}|d v|	S ))panelbokehr<   r_   reqs     r>   r   z"script_to_html.<locals>.<listcomp>
  s*       s2D'D'D'D'D'Dr=   c              3      K   | ]}|v V  	d S rN   r<   )r_   r   ro   s     r>   	<genexpr>z!script_to_html.<locals>.<genexpr>  s'      ++sts{++++++r=   c                *    g | ]}|v r d  n|S )z>=r<   )r_   r   min_versionro   s     r>   r   z"script_to_html.<locals>.<listcomp>  s4    UUUt,,{,,,UUUr=   r0   
,c                ,    g | ]}t          |          S r<   reprr   s     r>   r   z"script_to_html.<locals>.<listcomp>  s    444$s))444r=   z<py-config>
packages = [z]
</py-config>
<py-script>z</py-script>, c                ,    g | ]}t          |          S r<   r   r   s     r>   r   z"script_to_html.<locals>.<listcomp>#  s    888Cd3ii888r=   `z\`z\nz\\nr1   )ro   loading_spinner)PYODIDE_URLenv_speccode)r   r   F)quotezapplication/jsonr-   )tokenrootsuse_for_titler   cdn)modecsszloading.cssz<style type="text/css">
z	
</style>)rg   bokeh_js	bokeh_cssplot_scriptdocsbasemacrosdocr   rd   dist_urlz{% extends base %}
z<body>z<body class="z pn-z">)Xhasattrr   r   r   uuiduuid4r	   pathlibPathjoinro   r   r   absoluter   _session_contextr(   initialize_documentr)   _on_load	_handlers_runnerr   r   RuntimeErrorr   
isinstanceis_file	read_text
splitlinespackaging.requirementsr   	Exception
ValueErrorPANEL_LOCAL_WHLas_posixBOKEH_LOCAL_WHLPANEL_CDN_WHLBOKEH_CDN_WHLBOKEH_VERSIONappendMINIMUM_VERSIONSrc   anyPOST_PYSCRIPTPOSTPREPYSCRIPT_JSPYSCRIPT_CSSPYSCRIPT_CSS_OVERRIDESreplaceWORKER_HANDLER_TEMPLATErj   r   r   WEB_WORKER_TEMPLATEPYODIDE_PYC_URLr   r   PYODIDE_PYC_JS
PYODIDE_JS_pn_envfrom_stringPYODIDE_SCRIPTr   r   r   r   r   r   r#   r!   r&   loading_colorloading_max_heightr%   INIT_SERVICE_WORKERtemplate_template_variablescopyupdater4   rg   r   r   r   r   r   )1rv   rx   rz   r{   r}   r   r   rd   r   r   r   handlerapp_nameappr]   r   e	panel_req	bokeh_req	base_reqsreqs	post_coder   
web_workerpyenvr   r   worker_handlerscript_templatejson_id	docs_jsonrender_itemsrender_itemjson	resourcesloading_basespinner_cssr   r   extra_jsr   template_variablescontexthtmlr   rB   r   ro   r   s1                                               @@@@@r>   script_to_htmlr     s   T x   EX]]__|LLL-#djll++--'""|H%%88DIOOC00"566.s4==??/C/CDDzzH M M M MH	H		  )))t               ]1%,F> 
+ + + +
 
 	
 v(00	L#	&	& 7<+E+E+M+M+O+O |L11;;W;MMXXZZ		::::::    (  LL  	 	 	BqBB  	 37799::@@EEbII	37799::@@EEbII			&	 	 !	!		-m--	-m--	I&I 0.///  #   D .3355 V Vk++++d+++++ 	VUUUUUPTUUUD ")J!6!6DI99c69-..DJ*6!!'=LF"")+ABMM 	M44t44455g%ggUYgggF""M9988488899||C&&..uf==&&&v%%!4;; #)#9= =  N -332:K$5 5  J
 -^<<KKv%%2: J
K%1.AAO)00$2 2  K
  %))"G"Q"Q	<"1onY//u===)$0BGLLL)*A'<*X*XYYY N!
 
 

 $} 6<xxu===Iu$}4???QQL 4f6O K KLKKKKKK   
H		 J J.x~yII)J J J J J J J J J J J J J J J2:J#X..
Hyyh.//H		9+m344I  H!5 %%''GNN4n       	Hc	"	" L99(()?()JKK??7##D	f+FffFLbfff	g	g 	 s<   
*E  EEH 
H?(H::H?"YYYr1   r   str | os.PathLike	dest_pathstr | os.PathLike | None)List[str] | Literal['auto'] | os.PathLikeverbosec
                   |t          j        d          }n.t          |t           j                  st          j        |          }	 t	          |rdnd          5  t          | |||||||          \  }
}d d d            n# 1 swxY w Y   n<# t          $ r Y d S t          $ r#}t          d|  d| d|            Y d }~d S d }~ww xY wd	                    t          j                            |                               d          d d	                   }| d
}t          ||z  dd          5 }|                    |
           d d d            n# 1 swxY w Y   |dk    rEt          || dz  dd          5 }|                    |           d d d            n# 1 swxY w Y   |	rt          d|  d| d| d           |                    dd          |fS )Nr[   r   r   )rx   r}   r   rd   r   r   r   zFailed to convert z to z	 target: r   r   z.htmlwr   r   r1   z.jszSuccessfully converted z target and wrote output to _ )r   r   r   PurePathr'   r  KeyboardInterruptr   printr   r\   r]   r^   r   openwriter   )r   r  rx   r}   r   rd   r   r   r   r  r
  	js_workerr   ro   rv   outs                   r>   convert_appr  w  s    L&&			7#344 ,L++	6<xxu== 	 	,,#h+
	  OD)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       A3AAGAAaAABBB 88BG$$S))//44SbS9::D~~~H	i("C'	:	:	: c		$              """)lll*C'BBB 	!cIIi   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! caaaaaV^aaabbbLLc""H--sf   B B5B BB B	B 
C	C#CC0EEE;FF!$F!   apps	List[str]max_workersintc                :    dd l }ddlm} i } fdt          dt	                               D             }|D ]}	 ||                    d                    5 }
g }|	D ]\}t          |t                    r|                    |d          }n|} |
j	        t          ||fd|i|}|                    |           ]t          j                            |          D ]"}|                                }|
|\  }}|||<   #	 d d d            n# 1 swxY w Y   |S )Nr   )ProcessPoolExecutorc                *    g | ]}||z            S r<   r<   )r_   ir  r   s     r>   r   z)_convert_process_pool.<locals>.<listcomp>  s&    NNNd1Q{]?#NNNr=   spawn)r   
mp_contextru   rx   )multiprocessingconcurrent.futuresr#  rangerp   get_contextr   r4   getsubmitr  r   
concurrentfuturesas_completedresult)r  r  r   rx   rK   mpr#  rk   groupsgroupexecutorr/  r   app_requiresra   futurer1  ro   rv   s   ` `                r>   _convert_process_poolr8    s    !   666666ENNNNNU1c$ii-M-MNNNF + +  'BNN74K4K
 
 
 	+G " "lD11 0#/#3#3C#@#@LL#/L#HOi >JNT  q!!!!$,99'BB + +%%+ND("*E$K	+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+$ Ls   B$DD	D	+str | os.PathLike | List[str | os.PathLike]rg   build_index	build_pwa
pwa_configDict[Any, Any]c           	        t          | t                    r| g} t          j        d          n.t          t          j                  st          j                                      dd           |rdnd}t          |t                    r7i }| D ]1fd|                                D             }|r|d         nd|<   2n|}|||||
|||d	t          j	        rt          fd
| D                       }nt          | fd|	i}|rvt          |          dk    rct          |||          }t          dz  d          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           |sdS dz  }|                    d           g }t           D ]v}t          ||j        z  d          5 }|                    |                                           ddd           n# 1 swxY w Y   |                    d|j                    w|rt          d           t)          |fd|i|}t          dz  dd          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           t*                              t/          j                    j        |pdd                    d |D                                 }t          dz  dd          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           dS dS ) ad  
    Arguments
    ---------
    apps: str | List[str]
        The filename(s) of the Panel/Bokeh application(s) to convert.
    dest_path: str | pathlib.Path
        The directory to write the converted application(s) to.
    title: str | None
        A title for the application(s). Also used to generate unique
        name for the application cache to ensure.
    runtime: 'pyodide' | 'pyscript' | 'pyodide-worker'
        The runtime to use for running Python in the browser.
    requirements: 'auto' | List[str] | os.PathLike | Dict[str, 'auto' | List[str] | os.PathLike]
        The list of requirements to include (in addition to Panel).
        By default automatically infers dependencies from imports
        in the application. May also provide path to a requirements.txt
    prerender: bool
        Whether to pre-render the components so the page loads.
    build_index: bool
        Whether to write an index page (if there are multiple apps).
    build_pwa: bool
        Whether to write files to define a progressive web app (PWA) including
        a manifest and a service worker that caches the application locally
    pwa_config: Dict[Any, Any]
        Configuration for the PWA including (see https://developer.mozilla.org/en-US/docs/Web/Manifest)

          - display: Display options ('fullscreen', 'standalone', 'minimal-ui' 'browser')
          - orientation: Preferred orientation
          - background_color: The background color of the splash screen
          - theme_color: The theme color of the application
    max_workers: int
        The maximum number of parallel workers
    panel_version: 'auto' | 'local'] | str
'       The panel version to include.
    http_patch: bool
        Whether to patch the HTTP request stack with the pyodide-http library
        to allow urllib3 and requests to work.
    inline: bool
        Whether to inline resources.
    Nr[   T)parentsexist_okr*   c                    g | ]?\  }}                     |                    t          j        j        d                     =|@S )r   )endswithr   r\   r]   sep)r_   ro   depsr   s      r>   r   z convert_apps.<locals>.<listcomp>	  sQ       #t<<RW[# > >??  r=   r   ru   )rx   r}   r   rd   r   r   r   r  c              3  4   K   | ]}t          |fi V  d S rN   )r  )r_   r   r  rK   s     r>   r   zconvert_apps.<locals>.<genexpr>  s5      LLk#y;;F;;LLLLLLr=   r   r   )rd   rg   rn   r  zSuccessfully wrote index.html.r.   )r@  wbzimages/z$Successfully wrote icons and images.rg   r   r   z!Successfully wrote site.manifest.zPanel Pyodide Appr   c                ,    g | ]}t          |          S r<   r   )r_   ps     r>   r   z convert_apps.<locals>.<listcomp>?  s    666T!WW666r=   )r   ro   	pre_cacher+   z$Successfully wrote serviceWorker.js.)r   r   r   r   r  mkdirr4   rc   r)   _is_pyodider8  rp   rl   r  r  r  
PWA_IMAGESro   
read_bytesr   rt   SERVICE_WORKER_TEMPLATErj   r   r   hexr   )r  r  rg   r}   rx   r   r:  r;  r<  r   r   r   r   r  rd   app_requirementsmatchesrk   indexra   	imgs_pathimg_relimgworkerr   rK   s    `                      @@r>   convert_appsrW    s   p $ vL&&			7#344 ,L++	OOD4O000%.8!!DH,%% 	( 	F 	FC   '3'9'9';';  G 3:$EGAJJvS!!	F ( )WH&jW	 F  
LLLLLtLLLMM%)
 
)4
8>
 
  4s5zzQ59EBBB)l*C00 	AGGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	42333  X%IOOTO"""G - -)ch&-- 	&GGCNN$$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&+++,,,, 64555 "%CCuC
CCH	i,,cG	D	D	D 	               31222 %++Z\\))))66g66677 ,  F
 
i,,cG	D	D	D 	               64555556 6sH   
E,,E03E0
(G>>H	H	I>>JJL##L'*L')NTrN   )
ru   ru   ru   r/   Tru   NTFT)rv   rw   rx   ry   rz   ry   r{   r|   r}   r~   r   rQ   r   r   rd   r   r   rQ   r   rQ   r   rQ   rP   r   )	Nru   r1   TNru   TFT)r   r  r  r  rx   r  r}   r~   r   rQ   rd   r   r   r   r   rQ   r   rQ   r  rQ   )Nr  ru   )r  r  r  r   r   r!  rx   r  )r  r9  r  r  rg   r   r}   r~   rx   r  r   rQ   r:  rQ   r;  rQ   r<  r=  r   r!  r   r   r   rQ   r   rQ   r  rQ   )i
__future__r   r)  r.  dataclassesr\   r   r   typingr   r   r   r   r   r   bokeh.application.applicationr	   r
   bokeh.application.handlers.coder   bokeh.core.json_encoderr   bokeh.core.templatesr   r   bokeh.documentr   bokeh.embed.elementsr   bokeh.embed.utilr   r   bokeh.embed.wrappersr   bokeh.util.serializationr   r-   r   r   utilr   r   loadingr   markdownr   mime_renderr   r  r   r   r    r!   r"   r#   r$   r   r%   r&   r'   r)   r(   get_templaters   rN  r   r   r   __file__parent
PANEL_ROOTr   
PY_VERSIONPYODIDE_VERSIONPYSCRIPT_VERSIONr   r   r   r   r   r   r   r   r   r   r   r   r   ICON_DIRrL  r~   r   r   r   r   r   	dataclassr3   r@   rl   rt   r  r  r8  rW  r<   r=   r>   <module>rq     s   " " " " " "         				                 E E E E E E E E 7 7 7 7 7 7 2 2 2 2 2 2 0 0 0 0 0 0 0 0 # # # # # # 8 8 8 8 8 8 N N N N N N N N 3 3 3 3 3 3 , , , , , , " " " " " " " " ' ' ' ' ' ' ' ' 0 0 0 0 0 0 6 6 6 6 6 6 * * * * * *                        % $ $ $ $ $ $ $,,-?@@ .'./ABB *g*+>?? /7/0DEE W\(##*1
U.//\+&&
 X%(e1D1DXr1R1R(e(e(eeX%(Q(Q(Q(QQGG*GGGJJ-JJJS/SSSVoVVVpM]pppVVVV kBRkkk5[555
9999 h}  !!!!%%%%
 :;'  &        = = = = = = = =&       17068>!4:F F F F FV +/>D(4:(. (. (. (. (.Z !>D	         H +/(>D!#4:@6 @6 @6 @6 @6 @6 @6r=   