File: dso.html.fr

package info (click to toggle)
apache2 2.4.10-10%2Bdeb8u12
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 53,768 kB
  • sloc: ansic: 156,128; sh: 12,961; perl: 1,760; awk: 738; makefile: 577; lex: 374; yacc: 161
file content (354 lines) | stat: -rw-r--r-- 22,149 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Support des objets dynamiques partags (DSO) - Serveur Apache HTTP Version 2.4</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<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" />
<script src="./style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.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>
<p class="apache">Serveur Apache HTTP Version 2.4</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
<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.4</a></div><div id="page-content"><div id="preamble"><h1>Support des objets dynamiques partags (DSO)</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/dso.html" title="Franais">&nbsp;fr&nbsp;</a> |
<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Trke">&nbsp;tr&nbsp;</a></p>
</div>

    <p>La conception modulaire du serveur HTTP Apache permet  l'administrateur
    de choisir les fonctionnalits  inclure dans le serveur en slectionnant
    un certain nombre de modules. Les modules seront compils en tant
    qu'Objets Dynamiques Partags (Dynamic Shared Objects ou DSOs)
    qui mnent une existence spare du fichier binaire principal
    <code class="program"><a href="./programs/httpd.html">httpd</a></code>. Les modules DSO peuvent tre compils en
    mme temps que le serveur, ou compils et ajouts ultrieurement via
    l'Outil des Extensions  Apache (Apache Extension Tool ou
    <code class="program"><a href="./programs/apxs.html">apxs</a></code>).</p>
    <p>Les modules peuvent aussi tre intgrs statiquement dans le
    binaire <code class="program"><a href="./programs/httpd.html">httpd</a></code> lors de la compilation de ce
    dernier.</p>

    <p>Ce document dcrit l'utilisation des modules DSO ainsi que les dessous
    de leur fonctionnement.</p>
  </div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Implmentation</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#usage">Mode d'emploi succinct</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#background">Les dessous du fonctionnement des DSO</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#advantages">Avantages et inconvnients</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="implementation" id="implementation">Implmentation</a></h2>

<table class="related"><tr><th>Modules Apparents</th><th>Directives Apparentes</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>

    <p>Le support DSO pour le chargement de modules individuels d'Apache
    httpd est
    assur par un module nomm <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> qui doit tre compil
    statiquement dans le coeur d'Apache httpd. Il s'agit du seul module avec le
    module <code class="module"><a href="./mod/core.html">core</a></code>  ne pas pouvoir tre compil en tant que
    module DSO lui-mme. Pratiquement tous les autres modules d'Apache httpd
    distribus seront alors compils en tant que modules DSO. Une fois
    compil en tant que module DSO nomm <code>mod_foo.so</code>, un
    module peut tre charg en mmoire au
    dmarrage ou redmarrage du serveur  l'aide de
    la directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> du module
    <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>, place
    dans votre fichier <code>httpd.conf</code>.</p>
    <p>La compilation en mode DSO peut tre dsactive pour certains
    modules via l'option <code>--enable-mods-static</code> du script
    <code class="program"><a href="./programs/configure.html">configure</a></code>, comme expliqu dans la <a href="install.html">Documentation sur l'installation</a>.</p>

    <p>Un utilitaire permet de simplifier la cration de
    fichiers DSO pour les modules d'Apache httpd
    (particulirement pour les modules tiers) ; il s'agit du programme nomm
    <code class="program"><a href="./programs/apxs.html">apxs</a></code> (<dfn>APache
    eXtenSion</dfn>). On peut l'utiliser pour construire des modules de type
    DSO <em>en dehors</em> de l'arborescence des sources d'Apache httpd. L'ide est
    simple :  l'installation du serveur HTTP Apache, la procdure <code>make install</code>
    du script <code class="program"><a href="./programs/configure.html">configure</a></code> installe les fichiers d'en-ttes
    d'Apache httpd et positionne, pour la plateforme de compilation,  les drapeaux du compilateur et de
    l'diteur de liens  l'intrieur du programme
    <code class="program"><a href="./programs/apxs.html">apxs</a></code>, qui sera utilis pour la construction de fichiers DSO.
    Il est ainsi possible d'utiliser le programme <code class="program"><a href="./programs/apxs.html">apxs</a></code>
    pour compiler ses sources de modules Apache httpd sans avoir besoin de
    l'arborescence des sources de la distribution d'Apache, et sans avoir 
    rgler les drapeaux du compilateur et de l'diteur de liens pour le support DSO.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">Mode d'emploi succinct</a></h2>

    <p>Afin que vous puissiez vous faire une ide des fonctionnalits DSO
    du serveur HTTP Apache 2.x, en voici un rsum court et concis :</p>

    <ol>
      <li>
        <p>Construire et installer un module Apache httpd <em>faisant partie de la
	distribution</em>, par exemple <code>mod_foo.c</code>,
	en tant que module DSO <code>mod_foo.so</code> :</p>

