... Mailingliste[*]
http://ml.junetz.de/list/listinfo/dsp-announce/
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Rauschmittel[*]
Oder? ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... LAMP[*]
Linux, Apache, MySQL, PHP
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... WAMP[*]
Windows, Apache, MySQL, PHP
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... WIMP[*]
Windows, IIS, MySQL, PHP
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... FAQs[*]
Frequently Asked Questions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... AFAPQ[*]
Answer For Any Possible Question
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... SQL[*]
Structured Query Language
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... DBS[*]
Datenbanksysteme, mehr dazu im ersten Teil
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... hat[*]
Ich lasse es mir natürlich nicht nehmen, überall noch etwas zu korrigieren. Im Gegenzug ist Jens immer noch so freundlich und korrigiert meine Sachen ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Autorenteam[*]
Team = Toll, ein anderer macht's!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Version[*]
die war irgendwann 1998
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Homepage[*]
die eigentlich gar nicht so toll war
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Primärschlüssel[*]
Primärschlüssel werden im folgenden durch führende eine Raute (#) gekennzeichnet
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Primärschlüssel[*]
bei zusammengesetzten Primärschlüsseln wird im Folgenden jeder Teil mit einer führende # gekennzeichnet
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Konsole[*]
unter Windows: MS-DOS Eingabeaufforderung
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Prompt[*]
unter DOS z.B. c:
>
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ASCII[*]
American Standard Code for Information Interchange
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...ASC [*]
engl. ascending
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...DESC [*]
engl. descending
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Ausdrücke[*]
engl.: regular expressions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Equi[*]
Kurzform für engl. equal, in deutsch: gleich, Gleichheit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...-Join[*]
deutsch: Verknüpfung
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Tabellen-Aliase[*]
Wer vergeßlich ist, kann auf Seite [*] nachschlagen :-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Ergebnis[*]
Sonst würde dieses Beispiel auch nicht im Kapitel Outer-Join stehen... ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... (komischerweise[*]
IMHO sollte schon richtig nach der Spalte sort sortiert werden
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Paßwort[*]
Das solltest Du aber, sobald es geht, ändern, d.h. eines setzen!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... sind[*]
Bei der Authentifizierung wird ja nur mit demselben Algorithmus verschlüsselt und dann verglichen - eine Entschlüsslung ist gar nicht vorgesehen (und sollte nicht möglich sein)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Tiefe[*]
Tiefe bei einem Baum heißt, wie viele Knoten hintereinander hängen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...PHP[*]
PHP Hypertext Preprocessor
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... HTML[*]
Hypertext Markup Language
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Java[*]
Beides kann zwar auch serverseitig laufen, wobei sie dann PHP ersetzen. I.A. wird es aber clientseitig eingesetzt
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... PHP-Code[*]
Falls doch PHP-Code beim Client gelandet ist, hat der Server, der Serveradministrator oder der Scriptautor einen Fehler gemacht
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... haben[*]
SQL ist dem Sinn und Zweck nach viel weniger eine Programmiersprache als PHP
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... XML[*]
Extensible Markup Language, eine HTML nicht unähnliche Ausdruckssprache zum einheitlichen und doch hochflexiblen Speichern von Daten aller Art
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Quoting[*]
von engl. to quote: zitieren
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Escapen[*]
engl. to escape: entkommen. Hintergrund: Das escapete Zeichen entkommt der vorgesehenen Interpretierung durch die Sprache, in diesem Fall PHP.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... characters[*]
engl. character: Buchstabe (wird häufig auch als char abgekürzt)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Tage[*]
Schaltjahre werden der Einfachheit einfach mal nicht beachtet
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Primitivtypen[*]
Primitivtypen sind z.B. String oder Integer, im Gegensatz z.B. zu Arrays oder Objektreferenzen, dazu später mehr
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... angenommen[*]
Das heißt aber nicht, daß nun die Variable wirklich einen konstanten Wert hätte... ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...FOR-Schleifen[*]
Wer sich über den Namen wundert: das englische for hat neben dem allgemein bekannten für auch noch eine andere, zeitliche Bedeutung und wird dann z.B. mit für die Dauer von übersetzt!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... inkrementiert[*]
Um eins erhöht
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Werteparameter[*]
In der Funktion wird mit einer Kopie der Variablen gearbeitet
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Variablenparametern[*]
Es wird mit den Originalvariablen gearbeitet, weil nur die Adresse übergeben wird
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Referenzparametern[*]
Zwei Namen für dasselbe
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... andere[*]
Real programmers don't comment their code. It was hard to write, it should be hard to understand. ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... benutzen[*]
Worauf schon das s hindeutet: Es steht für silent, zu deutsch: still.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Normalfall[*]
Ausnahmen bestätigen die Regel, aber dazu weiter unten mehr
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ausdrücken[*]
Im Gegensatz zum sonst in PHP üblichen Escapen mithilfe des Backslashes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... erlauben[*]
U.U. kann es ja sein, daß man den Formatierungs-String nicht verändern möchte, z.B. weil er schon in Form einer Variablen vorliegt
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... sollte[*]
Das allerdings nur auf Servern, bei denen PHP dies nicht schon implizit macht!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Normen[*]
Komma als Tausender-Trennzeichen und Punkt als Dezimaltrenner
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... wiederfinden[*]
Im sog. URL-encoded Format, s.u.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Formulares[*]
Gilt allgemein für alle POST/GET-Übergaben!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... kann.[*]
Das Gesagte gilt nur, wenn in der PHP-Konfiguration register_globals aktiviert wurde, was standardmäßig bis Version 4.1.X der Fall ist. Danach ist es standardmäßig ausgeschaltet.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...jeder[*]
Über einfaches Kopieren und Verändern der URL
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... sollen[*]
Hindert natürlich keinen, sie trotzdem zu verändern
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ist[*]
Es gibt z.B. auch is_numeric() für Zahlen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ist.[*]
Als dritten, boolschen Parameter kann man optional noch angeben, ob auch auf Typgleichheit geprüft werden soll.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... wird[*]
Sind die Daten nicht korrekt, kann eine Fehlermeldung generiert und das Formular ggf. mit den korrigierten Daten erneut angezeigt werden, anstatt weiterzuleiten
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... an[*]
Namensvergabe im Formular: einheitlicher Name, direkt gefolgt von dem eigentlichen Variablenname in eckigen Klammern, z.B. daten[vorname]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... verändert[*]
Fehlerbehandlung wurde hier absichtlich außen vor gelassen, um die vorhergehenden Aufgaben nicht zu beeinträchtigen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... RFC[*]
Request for Comments
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... HTML[*]
hier allerdings nicht konditional, also bedingungsabhängig, sondern nur nach einer festen Anzahl Sekunden
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...nicht[*]
Übrigens: PHP gibt es auch als Modul für Windows, siehe auch PHP-FAQ[9] Wo finde ich PHP als Modul für Windows?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... funktioniert![*]
Beachtet man z.B. die Groß-/Kleinschreibung nicht, kann das dazu führen, daß die Authentifizierung nicht mehr mit dem Internet Explorer, wohl aber weiterhin mit dem Netscape Navigator funktioniert!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Hochkommata[*]
Nach RFC muß der Dateiname gequotet werden
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... 5.5[*]
Wie es sich mit IE 6.x verhält, wissen wir erst, wenn die endgültige Version erschienen ist. Ältere Versionen dagegen scheinen den Fehler nicht aufzuweisen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Time[*]
kurz GMT oder auch UTC (Universal Time)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Ausdrücke[*]
Engl.: regular expressions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Perl[*]
verbreitete Scriptsprache unter Unix
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... PCRE[*]
Perl Compatible Regular Expressions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... aus.[*]
Hat man die Tipps für guten Stil aus Kapitel 7.8.2 angewandt und sprintf() benutzt, kann man hier einfach testweise das s entfernen. :-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... SQL-Prompt[*]
Oder z.B. in PHPMyAdmin, siehe Kapitel 6.3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... JDK[*]
Java Development Kit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... HTML-Übersicht[*]
Es ist auch möglich, die Übersichtr in anderen Formaten wie PS oder PDF auszugeben...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Klassen[*]
PHP erlaubt ja, in beschränktem Umfang, ebenfalls OOP [19]!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Leerzeile[*]
Es sollte natürlich, wie oben beschrieben, doch ein Stern an passender Stelle stehen...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... JRE[*]
Java Development Kit, http://java.sun.com/
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... löschen[*]
Manche Leute behaupten, bei meinen Scripten würde nie die Löschenfunktion programmiert
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Adminseiten[*]
Bei diesem Beispiel könnte man auch fragen: Welches Layout?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... machen[*]
Viele Leute sagen: Zum Glück
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... feststellen[*]
Normalerweise interessiert uns das auch gar nicht
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Objektorientierung[*]
Wenn auch einer, der in PHP nicht konsequent umgesetzt wurde -- mehr dazu später
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... DSP[*]
Könnte z.B. für Donner-schneller Pfeil stehen ;-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... erlaubt[*]
Außer, ein solches Datum ist wiederum vom gleichen Charakter wie die Sonderaktion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... funktioniert[*]
Die oben erwähnten static-Methoden müssen natürlich immer funktionieren
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... werden[*]
Vorsicht: In PHP3 gilt eine Methode mit dem Namen einer Klasse auch dann als Konstruktor dieser Klasse, wenn sich die betreffende Methode gar nicht innerhalb dieser Klasse befindet!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... empfohlen[*]
Noch ist es möglich, es wird aber wahrscheinlich irgendwann nicht mehr erlaubt sein
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... benutzt.[*]
Vorsicht: Die bisherigen Beispiele waren noch unvollständig!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... verwenden.[*]
Eine implizite Referenzierung ohne Angabe eines Objekts wie in Java gibt es in PHP nicht.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... werden[*]
Siehe auch die unten folgenden Beispiele
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... PHP-Image-Funktionen[*]
Spätestens hier solltest Du einen Blick in das offizielle PHP-Manual werfen; dort gibt es ein Liste aller Image-Funktionen samt Syntax.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... umgetauft.[*]
In dieser neue Sprach- Version muß man sich übrigens strikt an die XML-Regeln halten, also alle Tags schließen, ihre Namen klein schreiben und Attributwerte in doppelte Anführungszeichen einschließen!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... SAX[*]
Simple API for XML
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... PEAR[*]
PHP Extension and Application Repository
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Syntax-Highlighting[*]
farbliche Hervorhebung in Abhängigkeit der Bedeutung. Z.B. Text in Anführungszeichen wird grün gefärbt, reservierte Wörter in dunkelrot.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... PNG-Format[*]
Die GD-Lib, die von den Image-Funktionen benutzt wird, unterstützt das GIF-Format aus lizenzrechtlichen Gründen nicht mehr
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.