cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<?xml-stylesheet type="text/xsl" href="/style/manual.fr.xsl"?>
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis<!-- English Revision : 1657407 -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!-- French translation : Lucien GENTIS -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!-- Reviewed by : Vincent Deffontaines -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Licensed to the Apache Software Foundation (ASF) under one or more
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor contributor license agreements. See the NOTICE file distributed with
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor this work for additional information regarding copyright ownership.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor The ASF licenses this file to You under the Apache License, Version 2.0
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor (the "License"); you may not use this file except in compliance with
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor the License. You may obtain a copy of the License at
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Unless required by applicable law or agreed to in writing, software
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor distributed under the License is distributed on an "AS IS" BASIS,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor See the License for the specific language governing permissions and
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor limitations under the License.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<description>Fournit une variable d'environnement contenant un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzoridentifiant unique pour chaque requête</description>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Ce module fournit un identifiant dont l'unicité est garantie
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor parmi "toutes" les requêtes sous des conditions très précises.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor L'identifiant unique le sera aussi parmi plusieurs machines
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor appartenant à un cluster correctement configuré. L'identifiant est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor affecté à la variable d'environnement <code>UNIQUE_ID</code> pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor chaque requête. Les identifiants uniques sont utiles pour diverses
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor raisons dont la nature se situe au delà de la portée de ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor document.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Tout d'abord un bref rappel de la manière dont le serveur Apache
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor fonctionne sous Unix (cette fonctionnalité n'étant actuellement pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor supportée sous Windows NT). Sous Unix, Apache crée plusieurs
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor processus enfants, ces derniers traitant les requêtes une par une.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Chaque processus enfant peut traiter plusieurs requêtes pendant sa
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor durée de vie. Dans le cadre de cette discussion, nous supposerons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor que les différents processus enfants ne s'échangent pas de données
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre eux. Nous nous référerons aux processus enfants sous le nom de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Votre site web est réparti entre une ou plusieurs machines dont
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor vous êtes l'administrateur, et que nous nommerons cluster de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor serveurs. Chaque serveur peut exécuter plusieurs instances d'Apache.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor L'ensemble de ces dernières sera considéré comme "l'Univers", et
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor sous certaines hypothèses, nous montrerons qu'il est possible dans
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor cet univers, de générer des identifiants uniques pour chaque
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor requête, sans pour autant nécessiter une communication importante
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre les différents serveurs du cluster.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Les machines de votre cluster doivent satisfaire ces conditions
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor (même si le cluster ne comporte qu'une machine, vous devez
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor synchroniser son horloge avec NTP) :</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <li>Les temps des machines sont synchronisés via NTP ou tout autre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor protocole de synchronisation du temps en réseau.</li>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <li>Les nom d'hôtes des machines sont tous différents, de façon à
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ce que le module puisse recevoir une adresse IP différente pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor chaque machine du cluster en effectuant une recherche sur le nom
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor d'hôte.</li>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Au vu des caractéristiques actuelles du système d'exploitation,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor nous supposerons que les pids (identifiants processus) sont codés
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor sur 32 bits. Si le système d'exploitation utilise plus de 32 bits
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor pour un pid, la correction est triviale mais doit être effectuée
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans le code.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Ces hypothèses posées, à un instant donné, nous pouvons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor distinguer tout processus httpd sur toute machine du cluster de tous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor les autres processus httpd. Pour ce faire, il suffit d'utiliser
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis l'adresse IP de la machine et le pid du processus httpd. Un
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis processus httpd peut traiter plusieurs requêtes simultanément si
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis vous utilisez un module MPM multi-threadé. Pour identifier les
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis threads, Apache httpd utilise en interne un index de threads. Ainsi,
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis afin de générer des identifiants uniques pour chaque requête, il
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis suffit d'effectuer une distinction en fonction du temps.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Pour déterminer le temps, nous utiliserons un repère de temps
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Unix (les secondes écoulées depuis le 1er janvier 1970 UTC), et un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur 16 bits. La précision du repère de temps n'étant que d'une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor seconde, le compteur va représenter 65536 valeurs par seconde. Le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor quadruplet <em>(adresse IP, pid, repère de temps, compteur)</em> est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor en mesure de distinguer 65536 requêtes par seconde par processus
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor httpd. Il peut cependant arriver que le même pid soit réutilisé au
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor cours du temps, et le compteur est là pour pallier cet
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor inconvénient.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Lorsqu'un processus enfant httpd est créé, le compteur est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor initialisé avec (nombre de microsecondes actuel divisé par 10)
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor modulo 65536 (cette formule a été choisie pour éliminer certains
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor problème de variance avec les bits de poids faibles du compteur de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor microsecondes sur certains systèmes). Lorsqu'un identifiant unique
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor est généré, le repère de temps utilisé est le moment où la requête
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor arrive sur le serveur web. Le compteur est incrémenté à chaque
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor création d'identifiant (et peut repasser à 0 lorsqu'il a atteint sa
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeur maximale).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Le noyau génère un pid pour chaque processus lors de sa création,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor et le compteur de pid est réinitialisé à une certaine valeur
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lorsqu'il a atteint sa valeur maximale (les pid sont codés sur 16
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor bits sous de nombreux Unixes, mais les systèmes les plus récents les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ont étendus à 32 bits). La même valeur de pid pourra donc être
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor réutilisée au cours du temps. Cependant, tant qu'elle n'est pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor réutilisée dans la même seconde, elle ne remet pas en cause
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor l'unicité de notre quadruplet. Nous supposerons donc que le système
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ne créera pas plus de 65536 processus en une seconde (ce nombre peut
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor être de 32768 sous certains Unixes, mais même dans ce cas, on est en
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor général loin de cette situation).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Il est possible que le temps se répète pour une raison
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor quelconque.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Supposons par exemple que l'horloge système soit retardée et repasse
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor par un temps passé (ou bien, comme elle avançait, elle a été remise
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor à l'heure, et elle repasse par un temps futur). Dans ce cas, il peut
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor être facilement démontré que le couple pid/repère de temps peut être
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor réutilisé. Le choix de la formule d'initialisation du compteur a
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor été effectué dans l'intention de pallier ce problème. Notez qu'un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor nombre vraiment aléatoire serait souhaitable pour initialiser le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur, mais il n'existe pas de tel nombre directement lisible sur
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor la plupart des systèmes (c'est à dire que vous ne pouvez pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utiliser rand() car vous devez déclencher le générateur avec une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeur unique, et vous ne pouvez pas utiliser le temps à cet effet
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor car celui-ci , au moins à la seconde près, s'est répété). Il ne
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor s'agit donc pas d'une défense parfaite.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Même si elle n'est pas parfaite, quel est le degré d'efficacité
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de cette défense ? Supposons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qu'une de vos machines serve au plus 500 requêtes par seconde (ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qui constitue une limite supérieure très raisonnable au moment où ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor document est écrit, car les systèmes ne se contentent en général pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de débiter des fichiers statiques). Pour y parvenir, un certain nombre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de processus enfants sera nécessaire, qui dépendra du nombre de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor clients simultanés présents. Mais soyons pessimiste et supposons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qu'un seul processus enfant soit capable de servir 500 requêtes par
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Il existe 1000 valeurs de démarrage possibles du compteur pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lesquelles deux séquences de 500 requêtes puissent se recouvrir. Il
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor y a donc 1,5% de chance que le processus enfant répète une valeur de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur si le temps se répète (avec une résolution d'une seconde),
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor et l'unicité sera alors remise en cause. C'est cependant un exemple
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor très pessimiste, et avec les valeurs du monde réel, il y a bien
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor moins de chances que cela ne se produise. Si vous estimez que ceci a
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor tout de même quelque chances de se produire sur votre système, vous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor pouvez migrer vers un compteur à 32 bits (en modifiant le code).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>On pourrait supposer que ceci a plus de chance de se produire
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lors du passage à l'heure d'hiver où l'horloge est "retardée". Cela
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ne constitue cependant pas un problème car les temps pris en compte
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ici sont des temps UTC, qui vont "toujours" de l'avant. Notez que
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor les Unixes à base de processeur x86 peuvent nécessiter une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor configuration particulière pour que ceci soit vrai -- il doivent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor être configurés pour assumer que l'horloge système est en UTC et
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compenser de manière appropriée. Mais même dans ce cas, si vous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utilisez NTP, votre temps UTC sera correct peu après le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor redémarrage.</p>
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis <!-- FIXME: thread_index is unsigned int, so not always 32bit.-->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>La variable d'environnement <code>UNIQUE_ID</code> est construite
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis par codage du quadruplet de 144 bits (adresse IP sur 32 bits, pid
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis sur 32 bits, repère de temps sur 32 bits, compteur 16 bits et index
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis de threads sur 32 bits) en
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utilisant l'alphabet <code>[A-Za-z0-9@-]</code> d'une manière
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor similaire à celle du codage MIME base64, et sa valeur se présente
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis sous la forme d'une chaîne de 24 caractères. L'alphabet MIME base64
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor est en fait <code>[A-Za-z0-9+/]</code> ; cependant, les caractères
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>+</code> et <code>/</code> nécessitent un codage particulier
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans les URLs, ce qui rend leur utilisation peu commode. Toutes les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeurs sont codées dans l'ordre des octets d'une adresse réseau de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor façon à ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor que le codage soit comparable entre des architectures où l'ordre des
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor octets est différent. L'ordre réel de codage est : repère de temps,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor adresse IP, pid, compteur. Cet ordre de codage possède un but
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor précis, mais il faut souligner que les applications n'ont aucun
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor intérêt à entrer dans les détails de ce codage. Les applications
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor doivent se contenter de traiter la variable <code>UNIQUE_ID</code>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor comme un symbole opaque, qui peut être comparé avec d'autres
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>UNIQUE_ID</code>s en ne testant que leur égalité.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>L'ordre a été choisi de façon à ce qu'il soit possible de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor modifier le codage dans le futur sans avoir à se préoccuper de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor conflits éventuels avec une base de données de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>UNIQUE_ID</code>s existante. Les nouveaux codages doivent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor conserver le repère de temps comme premier élément, et pour le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor reste, utiliser les même alphabet et longueur en bits. Comme les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor repères de temps constituent essentiellement un séquence croissante,
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis il suffit que toutes les machines du cluster arrêtent de traiter
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis toute requête dans la même <em>seconde repère</em>, et n'utilisent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor alors plus l'ancien format de codage. Ensuite, elles peuvent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor reprendre le traitement des requêtes en utilisant les nouveaux
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor codages.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Nous pensons que ceci apporte une solution relativement portable
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis au problème. Les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor identifiants générés possèdent une durée de vie pratiquement infinie
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor car les identifiants futurs pourront être allongés selon les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor besoins. Pratiquement aucune communication n'est requise entre les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor machines du cluster (seule la synchronisation NTP est requise, ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qui représente une charge très faible), et aucune communication
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre les processus httpd n'est nécessaire (la communication est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor implicite et incluse dans le pid assigné par le noyau). Dans des
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor situations très spécifiques, l'identifiant peut être raccourci, mais
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans ce cas, d'avantage d'informations doivent être admises (par
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor exemple, les 32 bits de l'adresse IP sont excessifs pour la plupart
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor des sites, mais il n'existe pas de valeur de remplacement portable
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor plus courte).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor</modulesynopsis>