]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_firehose.html.fr
Rebuild.
[apache] / docs / manual / mod / mod_firehose.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
4 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
5 <!--
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7               This file is generated from xml source: DO NOT EDIT
8         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9       -->
10 <title>mod_firehose - Serveur Apache HTTP Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 </script>
16
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
18 <body>
19 <div id="page-header">
20 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
21 <p class="apache">Serveur Apache HTTP Version 2.5</p>
22 <img alt="" src="../images/feather.png" /></div>
23 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
24 <div id="path">
25 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
26 <div id="page-content">
27 <div id="preamble"><h1>Module Apache mod_firehose</h1>
28 <div class="toplang">
29 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_firehose.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
30 <a href="../fr/mod/mod_firehose.html" title="Français">&nbsp;fr&nbsp;</a></p>
31 </div>
32 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multiplexage des entrées/sorties vers un fichier ou un pipe.</td></tr>
33 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
34 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>firehose_module</td></tr>
35 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_firehose.c</td></tr></table>
36 <h3>Sommaire</h3>
37
38     <p><code>mod_firehose</code> fournit un mécanisme permettant
39     d'enregistrer les données transmises entre le serveur httpd et le
40     client au niveau élémentaire de la connexion dans un fichier ou un
41     pipe, de façon à ce que les données puissent être analysées ou
42     rejouées ultérieurement par le serveur. Il s'apparente à un "tcpdump
43     pour httpd".</p>
44
45     <p>Les connexions sont enregistrées après décodage de la couche SSL,
46     et peuvent ainsi être utilisées dans le cadre d'une réquisition
47     légale.</p>
48
49     <p>L'utilitaire <code class="program"><a href="../programs/firehose.html">firehose</a></code> permet en retour de
50     démultiplexer le flux enregistré dans des fichiers individuels pour
51     analyse ou rejeu via des outils tels que <code>netcat</code>.</p>
52
53     <div class="note"><h3>AVERTISSEMENT</h3>Ce module ignore tout mécanisme
54     invoqué au niveau de la requête pour rendre les données privées. Il
55     est donc de la responsabilité de l'administrateur de s'assurer que
56     les données privées ne seront pas compromises par son utilisation.
57     </div>
58
59 </div>
60 <div id="quickview"><h3>Sujets</h3>
61 <ul id="topics">
62 <li><img alt="" src="../images/down.gif" /> <a href="#enable">Activation de la "Lance à incendie" (Firehose)</a></li>
63 <li><img alt="" src="../images/down.gif" /> <a href="#format">Format du flux</a></li>
64 </ul><h3 class="directives">Directives</h3>
65 <ul id="toc">
66 <li><img alt="" src="../images/down.gif" /> <a href="#firehoseconnectioninput">FirehoseConnectionInput</a></li>
67 <li><img alt="" src="../images/down.gif" /> <a href="#firehoseconnectionoutput">FirehoseConnectionOutput</a></li>
68 <li><img alt="" src="../images/down.gif" /> <a href="#firehoseproxyconnectioninput">FirehoseProxyConnectionInput</a></li>
69 <li><img alt="" src="../images/down.gif" /> <a href="#firehoseproxyconnectionoutput">FirehoseProxyConnectionOutput</a></li>
70 <li><img alt="" src="../images/down.gif" /> <a href="#firehoserequestinput">FirehoseRequestInput</a></li>
71 <li><img alt="" src="../images/down.gif" /> <a href="#firehoserequestoutput">FirehoseRequestOutput</a></li>
72 </ul>
73 <h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_firehose">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_firehose">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
74 <ul class="seealso">
75 <li><code class="program"><a href="../programs/firehose.html">firehose</a></code></li>
76 <li><a href="#comments_section">Commentaires</a></li></ul></div>
77 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
78 <div class="section">
79 <h2><a name="enable" id="enable">Activation de la "Lance à incendie" (Firehose)</a><a title="Lien permanent" href="#enable" class="permalink">&para;</a></h2>
80     
81
82     <p>Pour activer ce module, il doit être compilé et chargé via la
83     configuration de votre instance httpd courante, et les directives
84     ci-dessous permettent de sélectionner les données que vous souhaitez
85     enregistrer.</p>
86     
87     <p>Il est possible d'enregistrer les données entrantes et sortantes
88     dans le même fichier, car la direction du flux est indiquée dans
89     chaque fragment.</p>
90
91     <p>Il est possible d'écrire vers des fichiers normaux ou des listes
92     fifos (pipes). Dans le cas des listes fifos, mod_firehose fait en
93     sorte que la taille des paquets ne dépasse pas la valeur de PIPE_BUF
94     afin de s'assurer que l'écriture de ces derniers s'effectue en une
95     seule fois.</p>
96
97     <p>Si une liste fifo sous forme de pipe doit être utilisée, pour que
98     cette dernière soit ouverte en écriture, certaines données doivent
99     en être extraites avant le démarrage de httpd. Si l'ouverture du
100     pipe échoue, mod_firehose ne sera pas activé, et le serveur sera
101     lancé normalement.</p>
102
103     <p>Par défaut, toute tentative d'écriture bloque le serveur. Si le
104     serveur a été compilé avec APR version 2.0 ou supérieure, et si le
105     paramètre "nonblock" a été spécifié, les écritures dans les fichiers
106     seront non blocantes, et tout dépassement de tampon entraînera la
107     perte des données de débogage. Dans ce cas, il est possible donner
108     la priorité à l'exécution du serveur sur l'enregistrement des
109     données firehose.</p>
110
111 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
112 <div class="section">
113 <h2><a name="format" id="format">Format du flux</a><a title="Lien permanent" href="#format" class="permalink">&para;</a></h2>
114     
115
116     <p>En général, le serveur gère plusieurs connexions simultanément,
117     et de ce fait, les requêtes et les réponses doivent être
118     multiplexées avant d'être écrites dans le firehose.</p>
119     
120     <p>Chaque fragment se présente sous la forme d'un texte en clair
121     de façon à ce qu'un firehose puisse être ouvert et inspecté par un
122     éditeur de texte standard. Il est aussi possible d'utiliser
123     l'utilitaire <code class="program"><a href="../programs/firehose.html">firehose</a></code> pour démultiplexer le
124     firehose en requêtes ou connexions individuelles.</p>
125
126     <p>La taille maximale des fragments multiplexés est définie par la
127     variable PIPE_BUF. Elle correspond à la taille maximale d'un
128     élément que le système peut écrire. Si la taille des fragments
129     multiplexés reste en dessous de PIPE_BUF, le module garantit que les
130     contenus des différents fragments ne se recouperont pas. La valeur
131     de PIPE_BUF varie en fonction du système d'exploitation.</p>
132
133     <p>La BNF du format du fragment est la suivante :</p>
134
135     <pre> stream = 0*(fragment)
136
137  fragment = header CRLF body CRLF
138
139  header = length SPC timestamp SPC ( request | response ) SPC uuid SPC count
140
141  length = &lt;longueur de fragment sur 16 octets hexadécimaux&gt;
142  timestamp = &lt;temps depuis 1970 en microsecondes sur 16 octets hexadécimaux&gt;
143  request = "&lt;"
144  response = "&gt;"
145  uuid = &lt;uuid formaté de la connexion&gt;
146  count = &lt;numéro hexadécimal du fragment dans la connexion&gt;
147
148  body = &lt;contenu binaire du fragment&gt;
149
150  SPC = &lt;un espace&gt;
151  CRLF = &lt;un retour chariot suivi d'une nouvelle ligne&gt;</pre>
152
153     <p>Tous les fragments d'une connexion ou d'une requête partagent le
154     même UUID, selon que les connexions ou les requêtes sont
155     enregistrées ou non. Si les connexions sont enregistrées, plusieurs
156     requêtes peuvent apparaître dans la même connexion. Un fragment de
157     longueur nulle indique la fin de la connexion.</p>
158
159     <p>Certains fragments peuvent manquer ou être supprimés si le
160     processus qui les lit est trop lent. Si cela se produit, il y aura
161     des trous dans le comptage des connections. Un avertissement
162     indiquant l'UUID et le numéro du fragment supprimé sera enregistré
163     dans le journal des erreurs.</p>
164
165     <p>En cas de crash ou d'arrêt forcé du processus httpd, il est
166     possible que le fragment vide de terminaison n'apparaisse pas. Cela
167     peut aussi se produire si le processus qui lit les fragments n'est
168     pas assez rapide.</p>
169
170 </div>
171 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
172 <div class="directive-section"><h2><a name="firehoseconnectioninput" id="firehoseconnectioninput">Directive</a> <a name="FirehoseConnectionInput" id="FirehoseConnectionInput">FirehoseConnectionInput</a><a title="Lien permanent" href="#firehoseconnectioninput" class="permalink">&para;</a></h2>
173 <table class="directive">
174 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic entrant dans le serveur à chaque
175 connexion.</td></tr>
176 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseConnectionInput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
177 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
178 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
179 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
180 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
181 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur HTTP
182 Apache.</td></tr>
183 </table>
184     <p>Capture le trafic entrant dans le serveur à chaque connexion.
185     Plusieurs requêtes seront capturées pour la même connexion si les
186     connexions persistantes sont activées.</p>
187
188     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseConnectionInput connection-input.firehose</pre>
189 </div>
190
191 </div>
192 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
193 <div class="directive-section"><h2><a name="firehoseconnectionoutput" id="firehoseconnectionoutput">Directive</a> <a name="FirehoseConnectionOutput" id="FirehoseConnectionOutput">FirehoseConnectionOutput</a><a title="Lien permanent" href="#firehoseconnectionoutput" class="permalink">&para;</a></h2>
194 <table class="directive">
195 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic sortant du serveur à chaque connexion</td></tr>
196 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
197 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
198 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
199 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
200 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
201 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur HTTP
202 Apache.</td></tr>
203 </table>
204     <p>Capture le trafic sortant du serveur à chaque connexion.
205     Plusieurs requêtes seront capturées pour la même connexion si les
206     connexions persistantes sont activées.
207     </p>
208
209     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseConnectionOutput connection-output.firehose</pre>
210 </div>
211
212 </div>
213 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
214 <div class="directive-section"><h2><a name="firehoseproxyconnectioninput" id="firehoseproxyconnectioninput">Directive</a> <a name="FirehoseProxyConnectionInput" id="FirehoseProxyConnectionInput">FirehoseProxyConnectionInput</a><a title="Lien permanent" href="#firehoseproxyconnectioninput" class="permalink">&para;</a></h2>
215 <table class="directive">
216 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic entrant dans mod_proxy</td></tr>
217 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseProxyConnectionInput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
218 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
219 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
220 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
221 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
222 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td /></tr>
223 </table>
224     <p>Capture le trafic reçu par mod_proxy.</p>
225
226     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseProxyConnectionInput proxy-input.firehose</pre>
227 </div>
228
229 </div>
230 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
231 <div class="directive-section"><h2><a name="firehoseproxyconnectionoutput" id="firehoseproxyconnectionoutput">Directive</a> <a name="FirehoseProxyConnectionOutput" id="FirehoseProxyConnectionOutput">FirehoseProxyConnectionOutput</a><a title="Lien permanent" href="#firehoseproxyconnectionoutput" class="permalink">&para;</a></h2>
232 <table class="directive">
233 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic envoyé par mod_proxy</td></tr>
234 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseProxyConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
235 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
236 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
237 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
238 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
239 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur HTTP
240 Apache.</td></tr>
241 </table>
242     <p>Capture le trafic envoyé par mod_proxy.</p>
243
244     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseProxyConnectionOutput proxy-output.firehose</pre>
245 </div>
246
247 </div>
248 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
249 <div class="directive-section"><h2><a name="firehoserequestinput" id="firehoserequestinput">Directive</a> <a name="FirehoseRequestInput" id="FirehoseRequestInput">FirehoseRequestInput</a><a title="Lien permanent" href="#firehoserequestinput" class="permalink">&para;</a></h2>
250 <table class="directive">
251 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic entrant dans le serveur à chaque requête</td></tr>
252 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseRequestInput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
253 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
254 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
255 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
256 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
257 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur HTTP
258 Apache.</td></tr>
259 </table>
260     <p>Capture le trafic entrant dans le serveur à chaque requête. Les
261     requêtes sont capturées séparément, que les connexions persistantes
262     soient activées ou non.</p>
263
264     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseRequestInput request-input.firehose</pre>
265 </div>
266
267 </div>
268 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
269 <div class="directive-section"><h2><a name="firehoserequestoutput" id="firehoserequestoutput">Directive</a> <a name="FirehoseRequestOutput" id="FirehoseRequestOutput">FirehoseRequestOutput</a><a title="Lien permanent" href="#firehoserequestoutput" class="permalink">&para;</a></h2>
270 <table class="directive">
271 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Capture le trafic sortant du serveur à chaque requête</td></tr>
272 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FirehoseRequestOutput <var>[ block | nonblock ]</var> <var>filename</var></code></td></tr>
273 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>none</code></td></tr>
274 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
275 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
276 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_firehose</td></tr>
277 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur HTTP
278 Apache.</td></tr>
279 </table>
280     <p>Capture le trafic sortant du serveur à chaque requête. Les
281     requêtes sont capturées séparément, que les connexions persistantes
282     soient activées ou non.</p>
283
284     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">FirehoseRequestOutput request-output.firehose</pre>
285 </div>
286
287 </div>
288 </div>
289 <div class="bottomlang">
290 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_firehose.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
291 <a href="../fr/mod/mod_firehose.html" title="Français">&nbsp;fr&nbsp;</a></p>
292 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
293 <script type="text/javascript"><!--//--><![CDATA[//><!--
294 var comments_shortname = 'httpd';
295 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_firehose.html';
296 (function(w, d) {
297     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
298         d.write('<div id="comments_thread"><\/div>');
299         var s = d.createElement('script');
300         s.type = 'text/javascript';
301         s.async = true;
302         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
303         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
304     }
305     else {
306         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
307     }
308 })(window, document);
309 //--><!]]></script></div><div id="footer">
310 <p class="apache">Copyright 2018 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
311 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
312 if (typeof(prettyPrint) !== 'undefined') {
313     prettyPrint();
314 }
315 //--><!]]></script>
316 </body></html>