<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- NewPage --> <html lang="fr"> <head> <!-- Generated by javadoc (1.8.0_181) on Mon Apr 13 15:38:51 CEST 2020 --> <title>FilePart</title> <meta name="date" content="2020-04-13"> <link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style"> <script type="text/javascript" src="../script.js"></script> </head> <body> <script type="text/javascript"><!-- try { if (location.href.indexOf('is-external=true') == -1) { parent.document.title="FilePart"; } } catch(err) { } //--> var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; var tableTab = "tableTab"; var activeTableTab = "activeTableTab"; </script> <noscript> <div>JavaScript is disabled on your browser.</div> </noscript> <!-- ========= START OF TOP NAVBAR ======= --> <div class="topNav"><a name="navbar.top"> <!-- --> </a> <div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div> <a name="navbar.top.firstrow"> <!-- --> </a> <ul class="navList" title="Navigation"> <li><a href="../overview-summary.html">Overview</a></li> <li><a href="package-summary.html">Package</a></li> <li class="navBarCell1Rev">Class</li> <li><a href="class-use/FilePart.html">Use</a></li> <li><a href="package-tree.html">Tree</a></li> <li><a href="../deprecated-list.html">Deprecated</a></li> <li><a href="../index-files/index-1.html">Index</a></li> <li><a href="../help-doc.html">Help</a></li> </ul> </div> <div class="subNav"> <ul class="navList"> <li><a href="../protocolP2P/FileList.html" title="class in protocolP2P"><span class="typeNameLink">Prev Class</span></a></li> <li><a href="../protocolP2P/HashAlgorithm.html" title="enum in protocolP2P"><span class="typeNameLink">Next Class</span></a></li> </ul> <ul class="navList"> <li><a href="../index.html?protocolP2P/FilePart.html" target="_top">Frames</a></li> <li><a href="FilePart.html" target="_top">No Frames</a></li> </ul> <ul class="navList" id="allclasses_navbar_top"> <li><a href="../allclasses-noframe.html">All Classes</a></li> </ul> <div> <script type="text/javascript"><!-- allClassesLink = document.getElementById("allclasses_navbar_top"); if(window==top) { allClassesLink.style.display = "block"; } else { allClassesLink.style.display = "none"; } //--> </script> </div> <div> <ul class="subNavList"> <li>Summary: </li> <li>Nested | </li> <li><a href="#field.summary">Field</a> | </li> <li><a href="#constructor.summary">Constr</a> | </li> <li><a href="#method.summary">Method</a></li> </ul> <ul class="subNavList"> <li>Detail: </li> <li><a href="#field.detail">Field</a> | </li> <li><a href="#constructor.detail">Constr</a> | </li> <li><a href="#method.detail">Method</a></li> </ul> </div> <a name="skip.navbar.top"> <!-- --> </a></div> <!-- ========= END OF TOP NAVBAR ========= --> <!-- ======== START OF CLASS DATA ======== --> <div class="header"> <div class="subTitle">protocolP2P</div> <h2 title="Class FilePart" class="title">Class FilePart</h2> </div> <div class="contentContainer"> <ul class="inheritance"> <li>java.lang.Object</li> <li> <ul class="inheritance"> <li><a href="../protocolP2P/Payload.html" title="class in protocolP2P">protocolP2P.Payload</a></li> <li> <ul class="inheritance"> <li>protocolP2P.FilePart</li> </ul> </li> </ul> </li> </ul> <div class="description"> <ul class="blockList"> <li class="blockList"> <hr> <br> <pre>public class <span class="typeNameLabel">FilePart</span> extends <a href="../protocolP2P/Payload.html" title="class in protocolP2P">Payload</a></pre> <div class="block">Representation of payload for load response.</div> <dl> <dt><span class="simpleTagLabel">Version:</span></dt> <dd>1.0</dd> <dt><span class="simpleTagLabel">Author:</span></dt> <dd>Louis Royer, Flavien Haas, JS Auge</dd> </dl> </li> </ul> </div> <div class="summary"> <ul class="blockList"> <li class="blockList"> <!-- =========== FIELD SUMMARY =========== --> <ul class="blockList"> <li class="blockList"><a name="field.summary"> <!-- --> </a> <h3>Field Summary</h3> <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation"> <caption><span>Fields</span><span class="tabEnd"> </span></caption> <tr> <th class="colFirst" scope="col">Modifier and Type</th> <th class="colLast" scope="col">Field and Description</th> </tr> <tr class="altColor"> <td class="colFirst"><code>private java.lang.String</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#filename">filename</a></span></code> </td> </tr> <tr class="rowColor"> <td class="colFirst"><code>private static int</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#FILENAME_POSITION">FILENAME_POSITION</a></span></code> </td> </tr> <tr class="altColor"> <td class="colFirst"><code>private static int</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#FILENAME_SIZE_POSITION">FILENAME_SIZE_POSITION</a></span></code> </td> </tr> <tr class="rowColor"> <td class="colFirst"><code>private long</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#offset">offset</a></span></code> </td> </tr> <tr class="altColor"> <td class="colFirst"><code>private static int</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#OFFSET_POSITION">OFFSET_POSITION</a></span></code> </td> </tr> <tr class="rowColor"> <td class="colFirst"><code>private byte[]</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#partialContent">partialContent</a></span></code> </td> </tr> </table> <ul class="blockList"> <li class="blockList"><a name="fields.inherited.from.class.protocolP2P.Payload"> <!-- --> </a> <h3>Fields inherited from class protocolP2P.<a href="../protocolP2P/Payload.html" title="class in protocolP2P">Payload</a></h3> <code><a href="../protocolP2P/Payload.html#PAYLOAD_SIZE_POSITION">PAYLOAD_SIZE_POSITION</a>, <a href="../protocolP2P/Payload.html#PAYLOAD_START_POSITION">PAYLOAD_START_POSITION</a>, <a href="../protocolP2P/Payload.html#requestResponseCode">requestResponseCode</a></code></li> </ul> </li> </ul> <!-- ======== CONSTRUCTOR SUMMARY ======== --> <ul class="blockList"> <li class="blockList"><a name="constructor.summary"> <!-- --> </a> <h3>Constructor Summary</h3> <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation"> <caption><span>Constructors</span><span class="tabEnd"> </span></caption> <tr> <th class="colFirst" scope="col">Modifier</th> <th class="colLast" scope="col">Constructor and Description</th> </tr> <tr class="altColor"> <td class="colFirst"><code>protected </code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#FilePart-byte:A-">FilePart</a></span>(byte[] packet)</code> <div class="block">Constructor (typically used by client) with Packet received as parameter.</div> </td> </tr> <tr class="rowColor"> <td class="colFirst"><code> </code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#FilePart-java.lang.String-long-byte:A-">FilePart</a></span>(java.lang.String filename, long offset, byte[] partialContent)</code> <div class="block">Constructor (typically used by server) with informations about file part to send as parameters.</div> </td> </tr> </table> </li> </ul> <!-- ========== METHOD SUMMARY =========== --> <ul class="blockList"> <li class="blockList"><a name="method.summary"> <!-- --> </a> <h3>Method Summary</h3> <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation"> <caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption> <tr> <th class="colFirst" scope="col">Modifier and Type</th> <th class="colLast" scope="col">Method and Description</th> </tr> <tr id="i0" class="altColor"> <td class="colFirst"><code>java.lang.String</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#getFilename--">getFilename</a></span>()</code> <div class="block">filename getter.</div> </td> </tr> <tr id="i1" class="rowColor"> <td class="colFirst"><code>private int</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#getFilenameSize-byte:A-">getFilenameSize</a></span>(byte[] packet)</code> <div class="block">Read filename’s size from Packet.</div> </td> </tr> <tr id="i2" class="altColor"> <td class="colFirst"><code>long</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#getOffset--">getOffset</a></span>()</code> <div class="block">offset getter.</div> </td> </tr> <tr id="i3" class="rowColor"> <td class="colFirst"><code>byte[]</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#getPartialContent--">getPartialContent</a></span>()</code> <div class="block">partialContent getter.</div> </td> </tr> <tr id="i4" class="altColor"> <td class="colFirst"><code>private void</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#setFilename-byte:A-">setFilename</a></span>(byte[] packet)</code> <div class="block">Write from Packet into filename.</div> </td> </tr> <tr id="i5" class="rowColor"> <td class="colFirst"><code>private void</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#setOffset-byte:A-">setOffset</a></span>(byte[] packet)</code> <div class="block">Write from Packet into offset.</div> </td> </tr> <tr id="i6" class="altColor"> <td class="colFirst"><code>private void</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#setPartialContent-byte:A-">setPartialContent</a></span>(byte[] packet)</code> <div class="block">Write from Packet into partialContent.</div> </td> </tr> <tr id="i7" class="rowColor"> <td class="colFirst"><code>protected byte[]</code></td> <td class="colLast"><code><span class="memberNameLink"><a href="../protocolP2P/FilePart.html#toPacket--">toPacket</a></span>()</code> <div class="block">Returns a byte[] containing Packet with padding.</div> </td> </tr> </table> <ul class="blockList"> <li class="blockList"><a name="methods.inherited.from.class.protocolP2P.Payload"> <!-- --> </a> <h3>Methods inherited from class protocolP2P.<a href="../protocolP2P/Payload.html" title="class in protocolP2P">Payload</a></h3> <code><a href="../protocolP2P/Payload.html#getPayloadSize-byte:A-">getPayloadSize</a>, <a href="../protocolP2P/Payload.html#getRequestResponseCode--">getRequestResponseCode</a>, <a href="../protocolP2P/Payload.html#setPayloadSize-int-byte:A-">setPayloadSize</a></code></li> </ul> <ul class="blockList"> <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object"> <!-- --> </a> <h3>Methods inherited from class java.lang.Object</h3> <code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li> </ul> </li> </ul> </li> </ul> </div> <div class="details"> <ul class="blockList"> <li class="blockList"> <!-- ============ FIELD DETAIL =========== --> <ul class="blockList"> <li class="blockList"><a name="field.detail"> <!-- --> </a> <h3>Field Detail</h3> <a name="filename"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>filename</h4> <pre>private java.lang.String filename</pre> </li> </ul> <a name="offset"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>offset</h4> <pre>private long offset</pre> </li> </ul> <a name="partialContent"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>partialContent</h4> <pre>private byte[] partialContent</pre> </li> </ul> <a name="OFFSET_POSITION"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>OFFSET_POSITION</h4> <pre>private static final int OFFSET_POSITION</pre> <dl> <dt><span class="seeLabel">See Also:</span></dt> <dd><a href="../constant-values.html#protocolP2P.FilePart.OFFSET_POSITION">Constant Field Values</a></dd> </dl> </li> </ul> <a name="FILENAME_SIZE_POSITION"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>FILENAME_SIZE_POSITION</h4> <pre>private static final int FILENAME_SIZE_POSITION</pre> <dl> <dt><span class="seeLabel">See Also:</span></dt> <dd><a href="../constant-values.html#protocolP2P.FilePart.FILENAME_SIZE_POSITION">Constant Field Values</a></dd> </dl> </li> </ul> <a name="FILENAME_POSITION"> <!-- --> </a> <ul class="blockListLast"> <li class="blockList"> <h4>FILENAME_POSITION</h4> <pre>private static final int FILENAME_POSITION</pre> <dl> <dt><span class="seeLabel">See Also:</span></dt> <dd><a href="../constant-values.html#protocolP2P.FilePart.FILENAME_POSITION">Constant Field Values</a></dd> </dl> </li> </ul> </li> </ul> <!-- ========= CONSTRUCTOR DETAIL ======== --> <ul class="blockList"> <li class="blockList"><a name="constructor.detail"> <!-- --> </a> <h3>Constructor Detail</h3> <a name="FilePart-java.lang.String-long-byte:A-"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>FilePart</h4> <pre>public FilePart(java.lang.String filename, long offset, byte[] partialContent) throws <a href="../localException/InternalError.html" title="class in localException">InternalError</a></pre> <div class="block">Constructor (typically used by server) with informations about file part to send as parameters.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>filename</code> - name of the file to send</dd> <dd><code>totalSize</code> - total size of the file to send</dd> <dd><code>offset</code> - where in the file begins the part we are sending</dd> <dd><code>partialContent</code> - content of the file we send</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/InternalError.html" title="class in localException">InternalError</a></code></dd> </dl> </li> </ul> <a name="FilePart-byte:A-"> <!-- --> </a> <ul class="blockListLast"> <li class="blockList"> <h4>FilePart</h4> <pre>protected FilePart(byte[] packet) throws <a href="../localException/TransmissionError.html" title="class in localException">TransmissionError</a>, <a href="../localException/SizeError.html" title="class in localException">SizeError</a>, <a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a>, <a href="../localException/InternalError.html" title="class in localException">InternalError</a></pre> <div class="block">Constructor (typically used by client) with Packet received as parameter.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>packet</code> - the full Packet received</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/SizeError.html" title="class in localException">SizeError</a></code></dd> <dd><code><a href="../localException/InternalError.html" title="class in localException">InternalError</a></code></dd> <dd><code><a href="../localException/TransmissionError.html" title="class in localException">TransmissionError</a></code></dd> <dd><code><a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a></code></dd> </dl> </li> </ul> </li> </ul> <!-- ============ METHOD DETAIL ========== --> <ul class="blockList"> <li class="blockList"><a name="method.detail"> <!-- --> </a> <h3>Method Detail</h3> <a name="toPacket--"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>toPacket</h4> <pre>protected byte[] toPacket() throws <a href="../localException/InternalError.html" title="class in localException">InternalError</a></pre> <div class="block">Returns a byte[] containing Packet with padding. This Packet is still incomplete and should not be send directly. ProtocolP2PPacket will use this method to generate the complete Packet.</div> <dl> <dt><span class="overrideSpecifyLabel">Overrides:</span></dt> <dd><code><a href="../protocolP2P/Payload.html#toPacket--">toPacket</a></code> in class <code><a href="../protocolP2P/Payload.html" title="class in protocolP2P">Payload</a></code></dd> <dt><span class="returnLabel">Returns:</span></dt> <dd>Packet with padding</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/InternalError.html" title="class in localException">InternalError</a></code></dd> </dl> </li> </ul> <a name="setOffset-byte:A-"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>setOffset</h4> <pre>private void setOffset(byte[] packet) throws <a href="../localException/SizeError.html" title="class in localException">SizeError</a></pre> <div class="block">Write from Packet into offset.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>packet</code> - received Packet</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/SizeError.html" title="class in localException">SizeError</a></code></dd> </dl> </li> </ul> <a name="getFilenameSize-byte:A-"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>getFilenameSize</h4> <pre>private int getFilenameSize(byte[] packet) throws <a href="../localException/SizeError.html" title="class in localException">SizeError</a>, <a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a></pre> <div class="block">Read filename’s size from Packet.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>packet</code> - received Packet</dd> <dt><span class="returnLabel">Returns:</span></dt> <dd>filename’s size</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a></code></dd> <dd><code><a href="../localException/SizeError.html" title="class in localException">SizeError</a></code></dd> </dl> </li> </ul> <a name="setFilename-byte:A-"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>setFilename</h4> <pre>private void setFilename(byte[] packet) throws <a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a>, <a href="../localException/SizeError.html" title="class in localException">SizeError</a>, <a href="../localException/InternalError.html" title="class in localException">InternalError</a></pre> <div class="block">Write from Packet into filename.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>packet</code> - received Packet</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a></code></dd> <dd><code><a href="../localException/SizeError.html" title="class in localException">SizeError</a></code></dd> <dd><code><a href="../localException/InternalError.html" title="class in localException">InternalError</a></code></dd> </dl> </li> </ul> <a name="setPartialContent-byte:A-"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>setPartialContent</h4> <pre>private void setPartialContent(byte[] packet) throws <a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a>, <a href="../localException/SizeError.html" title="class in localException">SizeError</a></pre> <div class="block">Write from Packet into partialContent.</div> <dl> <dt><span class="paramLabel">Parameters:</span></dt> <dd><code>packet</code> - received Packet</dd> <dt><span class="throwsLabel">Throws:</span></dt> <dd><code><a href="../localException/SizeError.html" title="class in localException">SizeError</a></code></dd> <dd><code><a href="../localException/ProtocolError.html" title="class in localException">ProtocolError</a></code></dd> </dl> </li> </ul> <a name="getPartialContent--"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>getPartialContent</h4> <pre>public byte[] getPartialContent()</pre> <div class="block">partialContent getter.</div> <dl> <dt><span class="returnLabel">Returns:</span></dt> <dd>partialcontent</dd> </dl> </li> </ul> <a name="getFilename--"> <!-- --> </a> <ul class="blockList"> <li class="blockList"> <h4>getFilename</h4> <pre>public java.lang.String getFilename()</pre> <div class="block">filename getter.</div> <dl> <dt><span class="returnLabel">Returns:</span></dt> <dd>String</dd> </dl> </li> </ul> <a name="getOffset--"> <!-- --> </a> <ul class="blockListLast"> <li class="blockList"> <h4>getOffset</h4> <pre>public long getOffset()</pre> <div class="block">offset getter.</div> <dl> <dt><span class="returnLabel">Returns:</span></dt> <dd>offset</dd> </dl> </li> </ul> </li> </ul> </li> </ul> </div> </div> <!-- ========= END OF CLASS DATA ========= --> <!-- ======= START OF BOTTOM NAVBAR ====== --> <div class="bottomNav"><a name="navbar.bottom"> <!-- --> </a> <div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div> <a name="navbar.bottom.firstrow"> <!-- --> </a> <ul class="navList" title="Navigation"> <li><a href="../overview-summary.html">Overview</a></li> <li><a href="package-summary.html">Package</a></li> <li class="navBarCell1Rev">Class</li> <li><a href="class-use/FilePart.html">Use</a></li> <li><a href="package-tree.html">Tree</a></li> <li><a href="../deprecated-list.html">Deprecated</a></li> <li><a href="../index-files/index-1.html">Index</a></li> <li><a href="../help-doc.html">Help</a></li> </ul> </div> <div class="subNav"> <ul class="navList"> <li><a href="../protocolP2P/FileList.html" title="class in protocolP2P"><span class="typeNameLink">Prev Class</span></a></li> <li><a href="../protocolP2P/HashAlgorithm.html" title="enum in protocolP2P"><span class="typeNameLink">Next Class</span></a></li> </ul> <ul class="navList"> <li><a href="../index.html?protocolP2P/FilePart.html" target="_top">Frames</a></li> <li><a href="FilePart.html" target="_top">No Frames</a></li> </ul> <ul class="navList" id="allclasses_navbar_bottom"> <li><a href="../allclasses-noframe.html">All Classes</a></li> </ul> <div> <script type="text/javascript"><!-- allClassesLink = document.getElementById("allclasses_navbar_bottom"); if(window==top) { allClassesLink.style.display = "block"; } else { allClassesLink.style.display = "none"; } //--> </script> </div> <div> <ul class="subNavList"> <li>Summary: </li> <li>Nested | </li> <li><a href="#field.summary">Field</a> | </li> <li><a href="#constructor.summary">Constr</a> | </li> <li><a href="#method.summary">Method</a></li> </ul> <ul class="subNavList"> <li>Detail: </li> <li><a href="#field.detail">Field</a> | </li> <li><a href="#constructor.detail">Constr</a> | </li> <li><a href="#method.detail">Method</a></li> </ul> </div> <a name="skip.navbar.bottom"> <!-- --> </a></div> <!-- ======== END OF BOTTOM NAVBAR ======= --> </body> </html>