Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > e2ff8527bfb536f76f163acd670d66bc > files > 21

hail-devel-0.8-0.7.gf9c5b967.fc16.i686.rpm

<!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/xhtml;charset=UTF-8"/>
<title>CLD: include/cld_common.h File Reference</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">CLD
   &#160;<span id="projectnumber">0.1git</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">include/cld_common.h File Reference</div>  </div>
</div>
<div class="contents">
<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br/>
<code>#include &lt;stdbool.h&gt;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
<code>#include &lt;time.h&gt;</code><br/>
<code>#include &lt;glib.h&gt;</code><br/>
<code>#include &lt;openssl/sha.h&gt;</code><br/>
<code>#include &lt;cld_msg_rpc.h&gt;</code><br/>
</div><table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcld__timer.html">cld_timer</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcld__timer__list.html">cld_timer_list</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#aa6b77f5b267778672e0f4e93863401bf">CLD_ALIGN8</a>(n)&#160;&#160;&#160;((8 - ((n) &amp; 7)) &amp; 7)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a97647262121ac0919591c8c3d50d0c0d">SIDFMT</a>&#160;&#160;&#160;&quot;%016llX&quot;</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a439f29c04e04bab1333a32e99f00e37c">SIDARG</a>(sid)&#160;&#160;&#160;cld_sid2llu(sid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a9aa3f5613cea2de18c8e96c7cca71289">CLD_PKT_FTR_LEN</a>&#160;&#160;&#160;sizeof(struct cld_pkt_ftr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Length of the packet footer.  <a href="#a9aa3f5613cea2de18c8e96c7cca71289"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a1b66dd9b3db89ec335e4119c79dcea2b">PKT_HDR_TO_STR_SCRATCH_LEN</a>&#160;&#160;&#160;128</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#ab614597070f773b083c6840d8389a784">cld_timer_add</a> (struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *tlist, struct <a class="el" href="structcld__timer.html">cld_timer</a> *timer, time_t expires)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a1e120aef38a7c242a806d6db4c97fdf8">cld_timer_del</a> (struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *tlist, struct <a class="el" href="structcld__timer.html">cld_timer</a> *timer)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">time_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#af2d858ca2e5d661f115b644ba379791a">cld_timers_run</a> (struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *tlist)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned long long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#aeaad81781bee9b049d2b262ca9992030">cld_sid2llu</a> (const uint8_t *sid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a507f8ca4a4467d65e05f283ee06f1988">cld_rand64</a> (void *p)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a661e0f231f0603639b31c482292edf42">cld_errstr</a> (enum cle_err_codes ecode)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a7504d1a510a87ec563b7db88212898da">cld_readport</a> (const char *fname)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#ab7b5b89112e0b20c8307f86b47477ca0">cld_authcheck</a> (struct <a class="el" href="structhail__log.html">hail_log</a> *log, const char *key, const void *buf, size_t buf_len, const void *sha)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a980285285d2538349696a52808b34b63">cld_authsign</a> (struct <a class="el" href="structhail__log.html">hail_log</a> *log, const char *key, const void *buf, size_t buf_len, void *sha)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a8a21f57a6072e086990859fb2aa960e1">cld_opstr</a> (enum cld_msg_op)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#abe70a08b00c8366212f7d79fe8c8b5a1">cld_pkt_hdr_to_str</a> (char *scratch, const char *pkt_hdr, size_t pkt_len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#acfd0ccbd43655ec223f1c18d258015f0">__cld_dump_buf</a> (const void *buf, size_t len)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cld__common_8h.html#a3fedb42bf61f53c7ee6b052b26cf49c3">__attribute__</a> ((packed)) cld_pkt_ftr</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Footer that appears at the end of each packet.  <a href="#a3fedb42bf61f53c7ee6b052b26cf49c3"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="aa6b77f5b267778672e0f4e93863401bf"></a><!-- doxytag: member="cld_common.h::CLD_ALIGN8" ref="aa6b77f5b267778672e0f4e93863401bf" args="(n)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CLD_ALIGN8</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">n</td><td>)</td>
          <td>&#160;&#160;&#160;((8 - ((n) &amp; 7)) &amp; 7)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a9aa3f5613cea2de18c8e96c7cca71289"></a><!-- doxytag: member="cld_common.h::CLD_PKT_FTR_LEN" ref="a9aa3f5613cea2de18c8e96c7cca71289" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CLD_PKT_FTR_LEN&#160;&#160;&#160;sizeof(struct cld_pkt_ftr)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Length of the packet footer. </p>
<p>This size is fixed </p>

