? MediaPlayer/build M index.html M jmfplayer/src/main/web/test01.html M simple/src/main/web/index.html git-svn-id: svn://10.0.0.236/trunk@242091 18797224-902f-48f8-a5cc-f745e15eee43
260 lines
24 KiB
HTML
Executable File
260 lines
24 KiB
HTML
Executable File
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
<title>Simple Pluglet</title>
|
|
<link href="../../../../style/screen.css" rel="stylesheet" type="text/css" />
|
|
<script type="text/javascript" src="../../../../style/prototype.js"></script>
|
|
<script type="text/javascript" src="../../../../style/effects.js"></script>
|
|
<script type="text/javascript" src="../../../../style/dragdrop.js"></script>
|
|
<script type="text/javascript" src="../../../../style/controls.js"></script>
|
|
|
|
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<div id="nav">
|
|
<ul class="menubar">
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="page">
|
|
<div class="wrapper">
|
|
|
|
<div id="logo"><img src="../../../../style/java_get_powered.png" />
|
|
<h1>Media Player Using Java Media Framework</h1></div>
|
|
|
|
|
|
<div id="content">
|
|
|
|
<p>This small example shows how you can leverage the power of the <a
|
|
href="http://java.sun.com/products/java-media/jmf/index.jsp">Java Media
|
|
Framework</a> to simply and easily play media content in your
|
|
browser.</p>
|
|
|
|
<div id="example">
|
|
<div class="wrapper">
|
|
|
|
<EMBED type="video/avi" name=JMPlayer SRC="tilego3.avi"
|
|
width="200" height="175">
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="exampleFooter">
|
|
<div class="wrapper">
|
|
</div>
|
|
</div>
|
|
|
|
<br />
|
|
|
|
<h2>Code Artifacts</h2>
|
|
|
|
<p>The "Simple Pluglet" example, which you can access from the <a
|
|
href="../../../../index.html">index page</a>, gives more of a tutorial
|
|
view of how to build a pluglet. In this example, I'll just include the
|
|
source code and you can take it from there.</p>
|
|
|
|
<p><div class="source"><a href="#" onclick="if (Element.visible('src0')) { new Effect.SlideUp('src0'); $('src0_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src0'); $('src0_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src0_btn" src="../../../../style/page_white_code.gif" /></a>
|
|
<div id="src0" class="code" style="display: none; ">
|
|
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">package</span> jmfplayer;</div></li>
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import java.awt.BorderLayout;</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"><span class="co2">import java.awt.Dimension;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import java.awt.Frame;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import java.awt.Panel;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import java.awt.print.PrinterJob;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import java.io.InputStream;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import javax.media.ControllerEvent;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import javax.media.ControllerListener;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import javax.media.MediaLocator;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import javax.media.PrefetchCompleteEvent;</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"><span class="co2">import javax.media.RealizeCompleteEvent;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import javax.media.bean.playerbean.MediaPlayer;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.Pluglet;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.PlugletFactory;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.PlugletStreamListener;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletManager;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletPeer;</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletStreamInfo;</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletTagInfo2;</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
<li class="li1"><div class="de1"> </div></li>
|
|
<li class="li2"><div class="de2"><span class="kw2">public</span> <span class="kw2">class</span> JMFPlayer <span class="kw2">implements</span> PlugletFactory <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> JMFPlayer<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> Pluglet createPluglet<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> mimeType<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> Pluglet player = <span class="kw2">null</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw2">try</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> player = <span class="kw2">new</span> Player<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">catch</span> <span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AThrowable+java.sun.com&bntl=1"><span class="kw3">Throwable</span></a> e<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> e.<span class="me1">printStackTrace</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">return</span> player;</div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> plugletPath, PlugletManager manager<span class="br0">)</span> <span class="br0">{</span> </div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> shutdown<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"><span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
|
|
<li class="li1"><div class="de1"><span class="kw2">class</span> Player <span class="kw2">implements</span> Pluglet, ControllerListener <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a> defaultSize;</div></li>
|
|
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3AFrame+java.sun.com&bntl=1"><span class="kw3">Frame</span></a> frm;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="kw4">int</span> w, h;</div></li>
|
|
<li class="li1"><div class="de1"> MediaPlayer player = <span class="kw2">null</span>;</div></li>
|
|
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a> panel;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> </div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw2">synchronized</span> <span class="kw4">void</span> controllerUpdate<span class="br0">(</span>ControllerEvent ce<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw1">if</span><span class="br0">(</span>ce <span class="kw2">instanceof</span> RealizeCompleteEvent<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> player.<span class="me1">prefetch</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>ce <span class="kw2">instanceof</span> PrefetchCompleteEvent<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a> dim = player.<span class="me1">getPreferredSize</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> frm.<span class="me1">pack</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> panel.<span class="me1">setSize</span><span class="br0">(</span>dim<span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> frm.<span class="me1">setSize</span><span class="br0">(</span>defaultSize<span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> player.<span class="me1">start</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> frm.<span class="me1">show</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> Player<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span>PlugletPeer peer<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> PlugletTagInfo2 info = <span class="br0">(</span>PlugletTagInfo2<span class="br0">)</span>peer.<span class="me1">getTagInfo</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> w = info.<span class="me1">getWidth</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> h = info.<span class="me1">getHeight</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li1"><div class="de1"> defaultSize = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a><span class="br0">(</span>w, h<span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">boolean</span> playFile<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> url<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> player.<span class="me1">setMediaLocator</span><span class="br0">(</span><span class="kw2">new</span> MediaLocator<span class="br0">(</span>url<span class="br0">)</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw1">if</span><span class="br0">(</span>player.<span class="me1">getPlayer</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw2">null</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="kw2">false</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> player.<span class="me1">addControllerListener</span><span class="br0">(</span><span class="kw2">this</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> player.<span class="me1">realize</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">return</span> <span class="kw2">true</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> start<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> player = <span class="kw2">new</span> MediaPlayer<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> panel = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li2"><div class="de2"> panel.<span class="me1">add</span><span class="br0">(</span>player<span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> stop<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> player.<span class="me1">stop</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> player.<span class="me1">close</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> destroy<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> PlugletStreamListener newStream<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> JMFPlayerStreamListener listener = <span class="kw2">new</span> JMFPlayerStreamListener<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> listener.<span class="me1">setPlayer</span><span class="br0">(</span><span class="kw2">this</span><span class="br0">)</span>;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">return</span> listener;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> setWindow<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AFrame+java.sun.com&bntl=1"><span class="kw3">Frame</span></a> frame<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>frame == <span class="kw2">null</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw2">return</span>;</div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> frame.<span class="me1">setSize</span><span class="br0">(</span>defaultSize<span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> frame.<span class="me1">setLayout</span><span class="br0">(</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ABorderLayout+java.sun.com&bntl=1"><span class="kw3">BorderLayout</span></a><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
|
<li class="li1"><div class="de1"> frame.<span class="me1">add</span><span class="br0">(</span>panel<span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> frm = frame;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> print<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3APrinterJob+java.sun.com&bntl=1"><span class="kw3">PrinterJob</span></a> printerJob<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"><span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> </div></li>
|
|
<li class="li2"><div class="de2"><span class="kw2">class</span> JMFPlayerStreamListener <span class="kw2">implements</span> PlugletStreamListener <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> Player jmp;</div></li>
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> JMFPlayerStreamListener<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onStartBinding<span class="br0">(</span>PlugletStreamInfo streamInfo<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>!jmp.<span class="me1">playFile</span><span class="br0">(</span>streamInfo.<span class="me1">getURL</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&bntl=1"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">(</span><span class="st0">"Error starting player."</span><span class="br0">)</span>;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="kw2">return</span>;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span> </div></li>
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> setPlayer<span class="br0">(</span>Player jmp<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">this</span>.<span class="me1">jmp</span> = jmp;</div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onDataAvailable<span class="br0">(</span>PlugletStreamInfo streamInfo, <a href="http://www.google.com/search?q=allinurl%3AInputStream+java.sun.com&bntl=1"><span class="kw3">InputStream</span></a> input,<span class="kw4">int</span> length<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onFileAvailable<span class="br0">(</span>PlugletStreamInfo plugletInfo, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> fileName<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onStopBinding<span class="br0">(</span>PlugletStreamInfo plugletInfo,<span class="kw4">int</span> status<span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
|
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">int</span> getStreamType<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
|
|
|
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="nu0">1</span>;</div></li>
|
|
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
|
<li class="li2"><div class="de2"> </div></li>
|
|
<li class="li1"><div class="de1"><span class="br0">}</span> </div></li></ol></div></div>
|
|
</div>
|
|
</div>
|
|
</p>
|
|
|
|
</div> <!-- content -->
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="footer">
|
|
<div class="wrapper">
|
|
<a href="../../../../index.html">Back</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="float: left; width: 100%; height: 20px; "> </div>
|
|
|
|
</body>
|
|
</html>
|