<div class="example"><p><code>
$ ./configure --prefix=/chemin/vers/installation --enable-foo<br />
$ make install
</code></p></div>
      </li>

      <li>
        <p>Configure le serveur HTTP Apache avec tous les modules
	activs. Seul un jeu de modules de base sera charg au
	dmarrage du serveur. Vous pouvez modifier ce jeu de modules
	chargs au dmarrage en activant ou dsactivant les directives <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> correspondantes dans le
      fichier <code>httpd.conf</code>.</p>

<div class="example"><p><code>
$ ./configure --enable-mods-shared=all<br />
$ make install
</code></p></div>

        <p>L'argument <code>most</code> de l'option
	<code>--enable-modules</code> indique que tous les modules
	non-exprimentaux ou qui ne sont pas l  titre d'exemple seront
	compils.</p>
      </li>

      <li>
      <p>Certains modules ne sont utiliss que par les dveloppeurs et
      ne seront pas compils. Si vous voulez les utiliser, spcifiez
      l'option <em>all</em>. Pour compiler tous les modules disponibles,
      y compris les modules de dveloppeurs, spcifiez l'option
      <em>reallyall</em>. En outre, la directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> peut tre active pour tous
      les modules compils via l'option du script configure
      <code>--enable-load-all-modules</code>.</p>

<div class="example"><p><code>
$ ./configure --enable-mods-shared=reallyall --enable-load-all-modules<br />
$ make install
</code></p></div>
      </li>

      <li>
        Construire et installer un module Apache httpd <em>tiers</em>, par exemple
        <code>mod_foo.c</code>, en tant que module DSO
        <code>mod_foo.so</code> <em>en dehors</em> de l'arborescence des sources
	d'Apache httpd  l'aide du programme <code class="program"><a href="./programs/apxs.html">apxs</a></code> :