</div>
</div>
<a class="anchor" id="a1b66dd9b3db89ec335e4119c79dcea2b"></a><!-- doxytag: member="cld_common.h::PKT_HDR_TO_STR_SCRATCH_LEN" ref="a1b66dd9b3db89ec335e4119c79dcea2b" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define PKT_HDR_TO_STR_SCRATCH_LEN&#160;&#160;&#160;128</td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a439f29c04e04bab1333a32e99f00e37c"></a><!-- doxytag: member="cld_common.h::SIDARG" ref="a439f29c04e04bab1333a32e99f00e37c" args="(sid)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SIDARG</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sid</td><td>)</td>
          <td>&#160;&#160;&#160;cld_sid2llu(sid)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a97647262121ac0919591c8c3d50d0c0d"></a><!-- doxytag: member="cld_common.h::SIDFMT" ref="a97647262121ac0919591c8c3d50d0c0d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SIDFMT&#160;&#160;&#160;&quot;%016llX&quot;</td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="a3fedb42bf61f53c7ee6b052b26cf49c3"></a><!-- doxytag: member="cld_common.h::__attribute__" ref="a3fedb42bf61f53c7ee6b052b26cf49c3" args="((packed)) cld_pkt_ftr" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct __attribute__ </td>
          <td>(</td>
          <td class="paramtype">(packed)&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Footer that appears at the end of each packet. </p>
<p>&lt; packet sequence ID</p>
<p>&lt; packet signature </p>

</div>
</div>
<a class="anchor" id="acfd0ccbd43655ec223f1c18d258015f0"></a><!-- doxytag: member="cld_common.h::__cld_dump_buf" ref="acfd0ccbd43655ec223f1c18d258015f0" args="(const void *buf, size_t len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void __cld_dump_buf </td>
          <td>(</td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="ab7b5b89112e0b20c8307f86b47477ca0"></a><!-- doxytag: member="cld_common.h::cld_authcheck" ref="ab7b5b89112e0b20c8307f86b47477ca0" args="(struct hail_log *log, const char *key, const void *buf, size_t buf_len, const void *sha)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int cld_authcheck </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structhail__log.html">hail_log</a> *&#160;</td>
          <td class="paramname"><em>log</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>sha</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a980285285d2538349696a52808b34b63"></a><!-- doxytag: member="cld_common.h::cld_authsign" ref="a980285285d2538349696a52808b34b63" args="(struct hail_log *log, const char *key, const void *buf, size_t buf_len, void *sha)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int cld_authsign </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structhail__log.html">hail_log</a> *&#160;</td>
          <td class="paramname"><em>log</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>sha</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a661e0f231f0603639b31c482292edf42"></a><!-- doxytag: member="cld_common.h::cld_errstr" ref="a661e0f231f0603639b31c482292edf42" args="(enum cle_err_codes ecode)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* cld_errstr </td>
          <td>(</td>
          <td class="paramtype">enum cle_err_codes&#160;</td>
          <td class="paramname"><em>ecode</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a8a21f57a6072e086990859fb2aa960e1"></a><!-- doxytag: member="cld_common.h::cld_opstr" ref="a8a21f57a6072e086990859fb2aa960e1" args="(enum cld_msg_op)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* cld_opstr </td>
          <td>(</td>
          <td class="paramtype">enum&#160;</td>
          <td class="paramname"><em>cld_msg_op</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="abe70a08b00c8366212f7d79fe8c8b5a1"></a><!-- doxytag: member="cld_common.h::cld_pkt_hdr_to_str" ref="abe70a08b00c8366212f7d79fe8c8b5a1" args="(char *scratch, const char *pkt_hdr, size_t pkt_len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* cld_pkt_hdr_to_str </td>
          <td>(</td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>scratch</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>pkt_hdr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>pkt_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a507f8ca4a4467d65e05f283ee06f1988"></a><!-- doxytag: member="cld_common.h::cld_rand64" ref="a507f8ca4a4467d65e05f283ee06f1988" args="(void *p)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cld_rand64 </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>p</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a7504d1a510a87ec563b7db88212898da"></a><!-- doxytag: member="cld_common.h::cld_readport" ref="a7504d1a510a87ec563b7db88212898da" args="(const char *fname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int cld_readport </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>fname</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="aeaad81781bee9b049d2b262ca9992030"></a><!-- doxytag: member="cld_common.h::cld_sid2llu" ref="aeaad81781bee9b049d2b262ca9992030" args="(const uint8_t *sid)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned long long cld_sid2llu </td>
          <td>(</td>
          <td class="paramtype">const uint8_t *&#160;</td>
          <td class="paramname"><em>sid</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="ab614597070f773b083c6840d8389a784"></a><!-- doxytag: member="cld_common.h::cld_timer_add" ref="ab614597070f773b083c6840d8389a784" args="(struct cld_timer_list *tlist, struct cld_timer *timer, time_t expires)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cld_timer_add </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *&#160;</td>
          <td class="paramname"><em>tlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcld__timer.html">cld_timer</a> *&#160;</td>
          <td class="paramname"><em>timer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">time_t&#160;</td>
          <td class="paramname"><em>expires</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a1e120aef38a7c242a806d6db4c97fdf8"></a><!-- doxytag: member="cld_common.h::cld_timer_del" ref="a1e120aef38a7c242a806d6db4c97fdf8" args="(struct cld_timer_list *tlist, struct cld_timer *timer)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cld_timer_del </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *&#160;</td>
          <td class="paramname"><em>tlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcld__timer.html">cld_timer</a> *&#160;</td>
          <td class="paramname"><em>timer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="af2d858ca2e5d661f115b644ba379791a"></a><!-- doxytag: member="cld_common.h::cld_timers_run" ref="af2d858ca2e5d661f115b644ba379791a" args="(struct cld_timer_list *tlist)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">time_t cld_timers_run </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcld__timer__list.html">cld_timer_list</a> *&#160;</td>
          <td class="paramname"><em>tlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
</div>


<hr class="footer"/><address class="footer"><small>
Generated on Sat Jan 28 2012 05:53:01 for CLD by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.5
</small></address>

</body>
</html>