<div class="example"><p><code>
$ cd /chemin/vers/module_tiers<br />
$ apxs -cia mod_foo.c
</code></p></div>
      </li>
    </ol>

    <p>Dans tous les cas, une fois le module partag compil, vous devez
    ajouter une directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
    dans le fichier <code>httpd.conf</code> pour qu'Apache httpd active le module.</p>

    <p>Voir la <a href="programs/apxs.html">documentation sur apxs</a>
    pour plus de dtails.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="background" id="background">Les dessous du fonctionnement des DSO</a></h2>

    <p>Les clnes modernes d'UNIX proposent un mcanisme
    appel dition de liens et chargement dynamiques d'
    <em>Objets Dynamiques Partags</em> (DSO), qui permet de construire un
    morceau de programme dans un format spcial pour le rendre chargeable
     l'excution dans l'espace d'adressage d'un programme excutable.</p>

    <p>Ce chargement peut s'effectuer de deux manires : automatiquement par
    un programme systme appel <code>ld.so</code> quand un programme
    excutable est dmarr, ou manuellement  partir du programme en cours
    d'excution via sa propre interface systme vers le chargeur Unix  l'aide
    des appels systme <code>dlopen()/dlsym()</code>.</p>

    <p>Dans la premire mthode, les DSO sont en gnral appels
    <em>bibliothques partages</em> ou encore <em>bibliothques DSO</em>, et
    possdent des noms du style
    <code>libfoo.so</code> ou <code>libfoo.so.1.2</code>. Ils rsident dans un
    rpertoire systme (en gnral <code>/usr/lib</code>)
    et le lien avec le programme excutable est tabli  la compilation en
    ajoutant <code>-lfoo</code>  la commande de l'diteur de liens. Les
    rfrences  la bibliothque sont ainsi codes en dur dans le fichier du
    programme excutable de faon  ce qu'au dmarrage du programme, le
    chargeur Unix soit capable de localiser <code>libfoo.so</code> dans
    <code>/usr/lib</code>, dans des chemins cods en dur  l'aide d'options de
    l'diteur de liens comme <code>-R</code> ou dans des chemins dfinis par la
    variable d'environnement
    <code>LD_LIBRARY_PATH</code>. Le chargeur peut ds lors rsoudre tous les symboles
    (jusque l non encore rsolus) du DSO dans le programme excutable.</p>

    <p>Les symboles du programme excutable ne sont en gnral pas
    rfrencs par le DSO (car c'est une bibliothque de code  usage gnral
    et rutilisable),
    et ainsi aucune rsolution supplmentaire n'est ncessaire. De son ct,
    le programme excutable ne doit accomplir aucune action particulire
    pour utiliser les
    symboles du DSO car toutes les rsolutions sont effectues par le chargeur
    Unix. En fait, le code permettant d'invoquer
    <code>ld.so</code> fait partie du code de dmarrage pour l'excution qui
    est li dans tout programme excutable non statiquement li.
    L'avantage du chargement dynamique du code d'une bibliothque partage est
    vident : le code de la bibliothque ne doit tre stock qu'une seule fois
    dans une bibliothque systme telle que <code>libc.so</code>, ce qui permet
    d'conomiser de l'espace disque pour les autres programmes.</p>

    <p>Dans la seconde mthode, les DSO sont en gnral appels <em>objets
    partags</em> ou <em>fichiers DSO</em>, et peuvent tre nomms avec
    l'extension de son choix (bien que le nom conseill soit du style
    <code>foo.so</code>). Ces fichiers rsident en gnral dans un rpertoire
    spcifique  un programme, et aucun lien n'est automatiquement tabli avec
    le programme excutable dans lequel ils sont utiliss.
    Le programme excutable charge manuellement le DSO  l'excution dans son
    espace d'adressage  l'aide de l'appel systme <code>dlopen()</code>.
    A ce moment, aucune rsolution de symboles du DSO n'est effectue pour le
    programme excutable. Par contre le chargeur Unix
    rsoud automatiquement tout symbole du DSO (non encore rsolu)
    faisant partie de l'ensemble de symboles export par le programme
    excutable et ses bibliothques DSO dj charges (et en particulier tous
    les symboles de la bibliothque  tout faire <code>libc.so</code>).
    De cette faon, le DSO prend connaissance de l'ensemble de symboles du
    programme excutable comme s'il avait t li statiquement avec lui
    auparavant.</p>

    <p>Finalement, pour tirer profit de l'API des DSO, le programme excutable
    doit rsoudre certains symboles du DSO  l'aide de l'appel systme
    <code>dlsym()</code> pour une utilisation ultrieure dans les tables de
    distribution, <em>etc...</em> En d'autres termes, le programme excutable doit
    rsoudre manuellement tous les symboles dont il a besoin pour pouvoir les
    utiliser.
    Avantage d'un tel mcanisme : les modules optionnels du programme n'ont pas
    besoin d'tre chargs (et ne gaspillent donc pas de ressources mmoire)
    tant qu'il ne sont pas ncessaires au programme en question. Si ncessaire,
    ces modules peuvent tre chargs dynamiquement afin d'tendre les
    fonctionnalits de base du programme.</p>

    <p>Bien que ce mcanisme DSO paraisse vident, il comporte au moins une
    tape difficile : la rsolution des symboles depuis le programme excutable
    pour le DSO lorsqu'on utilise un DSO pour tendre les fonctionnalits d'un
    programme (la seconde mthode). Pourquoi ? Parce que la "rsolution
    inverse" des symboles DSO  partir du jeu de symboles du programme
    excutable dpend de la conception de la bibliothque (la bibliothque n'a
    aucune information sur le programme qui l'utilise) et n'est ni standardise
    ni disponible sur toutes les plateformes. En pratique, les symboles globaux
    du programme excutable ne sont en gnral pas rexports et donc
    indisponibles pour l'utilisation dans un DSO. Trouver une mthode pour
    forcer l'diteur de liens  exporter tous les symboles globaux est le
    principal problme que l'on doit rsoudre lorsqu'on utilise un DSO pour
    tendre les fonctionnalits d'un programme au moment de son excution.</p>

    <p>L'approche des bibliothques partages est la plus courante, parce que
    c'est dans cette optique que le mcanisme DSO a t conu ; c'est cette
    approche qui est ainsi
    utilise par pratiquement tous les types de bibliothques que fournit le
    systme d'exploitation.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="advantages" id="advantages">Avantages et inconvnients</a></h2>

    <p>Les fonctionnalits ci-dessus bases sur les DSO prsentent les
    avantages suivants :</p>

    <ul>
      <li>Le paquetage du serveur est plus flexible  l'excution car le
      processus serveur peut tre assembl  l'excution via la
      directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> du fichier de
      configuration <code>httpd.conf</code> plutt que par des options du script
      <code class="program"><a href="./programs/configure.html">configure</a></code>  la compilation. Par exemple,
      on peut ainsi excuter diffrentes instances du serveur
      (standard et version SSL, version minimale et version dynamique
      [mod_perl, mod_php], <em>etc...</em>)  partir d'une seule installation
      d'Apache httpd.</li>

      <li>Le paquetage du serveur peut tre facilement tendu avec des modules
      tiers, mme aprs l'installation. Ceci prsente un gros
      avantage pour les mainteneurs de paquetages destins aux distributions,
      car ils peuvent crer un paquetage Apache httpd de base, et des paquetages
      additionnels contenant des extensions telles que PHP, mod_perl, mod_fastcgi,
      <em>etc...</em></li>

      <li>Une facilit de prototypage des modules Apache httpd, car la paire
      DSO/<code class="program"><a href="./programs/apxs.html">apxs</a></code> vous permet d'une part de travailler en
      dehors de l'arborescence des sources d'Apache httpd, et d'autre part de n'avoir
      besoin que de la commande <code>apxs -i</code>
      suivie d'un <code>apachectl restart</code> pour introduire une nouvelle
      version de votre module frachement dvelopp dans le serveur HTTP Apache
      en cours d'excution.</li>
    </ul>

    <p>Inconvnients des DSO :</p>

    <ul>
      <li>Le serveur est environ 20 % plus lent au dmarrage
       cause des rsolutions de symboles supplmentaires que le chargeur
      Unix doit effectuer.</li>

      <li>Le serveur est environ 5 % plus lent  l'excution
      sur certaines plates-formes, car le code indpendant de la position (PIC)
      ncessite parfois des manipulations compliques en assembleur pour
      l'adressage relatif qui ne sont pas toujours aussi rapides que celles
      que permet l'adressage absolu.</li>

      <li>Comme les modules DSO ne peuvent pas tre lis avec d'autres
      bibliothques bases sur DSO (<code>ld -lfoo</code>) sur toutes les
      plates-formes
      (par exemple, les plates-formes bases sur a.out ne fournissent en
      gnral pas cette fonctionnalit alors que les plates-formes bases sur
      ELF le font), vous ne pouvez pas utiliser le mcanisme DSO pour tous les
      types de modules. Ou en d'autres termes, les modules compils comme
      fichiers DSO sont contraints de n'utiliser que les symboles du coeur
      d'Apache httpd, de la bibliothque C
      (<code>libc</code>) et toutes autres bibliothques statiques ou
      dynamiques utilises par le coeur d'Apache httpd, ou d'archives statiques
      (<code>libfoo.a</code>) contenant du code indpendant de la
      position (PIC).
      Il y a deux solutions pour utiliser un autre type de code : soit le
      coeur d'Apache httpd contient dj lui-mme une rfrence au code, soit vous
      chargez le code vous-mme via <code>dlopen()</code>.</li>
    </ul>

</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/dso.html" title="Franais">&nbsp;fr&nbsp;</a> |
<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Trke">&nbsp;tr&nbsp;</a></p>
</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>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/dso.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autoris sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>