Compare commits
No commits in common. "master" and "tc2-mars-2015" have entirely different histories.
master
...
tc2-mars-2
|
@ -13,6 +13,3 @@
|
||||||
*.run.xml
|
*.run.xml
|
||||||
build-messages-*.txt
|
build-messages-*.txt
|
||||||
plans_de_formation.tar.gz
|
plans_de_formation.tar.gz
|
||||||
.~lock*
|
|
||||||
*.pygtex
|
|
||||||
*.pygstyle
|
|
||||||
|
|
2
Makefile
|
@ -2,7 +2,7 @@ SRC := $(wildcard *.tex)
|
||||||
OBJPDF := $(SRC:tex=pdf)
|
OBJPDF := $(SRC:tex=pdf)
|
||||||
RM := rm --force
|
RM := rm --force
|
||||||
TEXPDFPRG := xelatex
|
TEXPDFPRG := xelatex
|
||||||
TEXPDFOPT := -file-line-error -shell-escape
|
TEXPDFOPT := -file-line-error
|
||||||
DATE := `date +'%d%m%Y-%H%M%S'`
|
DATE := `date +'%d%m%Y-%H%M%S'`
|
||||||
BUILDLOG := build-messages-$(DATE).txt
|
BUILDLOG := build-messages-$(DATE).txt
|
||||||
LATEXBUILD := $(TEXPDFPRG) $(TEXPDFOPT)
|
LATEXBUILD := $(TEXPDFPRG) $(TEXPDFOPT)
|
||||||
|
|
271
README.md
|
@ -1,271 +0,0 @@
|
||||||
# Formations
|
|
||||||
|
|
||||||
## Dépendances
|
|
||||||
|
|
||||||
**Paquets** (sur Ubuntu 14.04)
|
|
||||||
|
|
||||||
- texlive-xetex
|
|
||||||
- latex-beamer
|
|
||||||
- texlive-lang-french
|
|
||||||
- texlive-latex-extra
|
|
||||||
|
|
||||||
** Police**
|
|
||||||
- Installer la police [CaviarDream](http://www.dafont.com/caviar-dreams.font)
|
|
||||||
|
|
||||||
## Générer le PDF de la présentation
|
|
||||||
|
|
||||||
```
|
|
||||||
make <formation>/<point_entrée_latex>.pdf
|
|
||||||
```
|
|
||||||
## Générer les plans des formations
|
|
||||||
|
|
||||||
Lancer le script programme.sh à la racine du dépôt
|
|
||||||
L'ensemble des plans est regroupé et compressé sous le nom plans_de_formation.tar.gz
|
|
||||||
|
|
||||||
## Ajouter un plan de formation
|
|
||||||
|
|
||||||
- créer un répertoire **programme** (l'endroit importe peu mais devrait être sous le répertoire de la formation)
|
|
||||||
- créer les fichiers au format latex (listes, texte, tableau, etc. Les titres sont dans le fichier programme.tex)
|
|
||||||
- contenu.tex
|
|
||||||
- duree.tex
|
|
||||||
- evaluation.tex
|
|
||||||
- moyens.tex
|
|
||||||
- objectifs.tex
|
|
||||||
- prerequis.tex
|
|
||||||
- public.tex
|
|
||||||
- compléter ces fichiers
|
|
||||||
|
|
||||||
Penser à générer de nouveau les plans
|
|
||||||
|
|
||||||
# Révision du processus de production des supports de formation
|
|
||||||
|
|
||||||
## Organisation du dépôt
|
|
||||||
|
|
||||||
Le dépôt encourage autant que possible la réutilisation et la mutualisation du contenu.
|
|
||||||
Les éléments de contenu à inclure sont dans les dossiers _content_ et _slides_ pour les documents de type _article_ et _beamer_ respectivement.
|
|
||||||
|
|
||||||
Les figures sont placées à part dans le répertoire _figures_.
|
|
||||||
|
|
||||||
Ces éléments de contenu sont inclus dans des fichiers principaux placés dans le répertoire _presentations_.
|
|
||||||
|
|
||||||
Le répertoire _templates_ contient des modèles de document au format jinja utilisés par le script _setup_main_tex_file.py_.
|
|
||||||
|
|
||||||
## setup_main_tex_file.py
|
|
||||||
|
|
||||||
Le script setup_main_tex_file.py permet d’organiser la procédure en proposant :
|
|
||||||
- la création des fichiers maîtres pour une formation ;
|
|
||||||
- la création des fichiers de contenu à inclure si nécessaire ;
|
|
||||||
- la mise à jour du plan de formation en fonction des éléments inclus ;
|
|
||||||
- la compilation des trois documents (diaporama, support de cours et programme) si l’application rubber est installée.
|
|
||||||
|
|
||||||
Pour chacune de ses sous-étapes, le script propose une sous-commande.
|
|
||||||
|
|
||||||
### Démarrer une formation (sous-commande init)
|
|
||||||
|
|
||||||
```
|
|
||||||
./setup_main_tex_file.py init -f beamer -a Cadoles -t "Formation personnalisée Scribe" -c "Conseil départemental" -d modules_EOLE_envole/Conseil_Départemental -i Cadoles -l cc-by-sa -n CD_Formation_Scribe
|
|
||||||
```
|
|
||||||
|
|
||||||
Les options obligatoires sont :
|
|
||||||
- le format (beamer ou article) : -f
|
|
||||||
- le titre qui apparaîtra sur la page de garde ou la première diapositive : -t
|
|
||||||
- l’emplacement, soit le sous-répertoire du répertoire presentations : -d
|
|
||||||
- le nom du fichier (sans l’extension) qui sera créé à l’emplacement indiqué.
|
|
||||||
|
|
||||||
Les autres options prendront des valeurs par défaut si elles ne sont pas fournies :
|
|
||||||
- l’auteur est Cadoles par défaut
|
|
||||||
- l’institut, qui détermine les logos à intégrer, est Cadoles par défaut
|
|
||||||
- la licence est la Creative Commons CC-BY-SA v2 par défaut
|
|
||||||
- le client est XXX par défaut
|
|
||||||
|
|
||||||
À noter, pour la licence, que seule la CC-BY-SA v2 est disponible dans les contenus à inclure pour l’instant.
|
|
||||||
|
|
||||||
L’exécution de la commande précédente produit le fichier presentations/modules_EOLE_envole/Conseil_Départemental/diaporama.tex.
|
|
||||||
|
|
||||||
### Construire le contenu d’une formation
|
|
||||||
|
|
||||||
On peut construire une formation en éditant le fichier maître créé précédemment.
|
|
||||||
|
|
||||||
Ce fichier présente la configuration du module skb
|
|
||||||
```
|
|
||||||
\documentclass{beamer}
|
|
||||||
|
|
||||||
\usepackage{skb}
|
|
||||||
|
|
||||||
\skbconfig[
|
|
||||||
root = ../../../,
|
|
||||||
rep = content,
|
|
||||||
pub = presentations,
|
|
||||||
fig = figures,
|
|
||||||
sli = slides,
|
|
||||||
acr = database/acr,
|
|
||||||
bib = database/bib
|
|
||||||
]{skblocal.tex}
|
|
||||||
```
|
|
||||||
|
|
||||||
Ces variables sont utilisées pour l’inclusion des éléments de contenu répartis dans les différents sous-dossier du dépôt.
|
|
||||||
|
|
||||||
Le corps du document qui est principalement intéressant est minimaliste au départ
|
|
||||||
```
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\skbinput[from=sli]{style/title}
|
|
||||||
|
|
||||||
% Corps de la formation
|
|
||||||
%\skbinput[from=sli]{}
|
|
||||||
|
|
||||||
\skbinput[from=sli]{licences/license-cc-by-sa-2.0}
|
|
||||||
|
|
||||||
\end{document}
|
|
||||||
```
|
|
||||||
|
|
||||||
Pour ajouter du contenu, on ajoute principalement des directives skbinput avec l’option from=sli (pour les documents de type beamer) et l’emplacement du fichier à partir du répertoire slides (puisque from=sli et sli = slides dans la configuration skb)
|
|
||||||
|
|
||||||
On peut également structurer la présentation en intercalant des directives section, subsection, etc.
|
|
||||||
|
|
||||||
Ces directives section, subsection, ainsi que le contenu inclu permet ensuite de construire le plan.
|
|
||||||
|
|
||||||
Les directives skbinput peuvent pointer vers un fichier inexistant dans un premier temps (une tentative de compilation du document dans cet état échouera bien évidemment).
|
|
||||||
|
|
||||||
### Consolider le contenu d’une formation (sous-commande update)
|
|
||||||
|
|
||||||
Par exemple, avec le corps de document suivant
|
|
||||||
```
|
|
||||||
\section{Introduction}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/intro}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/nouveautes27}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/panorama-module}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/scribe/description}
|
|
||||||
\section{Outils pédagogique Scribe}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop-pratique}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon-pratique}
|
|
||||||
\section{Les quatre phases}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/eolebase/virtualbox}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases-pratique}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/configuration-pratique}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/02-gen_config}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/instance-pratique}
|
|
||||||
\skbinput[from=sli]{modules_EOLE_envole/commun/du-contenu-inexistant}
|
|
||||||
```
|
|
||||||
|
|
||||||
La plupart du contenu existe déjà.
|
|
||||||
Seule la dernière inclusion poserait problème lors de la compilation.
|
|
||||||
|
|
||||||
Pour permettre de lancer des compilations sans attendre que tout le contenu soit prêt, le script propose une sous commande qui prépare le terrain en créant les fichiers de contenu manquant.
|
|
||||||
```
|
|
||||||
./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental
|
|
||||||
```
|
|
||||||
|
|
||||||
Le seul argument de cette sous-commande _update_ permet d’identifier le sous-répertoire de _presentations_ contenant le fichier maître _diaporama.tex_.
|
|
||||||
|
|
||||||
Cette commande traite toutes les directives skbinput et créer le fichier à inclure s’il n’existe pas déjà.
|
|
||||||
Elle affiche la liste des fichiers créés en retour de commande.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ ./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental/
|
|
||||||
slides/modules_EOLE_envole/commun/du-contenu-inexistant.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
Ce fichier contient du texte permettant de le repérer facilement dans le document généré
|
|
||||||
```
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{du-contenu-inexistant.tex}
|
|
||||||
fichier slides/modules\_EOLE\_envole/commun/du-contenu-inexistant.tex à éditer
|
|
||||||
% contenu (pas trop long) de la diapositive
|
|
||||||
\end{frame}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Affichage du plan (sous-commande outline)
|
|
||||||
|
|
||||||
La sous-commande _outline_ permet de créer un sommaire du diaporama sous la forme de listes imbriquées et de l’inclure dans le programme.
|
|
||||||
Il est possible de restreindre le nombre de niveaux de titre utilisé pour le plan avec l’option -l.
|
|
||||||
```
|
|
||||||
./setup_main_tex_file.py outline -d modules_EOLE_envole/Conseil_Départemental
|
|
||||||
```
|
|
||||||
```
|
|
||||||
Introduction
|
|
||||||
EOLE
|
|
||||||
En quatre points
|
|
||||||
Ce qui caractérise EOLE
|
|
||||||
Nouveautés 2.7
|
|
||||||
Modules disponibles en 2.7.0
|
|
||||||
Modules disponibles à partir de la 2.7.1
|
|
||||||
Eclair
|
|
||||||
Zéphir/Sentinelle
|
|
||||||
Zéphir
|
|
||||||
Seshat
|
|
||||||
Thot
|
|
||||||
Seth
|
|
||||||
Hapy
|
|
||||||
Scribe
|
|
||||||
Outils pédagogique Scribe
|
|
||||||
EOP
|
|
||||||
Mise en pratique
|
|
||||||
Veyon
|
|
||||||
Les fonctionnalités
|
|
||||||
Préparation
|
|
||||||
Mise en pratique
|
|
||||||
Les quatre phases
|
|
||||||
La phase d'installation
|
|
||||||
La phase de configuration
|
|
||||||
La phase d'instanciation
|
|
||||||
La phase d’instanciation
|
|
||||||
les étapes de l’instanciation
|
|
||||||
Les comptes administrateurs locaux
|
|
||||||
Les mots de passe
|
|
||||||
La phase d'administration
|
|
||||||
La phase d’administration
|
|
||||||
VirtualBox
|
|
||||||
Configuration de la VM Eolebase
|
|
||||||
Configuration autonome
|
|
||||||
Nature d’une configuration
|
|
||||||
Types de variables
|
|
||||||
Contraintes
|
|
||||||
Application de configuration du module
|
|
||||||
Les modes de l’application de configuration du module
|
|
||||||
Les informations de debug
|
|
||||||
sauvegarde et chargement de la configuration
|
|
||||||
Instance
|
|
||||||
```
|
|
||||||
|
|
||||||
### Génération du document
|
|
||||||
|
|
||||||
Comme alternative à la recette Makefile pas encore adaptée pour la compilation de ce nouveau format, on peut utiliser la commande rubber (paquet supplémentaire à installer)
|
|
||||||
```
|
|
||||||
rubber --inplace --module=xelatex presentations/modules_EOLE_envole/Conseil_Départemental/CD_Formation_Scribe.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
La sous-commande _compile_ appelle rubber pour compiler les trois documents : diaporama, support et programme.
|
|
||||||
```
|
|
||||||
./setup_main_tex_file.py compile -d modules_EOLE_envole/Conseil_Départemental
|
|
||||||
```
|
|
||||||
Cette sous-commande n’est disponible que si la commande rubber est installé et accessible (test du retour rubber --version).
|
|
||||||
|
|
||||||
### Intégration avec git
|
|
||||||
|
|
||||||
Le script entreprend des actions complémentaires lorsque il détecte un environnement _git_.
|
|
||||||
|
|
||||||
#### Séparation et isolation des formations
|
|
||||||
|
|
||||||
La proposition est la suivante : séparer le contenu générique (contenu inclu dans les formations) et les fichiers maîtres spécifiques à des formations.
|
|
||||||
|
|
||||||
Une branche (master en l’occurence) est utilisée comme pivot et contient les fragments de formations.
|
|
||||||
Chaque formation spécifique est isolée dans une branche propre.
|
|
||||||
|
|
||||||
De fait, le contenu du dossier _presentations_ est commité dans la branche spécifique, tandis que le reste (_content_ et _slides_ notamment) est commité dans _master_. Un hook git local est proposé pour limiter les commits dans les mauvaises branches, basé sur les chemins des fichiers créés ou modifiés.
|
|
||||||
|
|
||||||
Le script permet d’automatiser une partie de ce découpage, notamment la création des branches spécifiques et le commit dans les branches appropriées selon les actions entreprises.
|
|
||||||
|
|
||||||
#### action d’initialisation
|
|
||||||
|
|
||||||
L’initialisation doit être effectué depuis la branche _master_ et exécute les actions suivantes :
|
|
||||||
- création d’une branche nommée d’après le répertoire de destination et suffixée avec _xelatex/_
|
|
||||||
- création des fichiers propres à la formation (fichiers maîtres pour le diaporama, le support, le programme, etc.)
|
|
||||||
- commit de ces fichiers dans la branche spécifique.
|
|
||||||
|
|
||||||
#### action de mise à jour du programme
|
|
||||||
|
|
||||||
Comme tout ce qui implique la mise à jour ou la création de contenu dans le répertoire _presentations_, le produit de la mise à jour du programme est commité dans la branche spécifique.
|
|
|
@ -1,216 +0,0 @@
|
||||||
# Makefile for Sphinx documentation
|
|
||||||
#
|
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
|
||||||
SPHINXOPTS =
|
|
||||||
SPHINXBUILD = sphinx-build
|
|
||||||
PAPER =
|
|
||||||
BUILDDIR = _build
|
|
||||||
|
|
||||||
# User-friendly check for sphinx-build
|
|
||||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
|
||||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Internal variables.
|
|
||||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
|
||||||
PAPEROPT_letter = -D latex_paper_size=letter
|
|
||||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
|
||||||
# the i18n builder cannot share the environment and doctrees with the others
|
|
||||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
|
||||||
|
|
||||||
.PHONY: help
|
|
||||||
help:
|
|
||||||
@echo "Please use \`make <target>' where <target> is one of"
|
|
||||||
@echo " html to make standalone HTML files"
|
|
||||||
@echo " dirhtml to make HTML files named index.html in directories"
|
|
||||||
@echo " singlehtml to make a single large HTML file"
|
|
||||||
@echo " pickle to make pickle files"
|
|
||||||
@echo " json to make JSON files"
|
|
||||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
|
||||||
@echo " qthelp to make HTML files and a qthelp project"
|
|
||||||
@echo " applehelp to make an Apple Help Book"
|
|
||||||
@echo " devhelp to make HTML files and a Devhelp project"
|
|
||||||
@echo " epub to make an epub"
|
|
||||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
|
||||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
|
||||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
|
||||||
@echo " text to make text files"
|
|
||||||
@echo " man to make manual pages"
|
|
||||||
@echo " texinfo to make Texinfo files"
|
|
||||||
@echo " info to make Texinfo files and run them through makeinfo"
|
|
||||||
@echo " gettext to make PO message catalogs"
|
|
||||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
|
||||||
@echo " xml to make Docutils-native XML files"
|
|
||||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
|
||||||
@echo " linkcheck to check all external links for integrity"
|
|
||||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
|
||||||
@echo " coverage to run coverage check of the documentation (if enabled)"
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
rm -rf $(BUILDDIR)/*
|
|
||||||
|
|
||||||
.PHONY: html
|
|
||||||
html:
|
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
|
||||||
|
|
||||||
.PHONY: dirhtml
|
|
||||||
dirhtml:
|
|
||||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
|
||||||
|
|
||||||
.PHONY: singlehtml
|
|
||||||
singlehtml:
|
|
||||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
|
||||||
|
|
||||||
.PHONY: pickle
|
|
||||||
pickle:
|
|
||||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can process the pickle files."
|
|
||||||
|
|
||||||
.PHONY: json
|
|
||||||
json:
|
|
||||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can process the JSON files."
|
|
||||||
|
|
||||||
.PHONY: htmlhelp
|
|
||||||
htmlhelp:
|
|
||||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
|
||||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
|
||||||
|
|
||||||
.PHONY: qthelp
|
|
||||||
qthelp:
|
|
||||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
|
||||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
|
||||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp"
|
|
||||||
@echo "To view the help file:"
|
|
||||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc"
|
|
||||||
|
|
||||||
.PHONY: applehelp
|
|
||||||
applehelp:
|
|
||||||
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
|
||||||
@echo "N.B. You won't be able to view it unless you put it in" \
|
|
||||||
"~/Library/Documentation/Help or install it in your application" \
|
|
||||||
"bundle."
|
|
||||||
|
|
||||||
.PHONY: devhelp
|
|
||||||
devhelp:
|
|
||||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished."
|
|
||||||
@echo "To view the help file:"
|
|
||||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique"
|
|
||||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique"
|
|
||||||
@echo "# devhelp"
|
|
||||||
|
|
||||||
.PHONY: epub
|
|
||||||
epub:
|
|
||||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
|
||||||
|
|
||||||
.PHONY: latex
|
|
||||||
latex:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
|
||||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
|
||||||
"(use \`make latexpdf' here to do that automatically)."
|
|
||||||
|
|
||||||
.PHONY: latexpdf
|
|
||||||
latexpdf:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo "Running LaTeX files through pdflatex..."
|
|
||||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
|
||||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
|
||||||
|
|
||||||
.PHONY: latexpdfja
|
|
||||||
latexpdfja:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
|
||||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
|
||||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
|
||||||
|
|
||||||
.PHONY: text
|
|
||||||
text:
|
|
||||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
|
||||||
|
|
||||||
.PHONY: man
|
|
||||||
man:
|
|
||||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
|
||||||
|
|
||||||
.PHONY: texinfo
|
|
||||||
texinfo:
|
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
|
||||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
|
||||||
"(use \`make info' here to do that automatically)."
|
|
||||||
|
|
||||||
.PHONY: info
|
|
||||||
info:
|
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
|
||||||
@echo "Running Texinfo files through makeinfo..."
|
|
||||||
make -C $(BUILDDIR)/texinfo info
|
|
||||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
|
||||||
|
|
||||||
.PHONY: gettext
|
|
||||||
gettext:
|
|
||||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
|
||||||
|
|
||||||
.PHONY: changes
|
|
||||||
changes:
|
|
||||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
|
||||||
@echo
|
|
||||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
|
||||||
|
|
||||||
.PHONY: linkcheck
|
|
||||||
linkcheck:
|
|
||||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
|
||||||
@echo
|
|
||||||
@echo "Link check complete; look for any errors in the above output " \
|
|
||||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
|
||||||
|
|
||||||
.PHONY: doctest
|
|
||||||
doctest:
|
|
||||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
|
||||||
@echo "Testing of doctests in the sources finished, look at the " \
|
|
||||||
"results in $(BUILDDIR)/doctest/output.txt."
|
|
||||||
|
|
||||||
.PHONY: coverage
|
|
||||||
coverage:
|
|
||||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
|
||||||
@echo "Testing of coverage in the sources finished, look at the " \
|
|
||||||
"results in $(BUILDDIR)/coverage/python.txt."
|
|
||||||
|
|
||||||
.PHONY: xml
|
|
||||||
xml:
|
|
||||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
|
||||||
|
|
||||||
.PHONY: pseudoxml
|
|
||||||
pseudoxml:
|
|
||||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 594 KiB |
|
@ -1 +0,0 @@
|
||||||
.. include:: ../../tronCommun/algo.txt
|
|
|
@ -1,83 +0,0 @@
|
||||||
La planification agile
|
|
||||||
========================
|
|
||||||
|
|
||||||
Le mode itératif
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
- livrer des versions successives et utilisables qui convergent vers
|
|
||||||
la version finale
|
|
||||||
|
|
||||||
- ne pas perdre d'énergie à maintenir des specs détaillées non nécessaires
|
|
||||||
|
|
||||||
- de nouvelles orientations fonctionnelles sont possibles, même tard
|
|
||||||
|
|
||||||
- les specs détaillées sont écrites "juste à temps"
|
|
||||||
|
|
||||||
|
|
||||||
La planification agile
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
- chaque livraison est un projet qui est planifié en tant que tel
|
|
||||||
- utiliser l'expérience acquise pour affiner les estimations
|
|
||||||
- préservation de l'écologie du projet au quotidien (code, tests...)
|
|
||||||
|
|
||||||
La confiance, feedback
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
- livraisons régulières
|
|
||||||
- progrès visibles par tous (pas d'effet tunnel)
|
|
||||||
- pilotage du projet par choix du contenu des livraisons
|
|
||||||
- investissement du Product Owner
|
|
||||||
- chercher la collaboration plutôt que la confrontation
|
|
||||||
|
|
||||||
L'agilité
|
|
||||||
----------
|
|
||||||
|
|
||||||
- le projet n'est pas joué d'avance
|
|
||||||
- cultiver la souplesse
|
|
||||||
- révolution douce
|
|
||||||
- sortir de la confrontation, jouer le "nous collectif"
|
|
||||||
mettre tout le monde sur le mme pont et amener tout le monde à bon port
|
|
||||||
|
|
||||||
Les outils agiles
|
|
||||||
------------------
|
|
||||||
|
|
||||||
- planification par itérations de 4 semaines
|
|
||||||
- entrepot de source partagé
|
|
||||||
- intégration continue
|
|
||||||
- tests automatisés
|
|
||||||
- pair programming sur points cruciaux
|
|
||||||
- sprints
|
|
||||||
- extranet :
|
|
||||||
|
|
||||||
- hitoires utilisateurs
|
|
||||||
- test cases
|
|
||||||
- gestion du backolog et des tickets
|
|
||||||
- suivi de l'avancement
|
|
||||||
- documentation
|
|
||||||
|
|
||||||
Le product owner
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
idéalement,
|
|
||||||
|
|
||||||
- connaissance du métier à informatiser
|
|
||||||
- fibre projet
|
|
||||||
- dispo à 100%
|
|
||||||
|
|
||||||
Les tests
|
|
||||||
---------
|
|
||||||
|
|
||||||
- automatiser
|
|
||||||
- viser l'exhaustivité
|
|
||||||
- tester une cible mouvante
|
|
||||||
- migrer les tests d'une release à l'autre
|
|
||||||
|
|
||||||
Questions importantes en environnement agile
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
- quelle durée d'itération ?
|
|
||||||
- comment découper en itérations ?
|
|
||||||
- que faire lorsque le product owner se retrouve sur le chemin critique ?
|
|
||||||
- la planification est faite en mode "juste à temps" et "juste assez"
|
|
||||||
- on ne s'échine plus à blâmer, au contraire on cherche à gagner ensemble
|
|
|
@ -1,19 +0,0 @@
|
||||||
Exercices complémentaires
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
+ **Manipulation de chaînes de caractères**:
|
|
||||||
(création, accès à un caractère, concaténation), listes (création, ajout
|
|
||||||
d’un élément, suppression d’un élément, accès à un élément, extraction d’une partie de liste), tableaux à une ou plusieurs dimensions.
|
|
||||||
|
|
||||||
+ traitement des chaines de caractères
|
|
||||||
+ s.replace()
|
|
||||||
+ s1 + s2
|
|
||||||
+ un exemple de regexp simple
|
|
||||||
|
|
||||||
+ **Fichiers** :
|
|
||||||
notion de chemin d’accès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier.
|
|
||||||
On encourage l’utilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques.
|
|
||||||
|
|
||||||
+ **Piles**
|
|
||||||
Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes
|
|
||||||
(ou tableaux à 1 dimension) pour leur implantation.
|
|
|
@ -1,10 +0,0 @@
|
||||||
Annexes
|
|
||||||
=========
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
exercices
|
|
||||||
surete
|
|
||||||
agile
|
|
||||||
scrum
|
|
|
@ -1,176 +0,0 @@
|
||||||
scrum
|
|
||||||
=====
|
|
||||||
|
|
||||||
.. glossary::
|
|
||||||
|
|
||||||
scrum
|
|
||||||
|
|
||||||
Scrum est une méthode agile pour la gestion de projets
|
|
||||||
Le terme Scrum est emprunté au rugby et signifie mêlée.
|
|
||||||
Ce processus s'articule en effet autour d'une équipe soudée,
|
|
||||||
qui cherche à atteindre un but, comme c'est le cas en rugby
|
|
||||||
pour avancer avec le ballon pendant une mêlée.
|
|
||||||
|
|
||||||
|
|
||||||
Scrum définit trois rôles principaux :
|
|
||||||
|
|
||||||
- le responsable de produit -- Product Manager,
|
|
||||||
- le faciliteur -- ScrumMaster
|
|
||||||
- le développeur
|
|
||||||
|
|
||||||
et bien sûr, l'équipe (auto-gérée).
|
|
||||||
|
|
||||||
Des intervenants peuvent s'intégrer également au projet
|
|
||||||
de façon plus ponctuelle.
|
|
||||||
|
|
||||||
responsable de produit
|
|
||||||
|
|
||||||
Le responsable de produit (Product Manager) est le représentant des
|
|
||||||
clients et utilisateurs.
|
|
||||||
C'est lui qui définit l'ordre dans lequel les fonctionnalités
|
|
||||||
seront développées et qui prend les décisions importantes
|
|
||||||
concernant l'orientation du projet.
|
|
||||||
|
|
||||||
Le terme responsable n'est d'ailleurs pas à prendre au sens hiérarchique
|
|
||||||
du terme, mais dans le sens de l'orientation.
|
|
||||||
|
|
||||||
équipe, développement
|
|
||||||
|
|
||||||
outes les décisions sont prises ensemble et personne ne donne d'ordre
|
|
||||||
à l'équipe sur sa façon de procéder
|
|
||||||
|
|
||||||
facilitateur
|
|
||||||
|
|
||||||
est chargé de protéger l'équipe de tous les éléments perturbateurs
|
|
||||||
|
|
||||||
planification
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Scrum utilise une planification à trois niveaux :
|
|
||||||
|
|
||||||
- release/projet
|
|
||||||
- sprint
|
|
||||||
- quotidien -- ScrumMeeting
|
|
||||||
|
|
||||||
quotidien
|
|
||||||
|
|
||||||
Au quotidien, une réunion, le ScrumMeeting (pas plus de 15 min)
|
|
||||||
permet à l'équipe et au ScrumMaster de faire un point d'avancement sur
|
|
||||||
les tâches et sur les difficultés rencontrées.
|
|
||||||
répondre à trois questions :
|
|
||||||
* Qu'est-ce que j'ai fait hier ?
|
|
||||||
* Qu'est-ce que je compte faire aujourd'hui ?
|
|
||||||
* Quelles difficultés est-ce que je rencontre ?
|
|
||||||
|
|
||||||
sprint
|
|
||||||
|
|
||||||
Scrum est un processus itératif : les itérations sont appelées des sprints
|
|
||||||
et durent en théorie 30 jours calendaires.
|
|
||||||
En pratique, les itérations durent généralement entre 2 et 4 semaines.
|
|
||||||
Chaque sprint possède un but et on lui associe une liste d'items
|
|
||||||
de fonctionnalités à réaliser.
|
|
||||||
Ces items sont décomposés par l'équipe en tâches élémentaires
|
|
||||||
de quelques heures, les items de fonctionnalités de sprint.
|
|
||||||
|
|
||||||
Pendant un sprint, les items de fonctionnalités de sprint à réaliser
|
|
||||||
ne peuvent pas être changés.
|
|
||||||
Les changements éventuels seront éventuellement réalisés
|
|
||||||
dans les sprints suivants.
|
|
||||||
|
|
||||||
releases
|
|
||||||
|
|
||||||
pour améliorer la lisibilité du projet,
|
|
||||||
on regroupe généralement des itérations en releases.
|
|
||||||
En effet, comme chaque sprint doit aboutir à la livraison
|
|
||||||
d'un produit partiel, une release permet de marquer la livraison
|
|
||||||
d'une version aboutie, susceptible d'être mise en exploitation
|
|
||||||
|
|
||||||
gestion des besoins
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
tâches (backlog de sprint)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Lorsqu'on démarre un sprint, on choisit quels items des fonctionnalités
|
|
||||||
seront réalisés dans ce sprint.
|
|
||||||
|
|
||||||
L'équipe décompose ensuite chaque item en liste de tâches élémentaires
|
|
||||||
(techniques ou non), chaque tâche étant estimée en heures
|
|
||||||
et ne devant pas durer plus de 2 jours.
|
|
||||||
On constitue ainsi le backlog de sprint.
|
|
||||||
|
|
||||||
Les items de backlog de produit sont les fonctionnalités qui deviendront
|
|
||||||
les items du baclog d'un sprint.
|
|
||||||
Ces fonctionnalités sont estimées en points relatifs, sans unité.
|
|
||||||
|
|
||||||
planning poker
|
|
||||||
|
|
||||||
façon ludique et efficace de produire des estimations
|
|
||||||
sur la complexité des fonctionnalités à développer
|
|
||||||
|
|
||||||
pour évaluer les scénarios utilisateurs (user stories)
|
|
||||||
du carnet de produit (product backlog).
|
|
||||||
|
|
||||||
à la fin d'un sprint :
|
|
||||||
|
|
||||||
- revue de sprint
|
|
||||||
- rétrospective de sprint
|
|
||||||
|
|
||||||
comprendre ce qui n'a pas bien marché dans le sprint,
|
|
||||||
les erreurs commises et de prendre des décisions pour s'améliorer
|
|
||||||
|
|
||||||
mise en oeuvre
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Scrum peut être mis en pratique avec trois fois rien : deux listes suffisent.
|
|
||||||
La liste des items du backlog de produit et la liste des items du backlog
|
|
||||||
de sprint. La saisie et la mise à jour des données est simplement
|
|
||||||
un peu moins agréable.
|
|
||||||
|
|
||||||
glossaire
|
|
||||||
---------
|
|
||||||
|
|
||||||
Directeur de produit (Product Owner) (responsable produit)
|
|
||||||
|
|
||||||
personne responsable de produire et maintenir à jour le backlog de produit.
|
|
||||||
C'est lui qui en détermine les priorités et qui prend les décisions
|
|
||||||
concernant l'orientation du projet.
|
|
||||||
|
|
||||||
ScrumMaster (facilitateur)
|
|
||||||
|
|
||||||
membre de l'équipe dont l'objectif principal est de la protéger
|
|
||||||
des perturbation extérieures.
|
|
||||||
Il est complètement transparent pour la communication entre l'équipe
|
|
||||||
et les clients et n'a aucun pouvoir hiérarchique sur l'équipe.
|
|
||||||
C'est en revanche un facilitateur pour les problèmes non techniques
|
|
||||||
de l'équipe.
|
|
||||||
|
|
||||||
Backlog de produit (Product Backlog) (fonctionnalités)
|
|
||||||
|
|
||||||
liste des fonctionnalités qui devront être réalisées par le logiciel.
|
|
||||||
|
|
||||||
Backlog de sprint (Sprint Backlog) (tâches)
|
|
||||||
|
|
||||||
liste des tâches à accomplir pendant un sprint.
|
|
||||||
Elles correspondent à la réalisation des items de backlog
|
|
||||||
du produit affectés au sprint.
|
|
||||||
|
|
||||||
Mêlée quotidienne (Daily Scrum) (quotidien)
|
|
||||||
|
|
||||||
réunion quotidienne de 15 minutes qui a pour but de faire le point
|
|
||||||
sur ce qui a été fait depuis la dernière mêlée,
|
|
||||||
ce qui est prévu de faire jusqu'à la prochaine
|
|
||||||
et quelles sont les embûches rencontrées durant le travail.
|
|
||||||
|
|
||||||
Sprint (sprint)
|
|
||||||
|
|
||||||
nom d'une itération dans Scrum.
|
|
||||||
Cette itération dure 30 jours calendaires en théorie,
|
|
||||||
mais en pratique on utilise plutôt entre 2 et 4 semaines.
|
|
||||||
Pendant une itération, l'équipe doit développer une liste d'items
|
|
||||||
du backlog de produit qui a été définie au début de ce sprint.
|
|
||||||
|
|
||||||
Graphique d'avancement (Burndown Chart) (avancement)
|
|
||||||
|
|
||||||
graphique qui montre la tendance du reste à faire total de jour en jour
|
|
||||||
(pour les sprints) ou de sprint en sprint (pour les releases).
|
|
|
@ -1,93 +0,0 @@
|
||||||
Outils de sureté d'un programme
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
La preuve de programme
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve
|
|
||||||
formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de
|
|
||||||
raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou
|
|
||||||
du matériel électroniques, afin de démontrer leur validité par rapport à une certaine
|
|
||||||
spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le
|
|
||||||
programme est valide et ne va pas planter.
|
|
||||||
|
|
||||||
La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très
|
|
||||||
difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit
|
|
||||||
absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical
|
|
||||||
(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce
|
|
||||||
domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui
|
|
||||||
avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire
|
|
||||||
(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions
|
|
||||||
d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire
|
|
||||||
perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas
|
|
||||||
bugger).
|
|
||||||
|
|
||||||
Le model checking
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie
|
|
||||||
moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du
|
|
||||||
système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte
|
|
||||||
donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont
|
|
||||||
utilisées que dans un contexte industriel de haute sécurité.
|
|
||||||
|
|
||||||
Les tests d'acceptation
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Il y a plusieurs types de tests
|
|
||||||
|
|
||||||
- unitaires
|
|
||||||
- fonctionnels
|
|
||||||
- acceptation
|
|
||||||
|
|
||||||
Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines
|
|
||||||
parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près.
|
|
||||||
Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles.
|
|
||||||
|
|
||||||
Les Outils de linting (validation)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- vérifications syntaxiques
|
|
||||||
- vérification sémantiques
|
|
||||||
- vérification sur les imports inutiles ou mal formés (imports croisés
|
|
||||||
|
|
||||||
Exemple en python : pylint
|
|
||||||
|
|
||||||
|
|
||||||
La dette technique
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Au bout d'un moment le code devient du code spaghetti et les techniques sont obsolètes.
|
|
||||||
Les tests permettent de solder la dette technique plus facilement.
|
|
||||||
|
|
||||||
**avoir le courage de payer une dette technique, et affronter une dette technique
|
|
||||||
sinon il peut y avoir un coût à payer qui sera pohibitoire.**
|
|
||||||
|
|
||||||
On solde la dette technique parce que à un moment ça va devenir beaucoup trop
|
|
||||||
cher à payer.
|
|
||||||
|
|
||||||
Les méthodologies agiles
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
La manière dont le code est produit importe énormément. Par exemple, une
|
|
||||||
méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé
|
|
||||||
a plus de chance de produire du code organisé.
|
|
||||||
|
|
||||||
Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les
|
|
||||||
méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur :
|
|
||||||
|
|
||||||
- Du logiciel fonctionnel plutôt que de la documentation exhaustive
|
|
||||||
- La réponse au changement plutôt que le suivi d'un plan
|
|
||||||
- Le logiciel fonctionnel est la principale mesure d'avancement
|
|
||||||
- Une attention continue à l'excellence technique et à une bonne
|
|
||||||
conception améliore l'agilité
|
|
||||||
- La simplicité est essentielle (il est facile de faire, il est
|
|
||||||
difficile de faire simple)
|
|
||||||
|
|
||||||
Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon
|
|
||||||
itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une
|
|
||||||
à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le
|
|
||||||
responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce
|
|
||||||
sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce
|
|
||||||
temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de
|
|
||||||
résoudre les problèmes non techniques de l'équipe.
|
|
|
@ -1,96 +0,0 @@
|
||||||
Aperçu des algorithmes fondamentaux
|
|
||||||
===================================
|
|
||||||
|
|
||||||
Les algorithmes sont partout. Absolument partout aujourd'hui.
|
|
||||||
Il n'est pas un domaine de nos activités qui ne soit liés à tel ou tel algorithme.
|
|
||||||
|
|
||||||
Quelques grands thèmes: systèmes cryptographiques, géométrie algorithmique, reconnaissance de motifs, mais aussi les problèmes posés par l’algorithmique parallèle, etc...
|
|
||||||
|
|
||||||
En mathématiques
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
- l'algèbre (étude des structures de données)
|
|
||||||
- l'arithmétique modulaire (théorie des nombres)
|
|
||||||
En mathématiques et plus précisément en théorie algébrique des nombres,
|
|
||||||
l’arithmétique modulaire est un ensemble de méthodes permettant la résolution de problèmes
|
|
||||||
sur les nombres entiers.
|
|
||||||
Ces méthodes dérivent de l’étude du reste obtenu par une division euclidienne.
|
|
||||||
- la géométrie (affine, algébrique, invariants topologiques...)
|
|
||||||
- les diagrammes (diagrammes de Venn...)
|
|
||||||
- les colorisation d'une carte
|
|
||||||
- comportements stochastiques
|
|
||||||
|
|
||||||
En informatique
|
|
||||||
----------------
|
|
||||||
|
|
||||||
- les algorithmes sur la manipulation des structures de données
|
|
||||||
Exemple : les algorithmes de tri, de recherche dans un arbre...
|
|
||||||
- les parcours de graphes (chemins le plus court, voyageur de commerce...)
|
|
||||||
- la cryptologie (code gray)
|
|
||||||
- les stratégies de jeux
|
|
||||||
|
|
||||||
Tirés du monde réel
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
- les jeux (casse-tête, dominos, échiquiers...)
|
|
||||||
- énigmes, logique et paradoxes
|
|
||||||
- problèmes de raisonnements. Il n'existe pas beaucoup de méthodes
|
|
||||||
ou de moyens simples pour traiter et résoudre les énoncés de logique de raisonnement.
|
|
||||||
- La "marche de l'ivrogne" : processus de progression discrète (pas à pas)
|
|
||||||
dont l'étape suivante est lié à l'état présent et pas du tout à la mémoire du passé proche.
|
|
||||||
Il revêt seulement un caractère de type probabilité (stochastique) dit markovien.
|
|
||||||
- algorithmes de colonies de fourmis (chemins optimal pour arriver à la nourriture)
|
|
||||||
|
|
||||||
Le voyageur de commerce
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Le problème du voyageur de commerce, consiste en la recherche d’un trajet minimal permettant à un
|
|
||||||
voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la
|
|
||||||
distance totale parcourue.
|
|
||||||
|
|
||||||
Il suffit de construire tous les chemins possibles et de calculer leurs longueurs.
|
|
||||||
Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles.
|
|
||||||
Avec 36 villes on trouve : 5166573983193072464833325668761600000000,
|
|
||||||
si le nombre de villes augmente, ça devient vite rédibitoire.
|
|
||||||
|
|
||||||
Résolution par
|
|
||||||
|
|
||||||
- algorithme de parcours de graphes
|
|
||||||
- algorithme glouton
|
|
||||||
- algorithmes génétiques
|
|
||||||
|
|
||||||
Les algorithmes génétiques s’appuient sur un principe de sélection des individus d’une population qui présen-
|
|
||||||
tent des caractéristiques se rapprochant au mieux de ce que l’on recherche; cette population évoluant par
|
|
||||||
ailleurs selon des critères d’évolution génétique à choisir. Dans le contexte du problème du voyageur de
|
|
||||||
commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il s’agit
|
|
||||||
maintenant de dé...nir un critère de sélection ainsi que des règles d’évolution de la population.
|
|
||||||
|
|
||||||
- approches métaheuristiques (exemples: colonies de fourmis)
|
|
||||||
|
|
||||||
Exemple de résolution
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Algorithme du voyageur de commerce}\label{commerce}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
|
|
||||||
\BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes}
|
|
||||||
\BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer}
|
|
||||||
\State \emph{début}
|
|
||||||
\BState ...
|
|
||||||
\State \emph{fin}
|
|
||||||
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
|
|
||||||
Algorithmes gloutons
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Les algorithmes servant à résoudre les problèmes d’optimisation parcourent en général une
|
|
||||||
série d’étapes, au cours desquelles ils sont confrontés à un ensemble de possibilités. Un
|
|
||||||
algorithme glouton fait toujours le choix qui semble le meilleur sur le moment, dans l’espoir
|
|
||||||
qu’il mènera à la solution optimale globalement.
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
let rec fact = function
|
|
||||||
|1 -> 1
|
|
||||||
| n -> n * fact (n-1) ;;
|
|
||||||
|
|
||||||
let print_fact n =
|
|
||||||
Printf.printf "factorielle %i = %i\n" n (fact n)
|
|
||||||
|
|
||||||
let main () =
|
|
||||||
begin
|
|
||||||
print_fact 5 ;
|
|
||||||
print_newline () ;
|
|
||||||
exit 0 ;
|
|
||||||
end
|
|
||||||
|
|
||||||
let _ = main ()
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
def factorielle(n):
|
|
||||||
if (n > 1):
|
|
||||||
r = n*factorielle(n-1)
|
|
||||||
else:
|
|
||||||
r = 1
|
|
||||||
return r
|
|
||||||
|
|
||||||
def print_fact(n):
|
|
||||||
print "factorielle {} = {}\n".format(5, factorielle(5))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
print_fact(5)
|
|
|
@ -1,99 +0,0 @@
|
||||||
Notion de complexité d'un algorithme
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Définition
|
|
||||||
-----------
|
|
||||||
|
|
||||||
L’analyse de la complexité d’un algorithme consiste à évaluer les ressources
|
|
||||||
consommées par l’algorithme lors de l’exécution
|
|
||||||
|
|
||||||
deux critères d’évaluation
|
|
||||||
|
|
||||||
- le coût en temps (nombre d’opérations)
|
|
||||||
- le coût en espace, (quantité de mémoire)
|
|
||||||
|
|
||||||
|
|
||||||
principes de base
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Caractériser la quantité de ressources consommées en fonction de la
|
|
||||||
taille des données sur lesquelles l’algorithme est appliqué.
|
|
||||||
|
|
||||||
Evaluer le coût exact est difficile, on exprimera donc seulement un
|
|
||||||
ordre de grandeur
|
|
||||||
|
|
||||||
On peut approximer la complexité des algorithmes.
|
|
||||||
C'est utile pour pouvoir comparer des algorithmes.
|
|
||||||
|
|
||||||
complexité
|
|
||||||
|
|
||||||
estimer la complexité d'un algorithme, c'est estimer le nombre de calculs qu'il utilise.
|
|
||||||
|
|
||||||
Si f est la fonction caractérisant exactement le coût d’un algorithme et n
|
|
||||||
la taille des données, on s’intéresse à la façon dont augment f(n) lorsque n augmente
|
|
||||||
on va montrer que f(n) n'augmente pas plus vite qu’une autre fonction
|
|
||||||
g(n). Du point de vue mathématique, on dit que la fonction f est dominée
|
|
||||||
asymptotiquement par la fonction g ce qui se note f = O(g)
|
|
||||||
|
|
||||||
- Complexité temporelle : c’est le nombre d’op«erations effectuées par
|
|
||||||
une machine qui exécute l’algorithme.
|
|
||||||
|
|
||||||
- Complexité spatiale : c’est le nombre de positions mémoire utilisées par
|
|
||||||
une machine qui exécute l’algorithme.
|
|
||||||
|
|
||||||
définition mathématique
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
|
|
||||||
- si f est la fonction caractérisant exactement le coût d’un algorithme
|
|
||||||
- et n la taille des données
|
|
||||||
- on s'intéresse à la façon dont croît f(n) lorsque n croît
|
|
||||||
- on va montrer que f (n) ne croît pas plus vite qu’une autre fonction g(n)
|
|
||||||
|
|
||||||
Du point de vue mathématique, on dit que la fonction f est dominée
|
|
||||||
asymptotiquement par la fonction g ce qui se note f= O(g)
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
f = O(g) ssi il existe k, il existe n 0 , pour tout n, n > n 0 implique
|
|
||||||
f(n) inférieur ou egal k.g (n)
|
|
||||||
|
|
||||||
|
|
||||||
exemples
|
|
||||||
---------
|
|
||||||
|
|
||||||
- O(n) : progression linéaire
|
|
||||||
- O(n^2) : progression quadratique
|
|
||||||
- O(n^p) : progression polynomiale
|
|
||||||
- O(p^n ) : progression exponentielle
|
|
||||||
- O(log(n)): progression logarithmique
|
|
||||||
|
|
||||||
Problèmes NP-complets
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
En théorie de la complexité, un problème NP-complet (c'est-à-dire un problème
|
|
||||||
complet pour la classe NP) est un problème de décision vérifiant les
|
|
||||||
propriétés suivantes :
|
|
||||||
|
|
||||||
- Il est possible de vérifier une solution efficacement (en temps
|
|
||||||
polynomial) ; la classe des problèmes vérifiant cette propriété est notée
|
|
||||||
NP ;
|
|
||||||
- Tous les problèmes de la classe NP se ramènent à celui-ci via une
|
|
||||||
réduction polynomiale ; cela signifie que le problème est au moins
|
|
||||||
aussi difficile que tous les autres problèmes de la classe NP.
|
|
||||||
|
|
||||||
- Un problème NP-difficile est un problème qui remplit la seconde
|
|
||||||
condition, et donc peut être dans une classe de problème plus large et
|
|
||||||
donc plus difficile que la classe NP.
|
|
||||||
|
|
||||||
Bien qu'on puisse vérifier rapidement toute solution proposée d'un
|
|
||||||
problème NP-complet, on ne sait pas en trouver efficacement. C'est le
|
|
||||||
cas, par exemple, du problème du voyageur de commerce ou de celui du
|
|
||||||
problème du sac à dos.
|
|
||||||
|
|
||||||
Tous les algorithmes connus pour résoudre des problèmes NP-complets
|
|
||||||
ont un temps d'exécution exponentiel en la taille des données d'entrée
|
|
||||||
dans le pire cas, et sont donc inexploitables en pratique même pour
|
|
||||||
des instances de taille modérée.
|
|
||||||
|
|
||||||
|
|
|
@ -1,370 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Algorithmique documentation build configuration file, created by
|
|
||||||
# sphinx-quickstart on Thu Mar 16 16:07:00 2017.
|
|
||||||
#
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
#sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
#needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = [
|
|
||||||
'sphinx.ext.pngmath', 'sphinx.ext.ifconfig',
|
|
||||||
]
|
|
||||||
|
|
||||||
# ajout des cours avec solution des exercices ou non
|
|
||||||
def setup(app):
|
|
||||||
app.add_config_value('correction', False, 'env')
|
|
||||||
app.add_config_value('exercice', False, 'env')
|
|
||||||
|
|
||||||
exercice = True
|
|
||||||
correction = True
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
|
||||||
# You can specify multiple suffix as a list of string:
|
|
||||||
# source_suffix = ['.rst', '.md']
|
|
||||||
source_suffix = '.txt'
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
#source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'Algorithmique Approfondie'
|
|
||||||
copyright = u'2017, Gwen'
|
|
||||||
author = u'Gwen'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = u'1'
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = u'1'
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
#
|
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
|
||||||
# Usually you set "language" from the command line for these cases.
|
|
||||||
language = 'fr'
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
#today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
today_fmt = '%d/%m/%Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = ['_build']
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
default_role = 'literal'
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
#add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
#add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
#show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
#modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
#keep_warnings = False
|
|
||||||
|
|
||||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
|
||||||
todo_include_todos = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
html_theme = 'alabaster'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
#html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
#html_theme_path = []
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
#html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
#html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
#html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to use as a favicon of
|
|
||||||
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
#html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
#html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
#html_last_updated_fmt = '%b %d, %Y'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
#html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
#html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
#html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
#html_use_index = True
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
#html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
#html_show_sourcelink = True
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
html_show_sphinx = False
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
html_show_copyright = False
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
#html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
#html_file_suffix = None
|
|
||||||
|
|
||||||
# Language to be used for generating the HTML full-text search index.
|
|
||||||
# Sphinx supports the following languages:
|
|
||||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
|
|
||||||
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
|
|
||||||
#html_search_language = 'en'
|
|
||||||
|
|
||||||
# A dictionary with options for the search language support, empty by default.
|
|
||||||
# Now only 'ja' uses this config value
|
|
||||||
#html_search_options = {'type': 'default'}
|
|
||||||
|
|
||||||
# The name of a javascript file (relative to the configuration directory) that
|
|
||||||
# implements a search results scorer. If empty, the default will be used.
|
|
||||||
#html_search_scorer = 'scorer.js'
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'Algorithmiquedoc'
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
'papersize': 'a4paper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
'preamble': """\usepackage{amsmath}
|
|
||||||
\usepackage{algorithm}
|
|
||||||
\usepackage[noend]{algpseudocode}
|
|
||||||
\makeatletter
|
|
||||||
\def\BState{\State\hskip-\ALG@thistlm}
|
|
||||||
\makeatother
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
|
||||||
#'figure_align': 'htbp',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
(master_doc, 'AlgorithmiqueApprofondie.tex', u'Cours d\'algorithmique approfondie',
|
|
||||||
u'INFAL24', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
latex_logo = '_static/cesi.jpg'
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
#latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#latex_domain_indices = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
(master_doc, 'algorithmique', u'Algorithmique Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
(master_doc, 'Algorithmique', u'Algorithmique Documentation',
|
|
||||||
author, 'Algorithmique', 'One line description of project.',
|
|
||||||
'Miscellaneous'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
#texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
#texinfo_no_detailmenu = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Epub output ----------------------------------------------
|
|
||||||
|
|
||||||
# Bibliographic Dublin Core info.
|
|
||||||
epub_title = project
|
|
||||||
epub_author = author
|
|
||||||
epub_publisher = author
|
|
||||||
epub_copyright = copyright
|
|
||||||
|
|
||||||
# The basename for the epub file. It defaults to the project name.
|
|
||||||
#epub_basename = project
|
|
||||||
|
|
||||||
# The HTML theme for the epub output. Since the default themes are not
|
|
||||||
# optimized for small screen space, using the same theme for HTML and epub
|
|
||||||
# output is usually not wise. This defaults to 'epub', a theme designed to save
|
|
||||||
# visual space.
|
|
||||||
#epub_theme = 'epub'
|
|
||||||
|
|
||||||
# The language of the text. It defaults to the language option
|
|
||||||
# or 'en' if the language is not set.
|
|
||||||
#epub_language = ''
|
|
||||||
|
|
||||||
# The scheme of the identifier. Typical schemes are ISBN or URL.
|
|
||||||
#epub_scheme = ''
|
|
||||||
|
|
||||||
# The unique identifier of the text. This can be a ISBN number
|
|
||||||
# or the project homepage.
|
|
||||||
#epub_identifier = ''
|
|
||||||
|
|
||||||
# A unique identification for the text.
|
|
||||||
#epub_uid = ''
|
|
||||||
|
|
||||||
# A tuple containing the cover image and cover page html template filenames.
|
|
||||||
#epub_cover = ()
|
|
||||||
|
|
||||||
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
|
|
||||||
#epub_guide = ()
|
|
||||||
|
|
||||||
# HTML files that should be inserted before the pages created by sphinx.
|
|
||||||
# The format is a list of tuples containing the path and title.
|
|
||||||
#epub_pre_files = []
|
|
||||||
|
|
||||||
# HTML files that should be inserted after the pages created by sphinx.
|
|
||||||
# The format is a list of tuples containing the path and title.
|
|
||||||
#epub_post_files = []
|
|
||||||
|
|
||||||
# A list of files that should not be packed into the epub file.
|
|
||||||
epub_exclude_files = ['search.html']
|
|
||||||
|
|
||||||
# The depth of the table of contents in toc.ncx.
|
|
||||||
#epub_tocdepth = 3
|
|
||||||
|
|
||||||
# Allow duplicate toc entries.
|
|
||||||
#epub_tocdup = True
|
|
||||||
|
|
||||||
# Choose between 'default' and 'includehidden'.
|
|
||||||
#epub_tocscope = 'default'
|
|
||||||
|
|
||||||
# Fix unsupported image types using the Pillow.
|
|
||||||
#epub_fix_images = False
|
|
||||||
|
|
||||||
# Scale large images.
|
|
||||||
#epub_max_image_width = 0
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
#epub_show_urls = 'inline'
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
#epub_use_index = True
|
|
|
@ -1,309 +0,0 @@
|
||||||
Les structures de contrôle
|
|
||||||
==========================
|
|
||||||
|
|
||||||
L'instruction de saut
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple de saut conditionnel}\label{saut}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide}
|
|
||||||
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
|
|
||||||
\State $i \gets \textit{patlen}$
|
|
||||||
\BState \emph{top}:
|
|
||||||
\If {$i > \textit{stringlen}$} \Return false
|
|
||||||
\EndIf
|
|
||||||
\State $j \gets \textit{patlen}$
|
|
||||||
\BState \emph{loop}: \Comment{C'est le label (l'étiquette)} \label{etiquette}
|
|
||||||
\If {$\textit{string}(i) = \textit{path}(j)$}
|
|
||||||
\State $j \gets j-1$.
|
|
||||||
\State $i \gets i-1$.
|
|
||||||
\State \textbf{goto} \emph{loop}. \label{goto}
|
|
||||||
\State \textbf{close};
|
|
||||||
\EndIf
|
|
||||||
\State $i \gets
|
|
||||||
i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
|
|
||||||
\State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut}
|
|
||||||
\EndProcedure
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
Ligne \ref{etiquette}, le bloc `loop` est aussi un label (une étiquette),
|
|
||||||
c'est-à-dire une marque posée qu'il est possible de retrouver dans le programme. \\
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
Ligne \ref{goto}, l'instruction \texttt{goto} (aller à ) est le saut vers le label. \\
|
|
||||||
|
|
||||||
Description générique d'une instruction de saut::
|
|
||||||
|
|
||||||
Instruction 1
|
|
||||||
Saut Label1
|
|
||||||
Instruction 2
|
|
||||||
...
|
|
||||||
Label1:
|
|
||||||
Instruction n
|
|
||||||
|
|
||||||
.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés
|
|
||||||
dans le langage cible, car c'est le meilleur moyen d'aboutir à
|
|
||||||
du **code spaghetti**.
|
|
||||||
|
|
||||||
L'instruction de branchement conditionnel
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non.
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple d'instruction de test}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée}
|
|
||||||
\BState \emph{locale}: $a\gets ""$
|
|
||||||
\BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$}
|
|
||||||
\BState \emph{corps}:
|
|
||||||
\If{$quality\ge 9$}
|
|
||||||
\State $a\gets perfect$
|
|
||||||
\ElsIf{$quality\ge 7$}
|
|
||||||
\State $a\gets good$
|
|
||||||
\ElsIf{$quality\ge 5$}
|
|
||||||
\State $a\gets medium$
|
|
||||||
\ElsIf{$quality\ge 3$}
|
|
||||||
\State $a\gets bad$
|
|
||||||
\Else
|
|
||||||
\State $a\gets unusable$
|
|
||||||
\EndIf
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Compacter l'algorithme suivant en une seule condition de test::
|
|
||||||
|
|
||||||
Si il fait trop chaud Alors
|
|
||||||
Si il ne pleut pas Alors
|
|
||||||
Ouvrir la fenêtre
|
|
||||||
Sinon
|
|
||||||
Fermer la fenêtre
|
|
||||||
Finsi
|
|
||||||
Sinon
|
|
||||||
Fermer la fenêtre
|
|
||||||
Finsi
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Si il fait trop chaud ET il ne pleut pas Alors
|
|
||||||
Ouvrir la fenêtre
|
|
||||||
Sinon
|
|
||||||
Fermer la fenêtre
|
|
||||||
Finsi
|
|
||||||
|
|
||||||
|
|
||||||
L'instruction switch
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable.
|
|
||||||
Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable.
|
|
||||||
|
|
||||||
Les instructions d'itérations (boucles)
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
.. important:: Toutes les boucles concernent le paradigme de programmation impératif
|
|
||||||
et ne sont pas valides dans le paradigme de programmation fonctionnel
|
|
||||||
(puisque l'ordre d'évaluation importe)
|
|
||||||
|
|
||||||
- arrêt conditionnel (break)
|
|
||||||
- passage d'un pas (continue)
|
|
||||||
|
|
||||||
Répéter ... jusqu'à
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple de répéter ... jusqu'à}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\BState \emph{locales}: $i \gets 1$ \Comment{déclaration et initialisation de i}
|
|
||||||
\Repeat \Comment{c'est le label de début du répéter}
|
|
||||||
\State $i \gets \textit{i+1}$
|
|
||||||
\Until{i == 100} \Comment{condition de fin de la boucle}
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
La boucle **pour** (for)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple de boucle for}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\BState \emph{locales}: $sum\gets 0$
|
|
||||||
\For{$i\gets 1, n$}
|
|
||||||
\State $sum\gets sum+i$
|
|
||||||
\EndFor
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur,
|
|
||||||
et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
::
|
|
||||||
|
|
||||||
Variables N, i, PG en Entier
|
|
||||||
Debut
|
|
||||||
PG <- 0
|
|
||||||
Pour i <- 1 à 20
|
|
||||||
Ecrire "Entrez un nombre : "
|
|
||||||
Lire N
|
|
||||||
Si i = 1 ou N > PG Alors
|
|
||||||
PG <- N
|
|
||||||
FinSi
|
|
||||||
Ecrire "Le nombre le plus grand était : ", PG
|
|
||||||
Fin
|
|
||||||
|
|
||||||
|
|
||||||
.. attention:: ne jamais manipuler le compteur dans une boucle
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Variable Truc en Entier
|
|
||||||
Début
|
|
||||||
Pour Truc <- 1 à 15
|
|
||||||
Truc <- Truc * 2
|
|
||||||
Ecrire "Passage numéro : ", Truc
|
|
||||||
Truc Suivant
|
|
||||||
Fin
|
|
||||||
|
|
||||||
.. important:: Même la boucle for dépend de l'environnement de language,
|
|
||||||
ça n'est pas un axiome algorithmique, dans un contexte
|
|
||||||
impératif, la syntaxe sera de la forme::
|
|
||||||
|
|
||||||
for i=1 to 50 do
|
|
||||||
(... bla bla ...)
|
|
||||||
done
|
|
||||||
|
|
||||||
et dans un contexte objet:
|
|
||||||
|
|
||||||
for i in myobj:
|
|
||||||
(... bla bla ...)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
La boucle tant que (while)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple de boucle while}
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\BState \emph{locales}: $sum\gets 0$
|
|
||||||
\State $i\gets 1$
|
|
||||||
\While{$i\le n$}
|
|
||||||
\State $sum\gets sum+i$
|
|
||||||
\State $i\gets i+1$
|
|
||||||
\EndWhile
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Ecrire un algorithme de validation d'une entrée utilisateur
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
"Voulez vous un café ? (O/N)"
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** : deux solutions possibles, une
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Variable Rep en Caractère
|
|
||||||
Début
|
|
||||||
Rep <- ""
|
|
||||||
Ecrire "Voulez vous un café ? (O/N)"
|
|
||||||
TantQue Rep <> "O" et Rep <> "N"
|
|
||||||
Lire Rep
|
|
||||||
Si Rep <> "O" et Rep <> "N" Alors
|
|
||||||
Ecrire "Saisie Erronée, Recommencez"
|
|
||||||
FinSi
|
|
||||||
FinTantQue
|
|
||||||
Fin
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Variable Rep en Caractère
|
|
||||||
Début
|
|
||||||
Ecrire "Voulez vous un café ? (O/N)"
|
|
||||||
Lire Rep
|
|
||||||
TantQue Rep <> "O" et Rep <> "N"
|
|
||||||
Ecrire "Vous devez répondre par O ou N. Recommencez"
|
|
||||||
Lire Rep
|
|
||||||
FinTantQue
|
|
||||||
Ecrire "Saisie acceptée"
|
|
||||||
Fin
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : "C'est plus, C'est moins", c'est-à-dire Ecrire un algorithme qui demande à l’utilisateur
|
|
||||||
un nombre compris entre a et b jusqu’à ce que la réponse convienne.
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Variable N en Entier
|
|
||||||
Debut
|
|
||||||
N <- 0
|
|
||||||
Ecrire "Entrez un nombre entre 10 et 20"
|
|
||||||
TantQue N < 10 ou N > 20
|
|
||||||
Lire N
|
|
||||||
Si N < 10 Alors
|
|
||||||
Ecrire "Plus grand !"
|
|
||||||
SinonSi N > 20 Alors
|
|
||||||
Ecrire "Plus petit !"
|
|
||||||
FinSi
|
|
||||||
FinTantQue
|
|
||||||
Fin
|
|
||||||
|
|
||||||
Et les autres boucles : répéter... jusqu'à, etc...
|
|
||||||
|
|
||||||
.. raw:: latex
|
|
||||||
|
|
||||||
\begin{algorithm}
|
|
||||||
\caption{Exemple de boucle répéter}
|
|
||||||
|
|
||||||
\begin{algorithmic}[1]
|
|
||||||
\State $sum\gets 0$
|
|
||||||
\State $i\gets 1$
|
|
||||||
\Repeat
|
|
||||||
\State $sum\gets sum+i$
|
|
||||||
\State $i\gets i+1$
|
|
||||||
\Until{$i>n$}
|
|
||||||
\end{algorithmic}
|
|
||||||
\end{algorithm}
|
|
|
@ -1,833 +0,0 @@
|
||||||
Les structures de données
|
|
||||||
===========================
|
|
||||||
|
|
||||||
.. glossary::
|
|
||||||
|
|
||||||
ATD
|
|
||||||
|
|
||||||
Abstract Data Type, structure de données abstraites.
|
|
||||||
La représentation des données est forcément un choix.
|
|
||||||
Il est impossible de rendre compte globalement d'un élément du réel,
|
|
||||||
il faut en faire une interprétation abstraite.
|
|
||||||
|
|
||||||
**Exemple**:
|
|
||||||
|
|
||||||
- Un être humain peut être représenté par les données présentes dans sa
|
|
||||||
carte d'identité. Mais un être humain n'est pas sa carte d'identité.
|
|
||||||
- Un être humain peut être représenté par les données présentes dans ses préférences
|
|
||||||
de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net.
|
|
||||||
|
|
||||||
Les séquences
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Les types séquences (listes)
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# 4::1::5::8::1::[];;
|
|
||||||
- : int list = [4 ;1 ;5 ;8 ;1]
|
|
||||||
|
|
||||||
|
|
||||||
Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée.
|
|
||||||
Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice.
|
|
||||||
Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément.
|
|
||||||
|
|
||||||
**manipulation** :
|
|
||||||
|
|
||||||
- `insert()`
|
|
||||||
- `append()`
|
|
||||||
- `remove()`
|
|
||||||
- `find()`
|
|
||||||
- `print()`
|
|
||||||
- ...
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
zoo = ['bear', 'lion', 'panda', 'zebra']
|
|
||||||
print(zoo)
|
|
||||||
|
|
||||||
# But these list elements are not
|
|
||||||
biggerZoo = ['bear', 'lion', 'panda', 'zebra', ['chimpanzees', 'gorillas', 'orangutans', 'gibbons']]
|
|
||||||
print(biggerZoo)
|
|
||||||
|
|
||||||
- Lists Versus Tuples : types mutables, immutables
|
|
||||||
- Lists Versus Sets : non ordonné, collection simple
|
|
||||||
|
|
||||||
- Recherche dans une liste, recherche du maximum dans une liste
|
|
||||||
- Recherche d’un mot dans une chaîne de caractères.
|
|
||||||
|
|
||||||
Algorithme de la longueur d'une liste
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# let rec longueur l =
|
|
||||||
match l with
|
|
||||||
[] -> 0
|
|
||||||
| ::s -> 1 + (longueur s);;
|
|
||||||
|
|
||||||
Cette fonction est prédéfinie en Ocaml : `List.length`
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : écrire un algorithme qui déclare et
|
|
||||||
remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro.
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
::
|
|
||||||
|
|
||||||
Tableau Truc(6) en Numérique
|
|
||||||
Variable i en Numérique
|
|
||||||
Debut
|
|
||||||
Pour i <- 0 à 6
|
|
||||||
Truc(i) <- 0
|
|
||||||
i Suivant
|
|
||||||
Fin
|
|
||||||
|
|
||||||
exemple d'implémentation en python
|
|
||||||
|
|
||||||
.. code-block: python
|
|
||||||
|
|
||||||
>>> liste = []
|
|
||||||
>>> for i in range(6):
|
|
||||||
... liste.append(i)
|
|
||||||
...
|
|
||||||
>>> liste
|
|
||||||
[0, 1, 2, 3, 4, 5]
|
|
||||||
>>>
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Calcul du premier élément maximal dans une liste,
|
|
||||||
proposer une implémentation en python qui renvoie le maximum et
|
|
||||||
la position du max dans la liste.
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
.. code-block: python
|
|
||||||
|
|
||||||
def max_list(L) :
|
|
||||||
k = len(L)
|
|
||||||
max, x = L[0], 0
|
|
||||||
i = 1
|
|
||||||
while i < k :
|
|
||||||
if max < L[i]:
|
|
||||||
max = L[i]
|
|
||||||
x = i
|
|
||||||
i = i + 1
|
|
||||||
return max, x
|
|
||||||
|
|
||||||
couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
|
|
||||||
Exemple de généricité : ce code fonctionne avec une chaîne de caractères.
|
|
||||||
|
|
||||||
.. code-block: python
|
|
||||||
|
|
||||||
couple = max_list(’totovaaumarche’)
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
|
|
||||||
.. glossary::
|
|
||||||
|
|
||||||
Matrice
|
|
||||||
|
|
||||||
Tableaux de dimension multiple, c'est un tableau de tableau
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Écrivez un algorithme remplissant un tableau de 6 sur 13, avec des zéros.
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
implémentation en python
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> matrice = []
|
|
||||||
>>> for i in range(12):
|
|
||||||
... matrice.append([0 for i in range(5)])
|
|
||||||
...
|
|
||||||
>>> from pprint import pprint
|
|
||||||
>>> pprint(matrice)
|
|
||||||
[[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0]]
|
|
||||||
>>>
|
|
||||||
|
|
||||||
Algorithmes de tri
|
|
||||||
------------------
|
|
||||||
|
|
||||||
On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre.
|
|
||||||
|
|
||||||
Les algorithmes de tri ont une grande importance pratique.
|
|
||||||
Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database non relationnelle).
|
|
||||||
|
|
||||||
L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu.
|
|
||||||
|
|
||||||
Tri par insertion
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Cet algorithme de tri suit de manière naturelle la structure récursive des
|
|
||||||
listes. Soit l une liste à trier :
|
|
||||||
|
|
||||||
- si l est vide alors elle est déjà triée
|
|
||||||
- sinon, l est de la forme x::s et on trie récursivement la suite s et on obtient une liste triée s’
|
|
||||||
on insert x au bon endroit dans s’ et on obtient une liste triée
|
|
||||||
|
|
||||||
Description de l'algorithme
|
|
||||||
|
|
||||||
- la fonction inserer permet d’insérer un élément x dans une liste l
|
|
||||||
- si la liste l est triée alors x est inséré au bon endroit
|
|
||||||
|
|
||||||
.. important:: la manière naturelle d'implémenter cet algorithme est ici la récursivité
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# let rec inserer x l =
|
|
||||||
match l with
|
|
||||||
[] -> [x]
|
|
||||||
| y::s -> if x<=y then x::l else y::(inserer x s);;
|
|
||||||
val inserer : ’a -> ’a list -> ’a list
|
|
||||||
# inserer 5 [3 ;7 ;10];;
|
|
||||||
- : int list = [3 ; 5 ; 7 ; 10]
|
|
||||||
|
|
||||||
Tri rapide
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
soit une liste l à trier :
|
|
||||||
|
|
||||||
- si l est vide alors elle est triée
|
|
||||||
- sinon, choisir un élément p de la liste (le premier par exemple)
|
|
||||||
nommé le **pivot**
|
|
||||||
- partager l en deux listes g et d contenant les autres éléments de l
|
|
||||||
qui sont plus petits (resp. plus grands) que la valeur du pivot p
|
|
||||||
- trier récursivement g et d, on obtient deux listes g’ et d’ triées
|
|
||||||
|
|
||||||
la fonction suivante permet de partager une liste l en deux sous-listes g et
|
|
||||||
d contenant les éléments de l plus petits (resp. plus grands) qu’une valeur
|
|
||||||
donnée p
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
:caption: fonction de partage d'une liste
|
|
||||||
|
|
||||||
#let rec partage p l =
|
|
||||||
match l with
|
|
||||||
[] -> ([] , [])
|
|
||||||
|x::s -> let g,d = partage p s in
|
|
||||||
if x<=p then (x::g , d) else (g , x::d) ;;
|
|
||||||
|
|
||||||
val partage : ’a -> ’a list -> ’a list * ’a list = <fun>
|
|
||||||
|
|
||||||
# partage 5 [1 ;9 ;7 ;3 ;2 ;4];;
|
|
||||||
- : int list * int list = ([1 ; 3 ; 2 ; 4], [9 ; 7])
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
:caption: algorithme de tri rapide
|
|
||||||
|
|
||||||
# let rec tri rapide l =
|
|
||||||
match l with
|
|
||||||
[] -> []
|
|
||||||
| p::s -> let g , d = partage p s in
|
|
||||||
(tri rapide g)@[p]@(tri rapide d) ;;
|
|
||||||
|
|
||||||
val tri rapide : ’a list -> ’a list = <fun>
|
|
||||||
|
|
||||||
# tri rapide [5 ; 1 ; 9 ; 7 ; 3 ; 2 ; 4];;
|
|
||||||
- : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9]
|
|
||||||
|
|
||||||
|
|
||||||
autre exemple de tri : le tri fusion. Il y en a d'autres.
|
|
||||||
|
|
||||||
|
|
||||||
Le tri en python
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Pour comprendre comment marche le tri en Python, il faut comprendre que presque tout en Python est ordonnable car comparable
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> 1 > 0 # les nombres sont comparables
|
|
||||||
True
|
|
||||||
>>> 1 < 0
|
|
||||||
False
|
|
||||||
>>> "a" < "b" # les lettres, par ordre alphabetique
|
|
||||||
True
|
|
||||||
>>> True > False # les booléan (!)
|
|
||||||
True
|
|
||||||
>>> (1, 2) > (2, 1) # les iterables comparés, élément par élément dans l'ordre
|
|
||||||
False
|
|
||||||
>>> (1, 2) > [2, 1] # mais ils doivent être du même type
|
|
||||||
True
|
|
||||||
>>> {1:1} < {1:1, 0:0} # les dictionnaires, par nombre d'éléments
|
|
||||||
True
|
|
||||||
>>> "a" > 2 # si on mélange des types ça peut vide devenir bizarre
|
|
||||||
True
|
|
||||||
>>> 1j > 1 # PRESQUE tout est ordonnable
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "<ipython-input-11-ed3c013d3df8>", line 1, in <module>
|
|
||||||
1j > 1
|
|
||||||
TypeError: no ordering relation is defined for complex numbers
|
|
||||||
|
|
||||||
C’est ce qu’on appelle l’ordre naturel des éléments. Quand il n’y a pas d’ordre naturel évident (et que ce n’est pas une opération explicitement interdite comme avec les complexes),
|
|
||||||
Python va comparer l’id (imaginez l’adresse en mémoire)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> class PersonnageDeLost(object):
|
|
||||||
... pass
|
|
||||||
...
|
|
||||||
>>> mort1 = PersonnageDeLost()
|
|
||||||
>>> mort2 = PersonnageDeLost()
|
|
||||||
>>> mort1 < mort2
|
|
||||||
True
|
|
||||||
>>> id(mort1) # son id est plus petit, donc il est inférieur
|
|
||||||
39611408
|
|
||||||
>>> id(mort2)
|
|
||||||
41720976
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
class PersonnageDeCityHunter(object):
|
|
||||||
|
|
||||||
def __init__(self, nom, erectopouvoir):
|
|
||||||
self.nom = nom
|
|
||||||
self.erectopouvoir = erectopouvoir
|
|
||||||
|
|
||||||
|
|
||||||
def __lt__(self, other):
|
|
||||||
# on doit retourner un booléan qui confirme ou infirme
|
|
||||||
# l'opération "lt" ("lower than", c'est à dire "plus petit que")
|
|
||||||
return self.erectopouvoir < other.erectopouvoir
|
|
||||||
|
|
||||||
def __gt__(self, other):
|
|
||||||
# on doit retourner un booléan qui confirme ou infirme
|
|
||||||
# l'opération "gt" ("greater than", c'est à dire "plus grand que")
|
|
||||||
return self.erectopouvoir > other.erectopouvoir
|
|
||||||
|
|
||||||
# on peut faire la même chose pour les autres méthodes qui
|
|
||||||
# concernent les opérateurs <=, >=, == et !=
|
|
||||||
|
|
||||||
>>> PersonnageDeCityHunter('Ryo Saeba', 99999) > PersonnageDeCityHunter('Mamouth', 1)
|
|
||||||
True
|
|
||||||
>>> PersonnageDeCityHunter('Ryo Saeba', 99999) < PersonnageDeCityHunter('Mamouth', 1)
|
|
||||||
False
|
|
||||||
|
|
||||||
Ordonner une liste
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Avec `sort()` Les éléments sont triés dans leur ordre naturel automatiquement, du plus petit au plus grand:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = ['b', 'a', 'c']
|
|
||||||
>>> l.sort()
|
|
||||||
>>> l
|
|
||||||
['a', 'b', 'c']
|
|
||||||
>>> l = [(2, 1), (1, 2), (7, 8), (2, 2), (2, 0), (2, 3)]
|
|
||||||
>>> l.sort()
|
|
||||||
>>> l # ordonne sur le premier élément, puis le second si il y a égalité
|
|
||||||
[(1, 2), (2, 0), (2, 1), (2, 2), (2, 3), (7, 8)]
|
|
||||||
>>> persos = [PersonnageDeCityHunter('Ryo Saeba', 99999), PersonnageDeCityHunter('Mamouth', 1), PersonnageDeCityHunter('Kaori', 0)]
|
|
||||||
>>> persos.sort()
|
|
||||||
>>> for perso in persos:
|
|
||||||
... print perso.nom
|
|
||||||
...
|
|
||||||
Kaori
|
|
||||||
Mamouth
|
|
||||||
Ryo Saeba
|
|
||||||
|
|
||||||
et inversement:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = [1, 7, 3, 8]
|
|
||||||
>>> l.sort(reverse=True)
|
|
||||||
>>> l
|
|
||||||
[8, 7, 3, 1]
|
|
||||||
|
|
||||||
`sort()` et `sorted()` acceptent toutes les deux les mêmes arguments. Ce que vous apprenez pour l’un vaut pour l’autre. La seul différence est que sort() retourne None et modifie sur place, tandis que sorted() retourne une nouvelle liste. sorted() est un peu moins performant.
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> sorted((1, 7, 3, 8), reverse=True)
|
|
||||||
[8, 7, 3, 1]
|
|
||||||
|
|
||||||
Utilisations de tri personnalisés
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Parfois on a besoin de trier sur quelque chose de plus complexe qu’une lettre ou un chiffre. Par exemple, vous avez des scores dans un dictionnaires. Un dictionnaire n’est pas ordonné. Si vous imprimez un classement, il faut en faire une liste de tuples :
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> sorted(scores.items())
|
|
||||||
[('Cunegonde', 3), ('Gertrude', 4), ('Robert', 2), ('Roger', 1)]
|
|
||||||
|
|
||||||
C’est là qu’intervient le paramètre key. key est très particulier, c’est un paramètre qui attend qu’on lui passe un callback, donc key attend qu’on lui passe une fonction.
|
|
||||||
::
|
|
||||||
|
|
||||||
>>> def get_score(nom_et_score):
|
|
||||||
... return nom_et_score[1] # retourne le 2nd element du tuple
|
|
||||||
...
|
|
||||||
>>> sorted(scores.items(), key=get_score) # on passe la fonction a key
|
|
||||||
[('Roger', 1), ('Robert', 2), ('Cunegonde', 3), ('Gertrude', 4)]
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
classer des objets voiture en fonction de la puissance du moteur
|
|
||||||
|
|
||||||
autre exemple: ordonner des objets voitures selon leur coût d’entretien d’abord, et ensuite par coût d’achat.
|
|
||||||
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
class Voiture(object):
|
|
||||||
|
|
||||||
def __init__(self, cout_entretien, cout_achat):
|
|
||||||
self.cout_entretien = cout_entretien
|
|
||||||
self.cout_achat = cout_achat
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "<Voiture E-{} / A-{}>".format(self.cout_entretien, self.cout_achat)
|
|
||||||
|
|
||||||
>>> voitures = [Voiture(10000, 10000), Voiture(50000, 10000), Voiture(10000, 60000)]
|
|
||||||
>>> voitures
|
|
||||||
[<Voiture E-10000 / A-10000>, <Voiture E-50000 / A-10000>, <Voiture E-10000 / A-60000>]
|
|
||||||
>>> def get_entretien_achat(voiture):
|
|
||||||
... return (voiture.cout_entretien, voiture.cout_achat)
|
|
||||||
...
|
|
||||||
>>> sorted(voitures, key=get_entretien_achat)
|
|
||||||
[<Voiture E-10000 / A-10000>, <Voiture E-10000 / A-60000>, <Voiture E-50000 / A-10000>]
|
|
||||||
|
|
||||||
|
|
||||||
Définition d'un itérateur
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = range(10)
|
|
||||||
>>> for i in l:
|
|
||||||
... print l[i]
|
|
||||||
...
|
|
||||||
0
|
|
||||||
...
|
|
||||||
8
|
|
||||||
9
|
|
||||||
>>> l.__iter__()
|
|
||||||
<listiterator object at 0x7f78bb450410>
|
|
||||||
|
|
||||||
|
|
||||||
Les listes chaînées
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
typedef struct list{
|
|
||||||
int elt ;
|
|
||||||
struct list* suivant ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
**Outils de manipulation** :
|
|
||||||
|
|
||||||
- `next()`
|
|
||||||
- `pointer()`
|
|
||||||
- `insert(l, a)`
|
|
||||||
- `remove(a, n)`
|
|
||||||
|
|
||||||
|
|
||||||
Les piles
|
|
||||||
----------
|
|
||||||
|
|
||||||
**manipulation**
|
|
||||||
|
|
||||||
- `insert()` : insérer un élément à la fin de la pile
|
|
||||||
- `dequeue()` : (remove and return) : retirer un élément du haut de la pile
|
|
||||||
- FIFO : "first in first out"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Traduction d'une structure de données dans une autre
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> listOfStrings = ['One', 'Two', 'Three']
|
|
||||||
>>> strOfStrings = ' '.join(listOfStrings)
|
|
||||||
>>> print(strOfStrings)
|
|
||||||
One Two Three
|
|
||||||
>>>
|
|
||||||
>>> # List Of Integers to a String
|
|
||||||
... listOfNumbers = [1, 2, 3]
|
|
||||||
>>> strOfNumbers = ''.join(str(n) for n in listOfNumbers)
|
|
||||||
>>> print(strOfNumbers)
|
|
||||||
123
|
|
||||||
>>>
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
|
|
||||||
>>> result = []
|
|
||||||
>>> for hostname, ip, macaddress in l:
|
|
||||||
... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress))
|
|
||||||
...
|
|
||||||
>>> result
|
|
||||||
[{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'},
|
|
||||||
{'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}]
|
|
||||||
>>>
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Proposer un algorithme de traduction de cette structure de donnée
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
'address': '192.168.0.0',
|
|
||||||
'mask': '255.255.255.0',
|
|
||||||
'dynamicRanges': [
|
|
||||||
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
|
|
||||||
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'address': '192.168.0.0',
|
|
||||||
'mask': '255.255.255.0',
|
|
||||||
'dynamicRanges': [
|
|
||||||
{ 'low': '192.168.0.12', 'high': '192.168.0.45', 'only_unknown': True },
|
|
||||||
{ 'low': '192.168.0.8', 'high': '192.168.0.35', 'only_unknown': False },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'address': '192.168.0.1',
|
|
||||||
'mask': '255.255.255.0',
|
|
||||||
'dynamicRanges': [
|
|
||||||
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
|
|
||||||
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
En cette structure de données :
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
address: '192.168.0.0',
|
|
||||||
mask: '255.255.255.0',
|
|
||||||
dynamicRanges: [
|
|
||||||
{ low: '192.168.0.5', high: '192.168.0.12', only_unknown: true },
|
|
||||||
{ low: '192.168.0.50', high: '192.168.0.55', only_unknown: false },j
|
|
||||||
], [
|
|
||||||
{ low: '192.168.0.12', high: '192.168.0.45', only_unknown: true },
|
|
||||||
{ low: '192.168.0.8', high: '192.168.0.35', only_unknown: false },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'address': '192.168.0.1',
|
|
||||||
'mask': '255.255.255.0',
|
|
||||||
'dynamicRanges': [
|
|
||||||
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
|
|
||||||
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> from pprint import pprint
|
|
||||||
pprint(l)
|
|
||||||
[{'address': '192.168.0.0',
|
|
||||||
'dynamicRanges': [{'high': '192.168.0.12',
|
|
||||||
'low': '192.168.0.5',
|
|
||||||
'only_unknown': True},
|
|
||||||
{'high': '192.168.0.55',
|
|
||||||
'low': '192.168.0.50',
|
|
||||||
'only_unknown': False}],
|
|
||||||
'mask': '255.255.255.0'},
|
|
||||||
{'address': '192.168.0.0',
|
|
||||||
'dynamicRanges': [{'high': '192.168.0.45',
|
|
||||||
'low': '192.168.0.12',
|
|
||||||
'only_unknown': True},
|
|
||||||
{'high': '192.168.0.35',
|
|
||||||
'low': '192.168.0.8',
|
|
||||||
'only_unknown': False}],
|
|
||||||
'mask': '255.255.255.0'}]
|
|
||||||
>>> newdata = []
|
|
||||||
>>> for i in l:
|
|
||||||
... if i['address'] not in [j['address'] for j in newdata]:
|
|
||||||
... newdata.append(i)
|
|
||||||
... else:
|
|
||||||
... for k in newdata:
|
|
||||||
... if k['address'] == i['address']:
|
|
||||||
... k['dynamicRanges'].extend(i['dynamicRanges'])
|
|
||||||
...
|
|
||||||
>>> pprint(newdata)
|
|
||||||
[{'address': '192.168.0.0',
|
|
||||||
'dynamicRanges': [{'high': '192.168.0.12',
|
|
||||||
'low': '192.168.0.5',
|
|
||||||
'only_unknown': True},
|
|
||||||
{'high': '192.168.0.55',
|
|
||||||
'low': '192.168.0.50',
|
|
||||||
'only_unknown': False},
|
|
||||||
{'high': '192.168.0.45',
|
|
||||||
'low': '192.168.0.12',
|
|
||||||
'only_unknown': True},
|
|
||||||
{'high': '192.168.0.35',
|
|
||||||
'low': '192.168.0.8',
|
|
||||||
'only_unknown': False}],
|
|
||||||
'mask': '255.255.255.0'},
|
|
||||||
{'address': '192.168.10.0',
|
|
||||||
'dynamicRanges': [{'high': '192.168.0.12',
|
|
||||||
'low': '192.168.0.5',
|
|
||||||
'only_unknown': True},
|
|
||||||
{'high': '192.168.0.55',
|
|
||||||
'low': '192.168.0.50',
|
|
||||||
'only_unknown': False}],
|
|
||||||
'mask': '255.255.255.0'}]
|
|
||||||
>>>
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : Proposer un algorithme qui permette de récupérer la liste
|
|
||||||
des adresses IP disponibles
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
{
|
|
||||||
"local": {
|
|
||||||
"leases": [
|
|
||||||
{
|
|
||||||
"mac": "02:00:c0:a8:00:66",
|
|
||||||
"name": "pcxubuntu",
|
|
||||||
"address": "192.168.0.200"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mac": "02:00:c0:a8:00:67",
|
|
||||||
"name": "pcxubuntu",
|
|
||||||
"address": "192.168.0.201"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mac": "02:00:c0:a8:00:68",
|
|
||||||
"name": "pcxubuntu",
|
|
||||||
"address": "192.168.0.202"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
**Correction** :
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = {
|
|
||||||
... "local": {
|
|
||||||
... "leases": [
|
|
||||||
... {
|
|
||||||
... "mac": "02:00:c0:a8:00:66",
|
|
||||||
... "name": "pcxubuntu",
|
|
||||||
... "address": "192.168.0.200"
|
|
||||||
... },
|
|
||||||
... {
|
|
||||||
... "mac": "02:00:c0:a8:00:67",
|
|
||||||
... "name": "pcxubuntu",
|
|
||||||
... "address": "192.168.0.201"
|
|
||||||
... },
|
|
||||||
... {
|
|
||||||
... "mac": "02:00:c0:a8:00:68",
|
|
||||||
... "name": "pcxubuntu",
|
|
||||||
... "address": "192.168.0.202"
|
|
||||||
... }
|
|
||||||
... ]
|
|
||||||
... }
|
|
||||||
... }
|
|
||||||
>>> leases = l["local"]["leases"]
|
|
||||||
>>> from pprint import pprint
|
|
||||||
>>> pprint(leases)
|
|
||||||
[{'address': '192.168.0.200', 'mac': '02:00:c0:a8:00:66', 'name': 'pcxubuntu'},
|
|
||||||
{'address': '192.168.0.201', 'mac': '02:00:c0:a8:00:67', 'name': 'pcxubuntu'},
|
|
||||||
{'address': '192.168.0.202', 'mac': '02:00:c0:a8:00:68', 'name': 'pcxubuntu'}]
|
|
||||||
>>> addresses = [lease['address'] for lease in leases]
|
|
||||||
>>> addresses
|
|
||||||
['192.168.0.200', '192.168.0.201', '192.168.0.202']
|
|
||||||
>>>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Structures de données complexes
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
Les types produits nommés
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
On les appelle enregistrements, dictionnaires ou tables de hachage.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
algorithme monAlgorithme
|
|
||||||
// déclaration d'un enregistrement
|
|
||||||
enregistrement Personne
|
|
||||||
chaine nom;
|
|
||||||
chaine prenom;
|
|
||||||
entier age;
|
|
||||||
réel taille;
|
|
||||||
finenregistrement
|
|
||||||
...
|
|
||||||
Personne[50] t;
|
|
||||||
début
|
|
||||||
// Initialisation
|
|
||||||
t[0].nom <- "Duchmol";
|
|
||||||
t[0].prenom <- "Robert";
|
|
||||||
t[0].age <- 24;
|
|
||||||
t[0].taille <- 1.80;
|
|
||||||
...
|
|
||||||
fin
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# type adresse = { rue : string ; ville : string ; cp : int};;
|
|
||||||
# type fiche = {
|
|
||||||
nom : string ;
|
|
||||||
prenom : string ;
|
|
||||||
adresse : adresse ;
|
|
||||||
date naissance : int * int * int ;
|
|
||||||
tel fixe : string ;
|
|
||||||
portable : string
|
|
||||||
};;
|
|
||||||
# let v1 = { a = 1 ; b = false ; c = 'r'};;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
les types sommes
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
appelés aussi type construits, ou types algébriques
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# type couleur = Pique | Coeur | Carreau | Trefle;;
|
|
||||||
# let v = (Pique , Coeur);;
|
|
||||||
val v : couleur * couleur = (Pique , Coeur)
|
|
||||||
# let a = Trefle ;;
|
|
||||||
val a : couleur = Trefle
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
type nombre =
|
|
||||||
Ent of int | Reel of float | Cplx of float × float
|
|
||||||
Ent, Reel, Cplx sont les constructeurs du type.
|
|
||||||
|
|
||||||
Les arbres
|
|
||||||
----------
|
|
||||||
|
|
||||||
Structure de données construite sur un type somme récursif.
|
|
||||||
|
|
||||||
arbre binaire :
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
type arbre = Vide | Noeud of int * arbre * arbre
|
|
||||||
let a =
|
|
||||||
Noeud(10,
|
|
||||||
Noeud(2,Noeud(8,Vide,Vide),Vide),
|
|
||||||
Noeud(5,Noeud(11,Vide,Vide),Noeud(3,Vide,Vide)));;
|
|
||||||
|
|
||||||
arbre binaire polymorphe :
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre;;
|
|
||||||
let b = Noeud(10,Noeud(5,Vide,Vide),Vide);;
|
|
||||||
let c = Noeud(’f’,Vide,Noeud(’a’,Vide,Noeud(’g’,Vide,Vide)));;
|
|
||||||
|
|
||||||
- parcours d’un arbre binaire
|
|
||||||
- itérateurs sur un arbre binaire
|
|
||||||
- taille d'un arbre
|
|
||||||
|
|
||||||
arbre n-aire::
|
|
||||||
|
|
||||||
type ’a arbre = Vide | Noeud of ’a * ’a arbre list;;
|
|
||||||
|
|
||||||
- transformation d'un arbre en un autre
|
|
||||||
- arbre ordonné (arbre de recherche)
|
|
||||||
- équilibrage des arbres de recherche
|
|
||||||
|
|
||||||
|
|
||||||
Un arbre binaire est ordonné (ou de recherche) par rapport à une relation
|
|
||||||
d’ordre quelconque si :
|
|
||||||
|
|
||||||
- c’est l’arbre vide (Vide)
|
|
||||||
- c’est un arbre non-vide Noeud(x,g,d) et
|
|
||||||
|
|
||||||
1. les éléments du sous-arbre gauche g sont inférieurs à la racine x
|
|
||||||
2. la racine x est inférieure aux éléments du sous-arbre droit d
|
|
||||||
3. les sous-arbres g et d sont eux-mêmes ordonnés
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
let a1 =
|
|
||||||
Noeud(5, Noeud(2, Vide, Vide),
|
|
||||||
Noeud(20, Noeud(10, Noeud(6, Vide, Vide),
|
|
||||||
Noeud(14,Vide, Vide)),
|
|
||||||
Noeud(21,Vide,Vide)));;
|
|
||||||
|
|
||||||
.. image:: _static/AbreOrdonne.png
|
|
||||||
|
|
||||||
Recherche d'un élément dans un arbre ordonné
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
La structure ordonnée des arbres binaires de recherche permet d’effectuer
|
|
||||||
la recherche d’un élément avec une compléxité en moyenne de O(log n)
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
let rec recherche elt abr =
|
|
||||||
match abr with
|
|
||||||
| Vide -> false
|
|
||||||
| Noeud (x,_,_) when x = elt -> true
|
|
||||||
| Noeud (x,g,_) when elt < x -> recherche elt g
|
|
||||||
| Noeud (_,_,d) -> recherche elt d
|
|
||||||
;;
|
|
||||||
|
|
||||||
Autres structures de données complexes
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- graphes
|
|
||||||
- dates
|
|
||||||
- le parcours de graphes
|
|
||||||
- les calculs de dates
|
|
|
@ -1,107 +0,0 @@
|
||||||
.. include:: ../../tronCommun/fonctions.txt
|
|
||||||
|
|
||||||
Définitions par filtrage
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
type formule = Vrai | Faux | Conjonction of formule * formule
|
|
||||||
|
|
||||||
|
|
||||||
le fitrage permet un examen par cas sur les valeurs construites::
|
|
||||||
|
|
||||||
let rec evalue = function
|
|
||||||
| Vrai -> true
|
|
||||||
| Faux -> false
|
|
||||||
| Conjonction (Faux, _) | Conjonction (_, Faux) -> false
|
|
||||||
| Conjonction (f1, f2) -> evalue f1 && evalue f2;;
|
|
||||||
|
|
||||||
|
|
||||||
Lorsqu'un argument est passé à un ensemble de clauses :
|
|
||||||
|
|
||||||
- la première clause qui filtre l'argument est exécutée, les autres sont
|
|
||||||
ignorées.
|
|
||||||
- si aucune clause ne filtre l'argument, une exception est levée.
|
|
||||||
|
|
||||||
exemple de définition par cas
|
|
||||||
::
|
|
||||||
|
|
||||||
let points v =
|
|
||||||
match v with
|
|
||||||
Pique -> 1
|
|
||||||
| Trefle -> 2
|
|
||||||
| Coeur -> 3
|
|
||||||
| Carreau -> 4;;
|
|
||||||
|
|
||||||
# points a ;;
|
|
||||||
- : int = 2
|
|
||||||
|
|
||||||
|
|
||||||
Définitions récursives
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
En ocaml, `let rec` définit une variable récursive, ie qui utilise la (les) valeur(s) en cours de définition.
|
|
||||||
|
|
||||||
Exemples
|
|
||||||
--------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
let rec f (x) = if x <= 1 then 1 else f(x-1) + f(x-2) ;;
|
|
||||||
let rec g (x) = if x = 0 then 1 else x * g (x-1) ;;
|
|
||||||
let rec h (x, y) = if x = 0 then 1 else h (x-1, h(x,y)) ;;
|
|
||||||
let rec m (x) = if x > 100 then x - 10 else m (m (x+11)) ;;
|
|
||||||
|
|
||||||
On peut imprimer leur valeurs pour qques valeurs::
|
|
||||||
|
|
||||||
begin
|
|
||||||
for i = 1 to 15 do
|
|
||||||
printf "%d " (f(i)) done;
|
|
||||||
printf "\n"
|
|
||||||
end ;;
|
|
||||||
|
|
||||||
f, g sont les fonctions de Fibonacci et factorielles. C'est la même notation que pour les suites récurrentes. Que valent h et m ?
|
|
||||||
|
|
||||||
La récursivité est très puissante. Invention de Kleene (1935). Théorie des fonctions récursives, comme moyen général de calcul.
|
|
||||||
On peut montrer qu'il existe toujours des fonctions récursives partielles (qui ne terminent pas pour tte valeur de leurs arguments), si on veut un modèle général. La sous théorie des fonctions récursives primitives correspond aux programmes sans boucles, sans appels récursifs, et l'instruction for. Ces programmes terminent toujours. (cf Introduction to Metamathematics, S. Kleene; Recursive Functions Theory and Logic, A. Yasuhara).
|
|
||||||
|
|
||||||
Church et les autres logiciens des années 30 ont montré que systèmes de Post, les fonctions récursives de Kleene, les machines de Turing, sont tous équivalentes. Il a émis la thèse suivante: tous les modèles de la calculabilité sont équivalents.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Fonctions récursives
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
let rec fact n = if n > 1 then n * fact (n -1) else 1;;
|
|
||||||
|
|
||||||
dans le prompt::
|
|
||||||
|
|
||||||
utop # let rec fact n = if n > 1 then n * fact (n -1) else 1;;
|
|
||||||
utop # fact 5;;
|
|
||||||
- : int = 120
|
|
||||||
|
|
||||||
et mutuellement récursives::
|
|
||||||
|
|
||||||
let rec ping n = if n > 0 then pong (n - 1) else "ping"
|
|
||||||
and pong n = if n > 0 then ping (n - 1) else "pong";;
|
|
||||||
|
|
||||||
|
|
||||||
# ping 8 ;;
|
|
||||||
- : bytes = "ping"
|
|
||||||
# ping 15 ;;
|
|
||||||
- : bytes = "pong"
|
|
||||||
|
|
||||||
types récursif
|
|
||||||
---------------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
type 'a liste =
|
|
||||||
Vide
|
|
||||||
| Cellule of 'a * 'a liste;;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
.. include:: ../../tronCommun/fondement.txt
|
|
|
@ -1,21 +0,0 @@
|
||||||
Algorithmique Approfondie
|
|
||||||
=========================
|
|
||||||
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
presentation
|
|
||||||
fondement
|
|
||||||
langage
|
|
||||||
algo
|
|
||||||
programme
|
|
||||||
fonctions
|
|
||||||
control
|
|
||||||
donnees
|
|
||||||
apercu
|
|
||||||
complexite
|
|
||||||
modularite
|
|
||||||
modules
|
|
||||||
tp
|
|
||||||
annexes/index
|
|
|
@ -1 +0,0 @@
|
||||||
.. include:: ../../tronCommun/langage.txt
|
|
|
@ -1,200 +0,0 @@
|
||||||
La programmation structurée
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Un langage de programmation doit permettre la programmation structurée.
|
|
||||||
|
|
||||||
.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes,
|
|
||||||
Elles sont une nécessité
|
|
||||||
|
|
||||||
Structuration d'un programme
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
La réalisation d'applications importantes oblige le programmeur ou l'équipe de
|
|
||||||
développement à se poser des questions d'organisation et de structuration.
|
|
||||||
Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les
|
|
||||||
particularités sont distincts.
|
|
||||||
|
|
||||||
L'écriture des vrais programmes consiste à les structurer pour les présenter
|
|
||||||
comme un assemblage de briques qui s'emboîtent naturellement.
|
|
||||||
Ce problème se révèle fondamental dès que la taille des programmes devient conséquente.
|
|
||||||
Si on ne prend pas garde au bon découpage des programmes en modules indépendants,
|
|
||||||
on se retrouve rapidement débordé par un grand nombre de variables,
|
|
||||||
et il devient quasiment impossible de réaliser un programme correct.
|
|
||||||
|
|
||||||
La programmation raisonnée
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
Un **programme** est le codage d'un algorithme dans un langage de programmation.
|
|
||||||
La programmation consiste à modéliser un problème du monde réel sous une forme
|
|
||||||
symbolique (pour faire résoudre ce problème par un ordinateur).
|
|
||||||
|
|
||||||
Certains problèmes sont **indécidables** ou **ouverts**.
|
|
||||||
On utilise un langage de programmation pour décrire la **solution** du programme.
|
|
||||||
La sémantique du programme est le sens de chacune des constructions du langage.
|
|
||||||
**Comment passer de l'énoncé d'un problème à un programme de bonne qualité ?**
|
|
||||||
|
|
||||||
spécifier
|
|
||||||
|
|
||||||
décrire de manière complète et rigoureuse le problème à résoudre
|
|
||||||
|
|
||||||
modéliser
|
|
||||||
|
|
||||||
proposer une représentation du réel qui soit accessible au calcul
|
|
||||||
algorithmique
|
|
||||||
|
|
||||||
transcrire
|
|
||||||
|
|
||||||
La transcription du modèle algorithmique se fait dans un langage
|
|
||||||
de programmation cible adapté au problème
|
|
||||||
|
|
||||||
valider
|
|
||||||
|
|
||||||
La validation du programme est une étape qui permet de s'assurer plus ou
|
|
||||||
moins fortement que le programme produit les résultats attendus.
|
|
||||||
La validation va de la série de tests unitaires (validation faible)
|
|
||||||
à la preuve de programme (validation mathématique forte).
|
|
||||||
|
|
||||||
Conception descendante
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Une vision **centripète** : du général au particulier.
|
|
||||||
|
|
||||||
Il s'agit d'une méthode de résolution d'un problème. On le découpe en tâches
|
|
||||||
de plus en plus fines, de plus en plus détaillées, qui aboutiront au programme final.
|
|
||||||
|
|
||||||
On met des *trous* dans les algorithmes de plus haut niveau,
|
|
||||||
c'est-à-dire des phrases en langage naturel.
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**Exercice** : **Calculer la date du lendemain**
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
- l'algorithme de plus bas niveau
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
lendemain jour =
|
|
||||||
si jour [est le dernier jour du mois] alors
|
|
||||||
resultat = [calculer le 1er janvier de l'année suivante]
|
|
||||||
sinon
|
|
||||||
resultat = lendemain_dansl'année jour
|
|
||||||
|
|
||||||
- les algorithmes de plus bas niveau
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
lendemain_dans_l'année jour =
|
|
||||||
si jour [est le dernier jour du mois] alors
|
|
||||||
resultat = [calculer le premier jour du mois suivant]
|
|
||||||
sinon
|
|
||||||
resultat = jour suivant jour
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
jour_suivant jour =
|
|
||||||
jour + 1
|
|
||||||
|
|
||||||
et ainsi de suite jusqu'à ce que toutes les phrases soient calculables.
|
|
||||||
|
|
||||||
Algorithme vague
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
L'algorithme vague, c'est quand on pense l'algorithme en se plaçant du côté de
|
|
||||||
l'implémentation en premier. On a le nez dans le guidon, la vue d'ensemble est
|
|
||||||
difficile.
|
|
||||||
|
|
||||||
Voici, tiré du monde réel, un exemple d'algorithme vague
|
|
||||||
("ce que doit faire une fonction"), placé dans un bout de code
|
|
||||||
(souvent la **docstring** d'une fonction).
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
def upsert_route(*args, **kwargs):
|
|
||||||
"""
|
|
||||||
Create or modify an existant DHCP route
|
|
||||||
param tuple (id or null, machine name, IP, MAC Adress)
|
|
||||||
return True or False with error message
|
|
||||||
"""
|
|
||||||
# si id présent alors modification sinon ajout
|
|
||||||
# récupère la liste des réservations en cours
|
|
||||||
# y cherche la variable sur la base de l'ID
|
|
||||||
# modifie les valeurs
|
|
||||||
# applique la nouvelle conf DHCP
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
Voici un autre bout de code avec l'algorithme en commentaire,
|
|
||||||
et l'implémentation effective de l'algorithme
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
def del_route(*args, **kwargs):
|
|
||||||
"""
|
|
||||||
Delete an existant DHCP route
|
|
||||||
param tuple (id, machine name, IP, MAC Adress)
|
|
||||||
return True or False with error message
|
|
||||||
"""
|
|
||||||
# récupère la liste des réservations en cours
|
|
||||||
# y cherche la variable sur l'id donné en paramètre
|
|
||||||
# supprime l'entrée avec vérification que les données fournies
|
|
||||||
# sont bien dans l'enregistrement à supprimer
|
|
||||||
# applique la nouvelle conf DHCP
|
|
||||||
route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17")
|
|
||||||
routes = get_routes()
|
|
||||||
if route_to_del in routes:
|
|
||||||
c = creole_loader(load_extra=True, rw=True)
|
|
||||||
c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0])
|
|
||||||
if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2]
|
|
||||||
and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]:
|
|
||||||
c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id)
|
|
||||||
config_save_values(c, MODNAME)
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
Les deux grands paradigmes
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
La modularité
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Les données et les traitements sont regroupés au sein d'une même entité à deux
|
|
||||||
facettes : d'un côté le code proprement dit, de l'autre son interface. La
|
|
||||||
communication entre modules s'effectue via leur interface. La description d'un
|
|
||||||
type peut être masquée en n'apparaissant pas dans l'interface du module. Ces
|
|
||||||
types de données abstraits facilitent les modifications d'implantation à
|
|
||||||
l'intérieur d'un module sans affecter les autres modules qui s'en servent. De
|
|
||||||
plus, les modules peuvent être paramétrés par d'autres modules augmentant
|
|
||||||
ainsi leur réutilisabilité.
|
|
||||||
|
|
||||||
Le paradigme objet
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Les descriptions des traitements et des données sont regroupées dans des
|
|
||||||
entités appelées **classes**; un objet est une instance (valeur) d'une classe.
|
|
||||||
La communication entre objets est réalisée par envoi de message, l'objet
|
|
||||||
receveur détermine à l'exécution (liaison retardée) le traitement
|
|
||||||
correspondant au message. En cela, la programmation objet est dirigée par
|
|
||||||
les données. La structuration d'un programme provient des relations entre
|
|
||||||
classes, en particulier l'héritage permet de définir une classe par extension
|
|
||||||
d'une autre.
|
|
||||||
|
|
||||||
En programmation objet, un **programme** est une collection d’objets qui communiquent
|
|
||||||
entre eux par **message**, le **résultat** est un message envoyé à un objet particulier
|
|
||||||
|
|
||||||
Comparaison entre les deux paradigmes
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Il y a dualité entre ces deux modèles.
|
|
||||||
|
|
||||||
- On ne peut pas augmenter les composants d'un type dans un module (pas
|
|
||||||
d'extensibilité des données), mais on peut ajouter de nouveaux traitements
|
|
||||||
(extensibilité des traitements) sur ces données.
|
|
||||||
|
|
||||||
- En objet, on peut ajouter des sous-classes à une classe (extensibilité des
|
|
||||||
données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux
|
|
||||||
traitements visibles de la classe ancêtre (pas d'extensibilité des traitements).
|
|
||||||
|
|
||||||
**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les
|
|
||||||
traitements et les données.**
|
|
|
@ -1,516 +0,0 @@
|
||||||
La programmation modulaire
|
|
||||||
===========================
|
|
||||||
|
|
||||||
Il s'agit de décomposer un grand programme en
|
|
||||||
morceaux (**modules**) connectés entre eux par des **interfaces** bien
|
|
||||||
définies.
|
|
||||||
|
|
||||||
Ces modules doivent être aussi indépendants que possible.
|
|
||||||
|
|
||||||
.. glossary::
|
|
||||||
|
|
||||||
module
|
|
||||||
|
|
||||||
ensemble de ressources liées sémantiquement
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
mode d’emploi du module, avec en plus un principe de masquage
|
|
||||||
des informations (partie publique, partie secrète)
|
|
||||||
|
|
||||||
|
|
||||||
signature
|
|
||||||
|
|
||||||
suite de déclarations, types, exceptions, valeurs, modules, etc.
|
|
||||||
|
|
||||||
implantation
|
|
||||||
|
|
||||||
suite de définitions, qui doit comporter tout ce qui est requis par la
|
|
||||||
signature
|
|
||||||
|
|
||||||
Type abstrait et langage de modules : la programmation modulaire
|
|
||||||
permet d'aller très loin dans la programmation structurée.
|
|
||||||
|
|
||||||
|
|
||||||
Définir des fonctions dans un fichier séparé
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
Les fonctions peuvent être définies dans un fichier et le programme dans un
|
|
||||||
autre fichier séparé. Dans ce cas, pour pouvoir être exécuté directement avec
|
|
||||||
la commande python `nomfichierprogramme.py`, le fichier du programme doit
|
|
||||||
importer d’abord les fonctions du fichier dans lequel les fonctions sont
|
|
||||||
définies.
|
|
||||||
|
|
||||||
1. Fichier de fonctions
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
# Fichier foncmaxliste.py
|
|
||||||
# Recherche le premier élément maximal dans une liste ou
|
|
||||||
#dans une chaine de caractères
|
|
||||||
def max_list(L) :
|
|
||||||
k = len(L)
|
|
||||||
max, x = L[0], 0
|
|
||||||
i = 1
|
|
||||||
while i < k :
|
|
||||||
if max < L[i]:
|
|
||||||
max = L[i]
|
|
||||||
x = i
|
|
||||||
i = i + 1
|
|
||||||
return max, x
|
|
||||||
|
|
||||||
2. Fichier de programme
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Pour utilser les fonctions définies dans d’autres fichiers, le fichier de
|
|
||||||
programme doit commencer par les instructions qui importent ces fichiers de
|
|
||||||
fonctions ou directement les fonctions de ces fichiers. Dans la syntaxe
|
|
||||||
ci-dessous, on importe une ou toutes les fonctions du fichier `foncmaxlist.py`.
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
# Fichier progmaxlist.py
|
|
||||||
from foncmaxliste import max_list
|
|
||||||
# ou plus simple:
|
|
||||||
# from foncmaxliste import *
|
|
||||||
print max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
|
||||||
couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
print max_list(’totovaaumarche’)
|
|
||||||
couple = max_list(’totovaaumarche’)
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
|
|
||||||
Au lieu d’importer les fonctions, on peut importer le fichier qui définit les
|
|
||||||
fonctions avec la syntaxe qui suit. Dans ce cas, le fichier de programme sera
|
|
||||||
changé comme suit :
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
# Fichier prog2maxlist
|
|
||||||
import foncmaxliste
|
|
||||||
print foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
|
||||||
# la syntaxe indiquant le chemin d’acces a la fonction max_list utiliser ‘‘.’’
|
|
||||||
couple = foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
print foncmaxliste.max_list(’totovaaumarche’)
|
|
||||||
couple = foncmaxliste.max_list(’totovaaumarche’)
|
|
||||||
print ’Max de L est ’, couple[0]
|
|
||||||
print ’et se trouve à la position ’, couple[1]
|
|
||||||
|
|
||||||
L’exécution directe du premier fichier de programme::
|
|
||||||
|
|
||||||
python prog max list.py
|
|
||||||
|
|
||||||
L’exécution directe du seconde fichier de programme::
|
|
||||||
|
|
||||||
python prog2 max list.py
|
|
||||||
|
|
||||||
Définition de l'implémentation d'un module
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
Tout fichier qui contient au moins une définition d’une fonction ou d’une
|
|
||||||
variable est appelé un module (une bibliothèque). Le nom du module est le nom
|
|
||||||
du fichier enlevé le suffixe `.py`. Ainsi, un fichier de programme qui contient
|
|
||||||
au moins une définition d’une fonction ou un fichier qui ne contient que des
|
|
||||||
définition de fonctions sont des modules. On peut importer un module ou des
|
|
||||||
fonctions ou variables d’un module dans un programme, comme nous avons vu dans
|
|
||||||
les exemples ci-dessus.
|
|
||||||
|
|
||||||
.. important:: on peut importer un module, ou bien lancer un module en tant que
|
|
||||||
programme executable
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
||||||
Pour faciliter la programmation, Python définit un certain nombre de **modules internes**,
|
|
||||||
appelés les builtins (la librairie standard).
|
|
||||||
|
|
||||||
Par exemple :
|
|
||||||
|
|
||||||
– Lors de l’ouverture d’une session interactive, on est dans un module interne nommé
|
|
||||||
main . Toutes les variables définies par affectation au niveau de ce module sont valides
|
|
||||||
globalement dans la session.
|
|
||||||
|
|
||||||
– D’autres modules internes sont string, math, random
|
|
||||||
|
|
||||||
Dans une session de travail sous l’interpréteur Python, la première importation d’un mo-
|
|
||||||
dule qui, à part des fonctions qu’elle définit, contient des instruction de programme fait
|
|
||||||
exécuter ces instructions. Dans la même session, les importations suivantes ne font pas
|
|
||||||
exécuter ces instructions. Pour les exécuter, on utilise la fonction reload(nomdumodule)
|
|
||||||
(sans sufffixe .py).
|
|
||||||
|
|
||||||
Exemples d'interface
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
type: son type
|
|
||||||
arguments
|
|
||||||
arg1 : description de l'argument 1
|
|
||||||
arg2 : description de l'argument 2
|
|
||||||
préconditions:
|
|
||||||
arg1 > 10
|
|
||||||
postconditions:
|
|
||||||
result < 19
|
|
||||||
raises: TypeError, AssertionError, SystemError...
|
|
||||||
test: tests nominaux pour chaque cas spécifié
|
|
||||||
|
|
||||||
- L'interface racine carrée
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
racine:
|
|
||||||
type: float -> float
|
|
||||||
arguments x: float, flottant dont on veut calculer la racine
|
|
||||||
pré: x >= 0
|
|
||||||
test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError
|
|
||||||
|
|
||||||
- L'interface `lendemain`
|
|
||||||
|
|
||||||
Il faut définir auparavant un type spécifique appelé `date`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
lendemain: le lendemain est la date qui désigne
|
|
||||||
le jour suivant de la date passée en argument
|
|
||||||
type: date -> date
|
|
||||||
arguments :
|
|
||||||
d: date
|
|
||||||
description: la date dont on veut calculer le lendemain
|
|
||||||
|
|
||||||
Le langages des modules
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module type PILE = (* signature (interface) du module *)
|
|
||||||
sig
|
|
||||||
type ’a t
|
|
||||||
val create : unit -> ’a t
|
|
||||||
val push : ’a -> ’a t -> unit
|
|
||||||
val pop : ’a t -> ’a
|
|
||||||
end
|
|
||||||
|
|
||||||
(* implémentation du module *)
|
|
||||||
module Pile : PILE = (* le module est restreint
|
|
||||||
par la signature PILE *)
|
|
||||||
struct
|
|
||||||
type ’a t = ’a list ref
|
|
||||||
let create () = ref []
|
|
||||||
let push x p = p := x::!p
|
|
||||||
let pop p = match !p with [...]
|
|
||||||
let rec print p = match p with [...]
|
|
||||||
end
|
|
||||||
|
|
||||||
- `struct .. end` introduit une collection de définitions, valeurs, types ou modules.
|
|
||||||
C'est une **structure**.
|
|
||||||
|
|
||||||
- `module Nom = struct .. end` permet de donner un nom à cette structure et
|
|
||||||
c'est ça un module. C'est une structure nommée.
|
|
||||||
|
|
||||||
- `sig ... end` introduit une signature de module : une interface pour un module.
|
|
||||||
|
|
||||||
On restreint souvent une structure par une signature pour "cacher" certaines
|
|
||||||
définitions. Une signature de module fournit une **interface** entre l'extérieur
|
|
||||||
et l'intérieur d'un module.
|
|
||||||
|
|
||||||
En dehors du module, on accède à ses composants grâce à la notation pointée
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
let p = Pile.create()
|
|
||||||
Pile.push 45 p
|
|
||||||
|
|
||||||
|
|
||||||
**Signature inférée** : Lorsque la déclaration d'interface n'existe pas.
|
|
||||||
|
|
||||||
|
|
||||||
Contrainte de type par signature
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module M =
|
|
||||||
struct
|
|
||||||
type t = int * int * int
|
|
||||||
let make d m y = d,m,y
|
|
||||||
end
|
|
||||||
|
|
||||||
module M :
|
|
||||||
sig type t = int * int * int
|
|
||||||
val make : ’a -> ’b -> ’c -> ’a * ’b * ’c end
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
ici la signature inférée est du type le plus général.
|
|
||||||
Cela peut poser des difficultés. Lesquelles ?
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
une incohérence entre type attendu et type obtenu
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# let d = M.make 52 24 137 ;;
|
|
||||||
val d : int * int * int = (52, 24, 137)
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module M =
|
|
||||||
struct
|
|
||||||
type t = int * int * int ;;
|
|
||||||
let make d m y = d, m, y ;;
|
|
||||||
end ;;
|
|
||||||
|
|
||||||
let d = M.make 8 5 8 ;;
|
|
||||||
|
|
||||||
module type S =
|
|
||||||
sig
|
|
||||||
type t ;;
|
|
||||||
val make : int -> int -> int -> t ;;
|
|
||||||
end ;;
|
|
||||||
|
|
||||||
module MS = (M:S) ;;
|
|
||||||
|
|
||||||
MS.make 5 1 2 ;;
|
|
||||||
|
|
||||||
|
|
||||||
autre exemple
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module type DATE =
|
|
||||||
sig
|
|
||||||
type t = int * int * int
|
|
||||||
val mmax : int -> int -> int
|
|
||||||
val make : int -> int -> int -> t
|
|
||||||
val get_day : t -> int
|
|
||||||
val get_month : t -> int
|
|
||||||
val get_year : t -> int
|
|
||||||
end
|
|
||||||
|
|
||||||
on est alors obligé de contrôler la vraissemblance des valeurs dans chaque fonction du module, sinon le contrôle n'est pas maîtrisé...
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
M.get_month (23,45,67);;
|
|
||||||
- : int = 45
|
|
||||||
|
|
||||||
Le problème vient du fait que l’implantation du type Date.t est **publique**.
|
|
||||||
|
|
||||||
Le Type abstrait de données permet de masquer l’implantation du type.
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module type DATE = sig
|
|
||||||
type t
|
|
||||||
val mmax : int -> int -> int
|
|
||||||
val make : int -> int -> int -> t
|
|
||||||
val get_day : t -> int
|
|
||||||
val get_month : t -> int
|
|
||||||
val get_year : t -> int
|
|
||||||
end
|
|
||||||
|
|
||||||
usage::
|
|
||||||
|
|
||||||
# module Date = (M:DATE) ;;
|
|
||||||
module Date : DATE
|
|
||||||
|
|
||||||
Le contrôle est maîtrisé::
|
|
||||||
|
|
||||||
Date.get_month (23,45,67);;
|
|
||||||
This expression has type int * int * int but is here used with type Date.t
|
|
||||||
|
|
||||||
Si (M:S) alors la structure M est une instance de la signa-
|
|
||||||
ture S
|
|
||||||
|
|
||||||
|
|
||||||
Type et signature
|
|
||||||
------------------
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# module type A = sig
|
|
||||||
val a: int -> int
|
|
||||||
end ;;
|
|
||||||
module type A = sig val a : int -> int end
|
|
||||||
# module B = struct
|
|
||||||
let a x = x + 1 ;;
|
|
||||||
end;;
|
|
||||||
module B : sig val a : int -> int end
|
|
||||||
# module C = (B:A) ;;
|
|
||||||
module C : A
|
|
||||||
|
|
||||||
# C.a 2 ;;
|
|
||||||
- : int = 3
|
|
||||||
#
|
|
||||||
|
|
||||||
Module auquel on impose une signature
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
module type DATE = sig
|
|
||||||
type t
|
|
||||||
val make: int -> t
|
|
||||||
val get_year: t -> int
|
|
||||||
val get_month: t -> int
|
|
||||||
end ;;
|
|
||||||
|
|
||||||
module MR = struct
|
|
||||||
type t = int * int
|
|
||||||
let make x y = (x, y)
|
|
||||||
let get_month (x, y) = x
|
|
||||||
let get_year (x, y) = y
|
|
||||||
end ;;
|
|
||||||
|
|
||||||
module date = (MR:DATE) ;;
|
|
||||||
|
|
||||||
|
|
||||||
Structure et signature
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Une structure peut avoir plusieurs signatures
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# module Cpt =
|
|
||||||
struct
|
|
||||||
let x = ref 0
|
|
||||||
let reset () = x := 0
|
|
||||||
let next () = incr x; !x
|
|
||||||
end
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
Créer deux modules n’ayant pas les mêmes droits sans toucher à
|
|
||||||
l’implantation.
|
|
||||||
|
|
||||||
.. ifconfig:: correction
|
|
||||||
|
|
||||||
une vue administrateur
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module type ADM =
|
|
||||||
sig
|
|
||||||
val reset : unit -> unit
|
|
||||||
val next : unit -> int
|
|
||||||
end
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
module Adm = (Cpt:ADM)
|
|
||||||
# (* le compteur lui-même est invisible *)
|
|
||||||
# Adm.x;;
|
|
||||||
Unbound value Adm.x
|
|
||||||
|
|
||||||
une vue utilisateur
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module type USR =
|
|
||||||
sig
|
|
||||||
val next : unit -> int
|
|
||||||
end
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# module Usr = (Cpt:USR)
|
|
||||||
# Usr.next();;
|
|
||||||
- : int = 1
|
|
||||||
# Usr.reset();;
|
|
||||||
Unbound value Usr.reset
|
|
||||||
|
|
||||||
Contrainte partage du code (et du compteur) : impossible de construire deux composants administrateurs et utilisateurs autonomes.
|
|
||||||
|
|
||||||
- une unité qui contient les trois modules
|
|
||||||
- un composant qui publie les deux modules mais pas le module commun (un package)
|
|
||||||
|
|
||||||
L'héritage par inclusion
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# module Cpt2 = struct
|
|
||||||
include Cpt
|
|
||||||
let get() = !x
|
|
||||||
let next() = x := 2 * !x; !x
|
|
||||||
end ;;
|
|
||||||
module Cpt2 :
|
|
||||||
sig
|
|
||||||
val x : int ref
|
|
||||||
val reset : unit -> unit
|
|
||||||
val get : unit -> int
|
|
||||||
val next : unit -> int
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
Les foncteurs
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Si un langage possède un langage de modules, on peut aller plus loin : on peut
|
|
||||||
considérer un module comme étant une expression de base du langage.
|
|
||||||
|
|
||||||
- La signature d'un module peut être considérée comme le type du module
|
|
||||||
- La structure du module peut être considéré comme sa valeur
|
|
||||||
|
|
||||||
Quel est l'intérêt ? On peut alors définir des **foncteurs**.
|
|
||||||
|
|
||||||
foncteur
|
|
||||||
|
|
||||||
"fonction" d'une structure vers une autre structure.
|
|
||||||
On peut ainsi paramétrer un module par un autre module.
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) ... =
|
|
||||||
struct
|
|
||||||
...
|
|
||||||
end
|
|
||||||
|
|
||||||
On applique un foncteur à des paramètres modules, pour
|
|
||||||
obtenir un nouveau module :
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
module M = F (Titi) (Toto)
|
|
||||||
|
|
||||||
|
|
||||||
exemple, le module Set::
|
|
||||||
|
|
||||||
|
|
||||||
module OrderedInt =
|
|
||||||
struct type t=int let compare = compare end ;;
|
|
||||||
module OrderedInt : sig type t = int val compare : ’a -> ’a -> int end
|
|
||||||
# module IntSet = Set.Make(OrderedInt)
|
|
||||||
module IntSet :
|
|
||||||
sig
|
|
||||||
type elt = OrderedInt.t
|
|
||||||
type t = Set.Make(OrderedInt).t
|
|
||||||
val empty : t
|
|
||||||
|
|
||||||
Ou, plus court::
|
|
||||||
|
|
||||||
|
|
||||||
module IntSet = Set.Make(struct type t=int let compare = compare end)
|
|
||||||
|
|
||||||
|
|
||||||
Le parallèle peut se faire entre les classes et les modules.
|
|
||||||
|
|
||||||
- module : Encapsulation données/traitements
|
|
||||||
- classes : différenciation données/traitements et possibilité de création de plusieurs instances
|
|
||||||
|
|
||||||
|
|
||||||
classes et types, inférences de types de classes
|
|
||||||
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
Avant propos
|
|
||||||
============
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. include:: ../../tronCommun/presentation.txt
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: _static/pascal.jpg
|
|
||||||
|
|
||||||
|
|
||||||
Objectifs de ce cours
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Il s'agit de :
|
|
||||||
|
|
||||||
- choisir une représentation appropriée des données
|
|
||||||
- décomposer en sous-problèmes et affinements successifs (programmation dynamique)
|
|
||||||
- approfondir les connaissances des structures de données et des algorithmes
|
|
||||||
- les appliquer à la résolution de problèmes
|
|
||||||
- rappels sur les types abstraits de données
|
|
||||||
- rappels sur la complexité des algorithmes
|
|
||||||
- abstractions de données et de contrôle
|
|
||||||
- utilisation de librairies de bases implémentant quelques algorithmes (tri, itérateur...)
|
|
||||||
- choix de collections et structures de données adaptée au design d'un programme
|
|
||||||
- structures de données complexes arbres, tables, graphes
|
|
|
@ -1,2 +0,0 @@
|
||||||
.. include:: ../../tronCommun/programme.txt
|
|
||||||
|
|
|
@ -1,136 +0,0 @@
|
||||||
Travaux Pratiques
|
|
||||||
=================
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
Ecrire un algorithme qui renvoie le résultat d’une mini-calculatrice. Cette
|
|
||||||
méthode aura
|
|
||||||
comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « -
|
|
||||||
», « * »,
|
|
||||||
« / ».
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
|
|
||||||
Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en
|
|
||||||
paramètre
|
|
||||||
sont des anagrammes l’un de l’autre. (Lettres identiques mais dans un ordre
|
|
||||||
différent)
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
ascii art (ligne d'étoiles)
|
|
||||||
|
|
||||||
Concevoir un algorithme qui, pour un caractère imprimable et un nombre n
|
|
||||||
donnés, imprime une barre
|
|
||||||
horizontale de n de ces caractères.
|
|
||||||
|
|
||||||
``****************``
|
|
||||||
|
|
||||||
2. Modifier l’algorithme pour l’impression d’une barre double.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
****************
|
|
||||||
****************
|
|
||||||
|
|
||||||
3. Modifier l’algorithme pour l’impression d’une barre d’épaisseur quelconque
|
|
||||||
donnée.
|
|
||||||
4. (optionnel) Transformer les algorithmes ci-dessus en fonctions.
|
|
||||||
5. Écrire un programme Java implémentant la dernière version de l’algorithme
|
|
||||||
(épaisseur quelconque).
|
|
||||||
|
|
||||||
3.3
|
|
||||||
Triangle de nombres
|
|
||||||
Concevoir un algorithme qui imprime pour n donné::
|
|
||||||
|
|
||||||
1
|
|
||||||
1 2
|
|
||||||
1 2 3
|
|
||||||
1 2 3 4
|
|
||||||
1 2 3 4 5
|
|
||||||
...........
|
|
||||||
.............
|
|
||||||
...............
|
|
||||||
1 2 3 4 5 6 ... n
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
code de césar : faire un programme pour chiffrer et déchiffrer par décalage
|
|
||||||
|
|
||||||
exemples : Effectue une rotation de x caractères vers la droite::
|
|
||||||
|
|
||||||
>>> print(chiffre('bonjour', 3))
|
|
||||||
erqmrxu
|
|
||||||
>>> print(chiffre('Bonjour les amis!', 3))
|
|
||||||
Erqmrxu ohv dplv!
|
|
||||||
>>> print(chiffre('Erqmrxu ohv dplv!', 23))
|
|
||||||
Bonjour les amis!
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
écrire “Entrer un numéro de mois”
|
|
||||||
mois <- lire
|
|
||||||
selon que mois est
|
|
||||||
cas 1 : écrire “janvier (31 jours)”
|
|
||||||
cas 2 : écrire “février (28 ou 29 jours)”
|
|
||||||
cas 3 : écrire “mars (31 jours)”
|
|
||||||
cas 4 : écrire “avril (30 jours)”
|
|
||||||
cas 5 : écrire “mai (31 jours)”
|
|
||||||
cas 6 : écrire “juin (30 jours)”
|
|
||||||
cas 7 : écrire “juillet (31 jours)”
|
|
||||||
cas 8 : écrire “août (31 jours)”
|
|
||||||
cas 9 : écrire “septembre (30 jours)”
|
|
||||||
cas 10 : écrire “octobre (31 jours)”
|
|
||||||
cas 11 : écrire “novembre (30 jours)”
|
|
||||||
cas 12 : écrire “décembre (31 jours)”
|
|
||||||
défaut : écrire “numéro invalide”
|
|
||||||
fselon
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
|
|
||||||
tp liste :
|
|
||||||
recherche par dichotomie d'un élément dans une triée
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
tp ensembles :
|
|
||||||
|
|
||||||
Écrivez une fonction Python `Delta(A,B)` qui renvoie la différence symétrique de deux ensembles A et B::
|
|
||||||
|
|
||||||
A delta B := A union B \ A intersection B.
|
|
||||||
|
|
||||||
Un ensemble est représenté sous forme de liste et on supposera que chaque valeur contenue dans une liste n'apparaît qu'une fois.
|
|
||||||
Par exemple si A=[2,1,5,6,9] et B=[7,4,5,2,8], la liste renvoyée est la liste [1,6,9,7,4,8].
|
|
||||||
|
|
||||||
|
|
||||||
.. ifconfig:: exercice
|
|
||||||
|
|
||||||
**travaux pratiques :**
|
|
||||||
|
|
||||||
tp dictionnaires :
|
|
||||||
|
|
||||||
On rappelle qu'un dictionnaire en python est une structure énumérée (comme les listes, tuples, chaînes) dont les clés sont quelconques (dans les autres cas les clefs sont entières). Comme pour une liste, on accède à la valeur associée à une clef c par H[c]. On crée un dictionnaire vide dico avec dico = {}. On crée une nouvelle entrée en écrivant par exemple dico["pseudo"] = "Keyser Söze". On obtient la liste des clés avec list(dico.keys()) et la liste des valeurs avec list(dico.values()). Pour récupérer une valeur à partir de sa clef, il suffit d'écrire dico[clef].
|
|
||||||
|
|
||||||
Écrivez une fonction Python Distribution(chaine) qui renvoie un dictionnaire dont les clefs sont les caractères de la chaîne passée en paramètre et la valeur associée à une clef c est le nombre d'occurences de ce caractère dans la chaîne. Par exemple, si chaine="abaccab", alors le dictionnaire renvoyé est {"a":3,"b":2,"c":2}. Écrivez une fonction LettreLaPlusFrequente(chaine) qui renvoie la lettre la plus fréquente dans la chaine.
|
|
||||||
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
RST = python tools/rst.py
|
|
||||||
|
|
||||||
TEXDOCUMENTS = $(basename $(wildcard *.tex))
|
|
||||||
RSTDOCUMENTS = $(basename $(wildcard *.txt))
|
|
||||||
|
|
||||||
SOURCES = $(addsuffix .tex,$(TEXDOCUMENTS))
|
|
||||||
DVI = $(addsuffix .dvi,$(TEXDOCUMENTS))
|
|
||||||
POSTSCRIPT = $(addsuffix .ps,$(TEXDOCUMENTS))
|
|
||||||
POSTSCRIPT_GZ = $(addsuffix .ps.gz,$(TEXDOCUMENTS))
|
|
||||||
PDF = $(addsuffix .pdf,$(TEXDOCUMENTS))
|
|
||||||
RSTSOURCES = $(addsuffix .txt,$(RSTDOCUMENTS))
|
|
||||||
HTML = $(TEXDOCUMENTS) $(addsuffix .html,$(RSTDOCUMENTS))
|
|
||||||
|
|
||||||
all: dvi ps ps.gz html
|
|
||||||
dvi: $(DVI)
|
|
||||||
ps: $(POSTSCRIPT)
|
|
||||||
ps.gz: $(POSTSCRIPT_GZ)
|
|
||||||
pdf: $(PDF)
|
|
||||||
html: $(HTML)
|
|
||||||
|
|
||||||
|
|
||||||
${DVI}: %.dvi: %.tex
|
|
||||||
latex $<
|
|
||||||
latex $<
|
|
||||||
|
|
||||||
${POSTSCRIPT}: %.ps: %.dvi
|
|
||||||
dvips -o $@ $<
|
|
||||||
|
|
||||||
${POSTSCRIPT_GZ}: %.ps.gz: %.ps
|
|
||||||
gzip -c $< > $@
|
|
||||||
|
|
||||||
${PDF}: %.pdf: %.tex
|
|
||||||
rm -f $*.out $*.log $*.aux
|
|
||||||
xelatex $<
|
|
||||||
rm -f $*.out $*.log $*.aux
|
|
||||||
|
|
||||||
%: %.tex %.dvi
|
|
||||||
latex2html -local_icons $<
|
|
||||||
touch $@
|
|
||||||
|
|
||||||
%.html: %.txt
|
|
||||||
$(RST) $< > $@
|
|
||||||
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f -- *~ *.log *.aux *.out *.nav *.snm *.toc ${DVI} ${POSTSCRIPT} ${POSTSCRIPT_GZ} ${PDF}
|
|
||||||
rm -fr ${HTML}
|
|
|
@ -1,291 +0,0 @@
|
||||||
\documentclass[ignorenonframetext]{beamer}
|
|
||||||
\usepackage{graphicx}
|
|
||||||
% Internal links only wors with second screen on the right
|
|
||||||
% \setbeameroption{show notes on second screen}
|
|
||||||
\usetheme{Madrid}
|
|
||||||
\usecolortheme{dolphin}
|
|
||||||
|
|
||||||
% gets rid of bottom navigation bars
|
|
||||||
\setbeamertemplate{footline}[frame number]{}
|
|
||||||
|
|
||||||
% gets rid of navigation symbols
|
|
||||||
\setbeamertemplate{navigation symbols}{}
|
|
||||||
|
|
||||||
%\usetheme{Warsaw}
|
|
||||||
%\usepackage[french]{babel}
|
|
||||||
%\usepackage[utf8,utf8x]{inputenc}
|
|
||||||
%\usepackage[T1]{fontenc}
|
|
||||||
|
|
||||||
|
|
||||||
% Replace babel
|
|
||||||
\usepackage{polyglossia}
|
|
||||||
\setdefaultlanguage{french}
|
|
||||||
|
|
||||||
%% Require XeTeX
|
|
||||||
\usepackage{xltxtra}
|
|
||||||
\usepackage{fontspec}
|
|
||||||
\usepackage{xunicode}
|
|
||||||
|
|
||||||
\logo{
|
|
||||||
\hspace{120pt}
|
|
||||||
\includegraphics[width=2cm]{img/cesi.jpg}~
|
|
||||||
\hspace{113pt}
|
|
||||||
\includegraphics[width=1cm]{img/logo-cadoles.png}~
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%%\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}}
|
|
||||||
|
|
||||||
\title[]{Algorithmique Approfondie}
|
|
||||||
|
|
||||||
\subtitle{CESI alternance}
|
|
||||||
\subtitle{INFAL24}
|
|
||||||
|
|
||||||
\author[Gwenaël Rémond]{}
|
|
||||||
|
|
||||||
%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}}
|
|
||||||
\institute[Cadoles]{\includegraphics[width=2cm]{img/cesi.jpg}}
|
|
||||||
|
|
||||||
%\date{{\small 8 avril 2013}}
|
|
||||||
|
|
||||||
\subject{Talks}
|
|
||||||
|
|
||||||
\AtBeginSection[] % Add a TOC with current section highlighted
|
|
||||||
{
|
|
||||||
\begin{frame}<beamer>
|
|
||||||
\frametitle{Plan}
|
|
||||||
\tableofcontents[currentsection]
|
|
||||||
\end{frame}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
\usepackage{hyperref}
|
|
||||||
\usepackage{hyperxmp}
|
|
||||||
\hypersetup{%
|
|
||||||
colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone,
|
|
||||||
pdftitle={EAD3},
|
|
||||||
pdfsubject={Présentation technique d'EWT},
|
|
||||||
pdfauthor={EOLE},
|
|
||||||
pdfkeywords={EOLE, J-EOLE, distribution, GNU, Linux, Éducation,
|
|
||||||
nationale, Ubuntu},
|
|
||||||
pdflang={fr-FR},
|
|
||||||
pdfcopyright={Copyright © 2017 Équipe EOLE <eole@ac-dijon.fr>}, % Require XeTeX
|
|
||||||
pdflicenseurl={http://creativecommons.org/licenses/by-nc-sa/2.0/fr/},
|
|
||||||
}
|
|
||||||
|
|
||||||
\parskip=0.8em
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\frame{\titlepage}
|
|
||||||
|
|
||||||
\section{Introduction}
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Objectifs}
|
|
||||||
|
|
||||||
\texttt{
|
|
||||||
"Il ne suffit pas d'avoir les mains propres, \\
|
|
||||||
il faut aussi avoir l'esprit pur."\\
|
|
||||||
}
|
|
||||||
\emph{Thalès ; VIe s. av. J.-C.}
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item<1-> maîtriser et concevoir un algorithme,
|
|
||||||
\item<2-> choisir une représentation appropriée des données,
|
|
||||||
\item<3-> décomposer en sous-problèmes et affinements successifs,
|
|
||||||
\item<4-> savoir organiser son code et faire des petits programmes en python.
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{L'art de programmer}
|
|
||||||
\texttt{GEEK SUBLIME (Vikram CHANDRA)
|
|
||||||
Une vision esthétique, littéraire, mathématique du codage}
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item<1-> Programmer, c'est abstraire, prendre du recul.
|
|
||||||
\item<2-> Abstraire, par rapport à quoi ? Par rapport à la machine
|
|
||||||
\item<3-> Les niveaux d'abstraction par rapport à la machine
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Les langages de programmation}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Qu'est-ce qu'un langage de programmation ?
|
|
||||||
\item Les grands paradigmes de programmation (procédural, objet, fonctionnel, modulaire, générique \dots)
|
|
||||||
\item L'historique des langages.
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\section{Algorithmique}
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Les algorithmes}
|
|
||||||
\begin{itemize}
|
|
||||||
\item définition d'un algorithme
|
|
||||||
\item implémentation d'un algorithme
|
|
||||||
\item représentation d'un algorithme dans un langage cible
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\section{Algorithmique pour la programmation}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Qu'est-ce qu'un programme ?}
|
|
||||||
\begin{itemize}
|
|
||||||
\item <1-> Les expressions
|
|
||||||
\item <2-> Les déclarations
|
|
||||||
\item <3-> La REPL (Read Eval Print Loop)
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Approche générale des fonctions}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Les procédures
|
|
||||||
\item La portée d'une variable
|
|
||||||
\item Les fonctions
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Les structures de contrôle}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Le branchement conditionnel
|
|
||||||
\item L'itération
|
|
||||||
\item \dots
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Les structures de données}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Les listes
|
|
||||||
\item Les dictionnaires
|
|
||||||
\item Les arbres, les graphes \dots
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{L'état de l'art de l'algorithmique}
|
|
||||||
\begin{itemize}
|
|
||||||
\item en mathématiques, quelques grands thèmes
|
|
||||||
\begin{itemize}
|
|
||||||
\item géométrie algorithmique
|
|
||||||
\item algorithmique algébrique
|
|
||||||
\item arithmétique modulaire
|
|
||||||
\item \dots
|
|
||||||
\end{itemize}
|
|
||||||
\item en informatique
|
|
||||||
\begin{itemize}
|
|
||||||
\item en informatique fondamentale
|
|
||||||
\item en langages de programmation
|
|
||||||
\item systèmes cryptographiques
|
|
||||||
\item reconnaissance de motifs
|
|
||||||
\item mais aussi les problèmes posés par l’algorithmique parallèle \dots
|
|
||||||
\item
|
|
||||||
\end{itemize}
|
|
||||||
\item en sciences physique, en biologie
|
|
||||||
\item en sciences sociales (réseaux sociaux, auto-organisation\dots)
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\section{Complexité d'un algorithme}
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Complexité d'un algorithme}
|
|
||||||
\begin{itemize}
|
|
||||||
\item coût d'un algorithme
|
|
||||||
\item évaluation du coût
|
|
||||||
\item définition mathématique
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\section{Programmation modulaire}
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{La programmation modulaire}
|
|
||||||
\begin{itemize}
|
|
||||||
\item La programmation raisonnée
|
|
||||||
\item Le paradigme modulaire vs le paradigme objet
|
|
||||||
\item exemple de programmation modulaire en python
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
||||||
\section{Programmation modulaire avancée}
|
|
||||||
\begin{frame}
|
|
||||||
\frametitle{Les modules sont comme les classes}
|
|
||||||
\begin{itemize}
|
|
||||||
\item L'encapsulation
|
|
||||||
\item Le typage et la signature, l'héritage
|
|
||||||
\item Catégories et foncteurs
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
||||||
% Not present in TOC
|
|
||||||
\appendix
|
|
||||||
|
|
||||||
\begin{frame}[label=thanks]{Remerciements}
|
|
||||||
|
|
||||||
Je remercie la communauté du logiciel libre pour tous ces
|
|
||||||
merveilleux logiciels sans lesquels si peu de choses existeraient.
|
|
||||||
|
|
||||||
Cette présentation a été réalisée grâce aux logiciels libres
|
|
||||||
suivants~:
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Le système de composition \LaTeX{}
|
|
||||||
\href{https://fr.wikipedia.org/wiki/TeX_Live}{TeX Live}
|
|
||||||
\item L'éditeur de texte
|
|
||||||
\href{http://www.vim.org/}{Vim}
|
|
||||||
\item L'environnement graphique
|
|
||||||
\href{http://gnome.org/}{Gnome}
|
|
||||||
\item Le système d'exploitation
|
|
||||||
\href{https://debian.org/}{Debian}
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\begin{center}
|
|
||||||
% Do not mess with graphics
|
|
||||||
\hypersetup{hidelinks}
|
|
||||||
\begin{tabular}{cccccc}
|
|
||||||
\href{http://www.gnu.org}{\includegraphics[height=1.3cm]{graphics/gnu-head.pdf}} &
|
|
||||||
\href{http://www.kernel.org}{\includegraphics[height=1.2cm]{graphics/tux.pdf}} &
|
|
||||||
\href{http://www.debian.org/}{\includegraphics[height=1cm]{graphics/debian.eps}} &
|
|
||||||
\href{https://fr.wikipedia.org/wiki/TeX_Live}{\includegraphics[height=1cm]{graphics/texlive.pdf}}
|
|
||||||
\end{tabular}
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}[label=license]{Licence}
|
|
||||||
Cette présentation est mise à disposition sous licence\\
|
|
||||||
\href{http://creativecommons.org/licenses/by-sa/4.0}%
|
|
||||||
{Creative Commons \textsc{by-sa 4.0}}
|
|
||||||
\begin{columns}[t]
|
|
||||||
\begin{column}{5.5cm}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Attribution
|
|
||||||
\end{itemize}
|
|
||||||
\end{column}
|
|
||||||
\begin{column}{6.5cm}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Partage dans les mêmes conditions
|
|
||||||
\end{itemize}
|
|
||||||
\end{column}
|
|
||||||
\end{columns}
|
|
||||||
Vous pouvez obtenir une copie de la licence
|
|
||||||
\begin{block}{par Internet}
|
|
||||||
\href{http://creativecommons.org/licenses/by-nc-sa/4.0}%
|
|
||||||
{\url{http://creativecommons.org/licenses/by-nc-sa/4.0}}
|
|
||||||
\end{block}
|
|
||||||
\begin{block}{par courrier postal}
|
|
||||||
\begin{quote}
|
|
||||||
Creative Commons\\
|
|
||||||
444 Castro Street, Suite 900 Mountain View,\\
|
|
||||||
California, 94041, USA.
|
|
||||||
\end{quote}
|
|
||||||
\end{block}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\end{document}
|
|
|
@ -1,133 +0,0 @@
|
||||||
%!PS-Adobe-3.0 EPSF-3.0
|
|
||||||
%%Creator: cairo 1.14.8 (http://cairographics.org)
|
|
||||||
%%CreationDate: Tue May 16 12:20:58 2017
|
|
||||||
%%Pages: 1
|
|
||||||
%%DocumentData: Clean7Bit
|
|
||||||
%%LanguageLevel: 2
|
|
||||||
%%BoundingBox: 0 -1 232 85
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
save
|
|
||||||
50 dict begin
|
|
||||||
/q { gsave } bind def
|
|
||||||
/Q { grestore } bind def
|
|
||||||
/cm { 6 array astore concat } bind def
|
|
||||||
/w { setlinewidth } bind def
|
|
||||||
/J { setlinecap } bind def
|
|
||||||
/j { setlinejoin } bind def
|
|
||||||
/M { setmiterlimit } bind def
|
|
||||||
/d { setdash } bind def
|
|
||||||
/m { moveto } bind def
|
|
||||||
/l { lineto } bind def
|
|
||||||
/c { curveto } bind def
|
|
||||||
/h { closepath } bind def
|
|
||||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
|
||||||
0 exch rlineto 0 rlineto closepath } bind def
|
|
||||||
/S { stroke } bind def
|
|
||||||
/f { fill } bind def
|
|
||||||
/f* { eofill } bind def
|
|
||||||
/n { newpath } bind def
|
|
||||||
/W { clip } bind def
|
|
||||||
/W* { eoclip } bind def
|
|
||||||
/BT { } bind def
|
|
||||||
/ET { } bind def
|
|
||||||
/pdfmark where { pop globaldict /?pdfmark /exec load put }
|
|
||||||
{ globaldict begin /?pdfmark /pop load def /pdfmark
|
|
||||||
/cleartomark load def end } ifelse
|
|
||||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
|
||||||
/EMC { mark /EMC pdfmark } bind def
|
|
||||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
|
||||||
/Tj { show currentpoint cairo_store_point } bind def
|
|
||||||
/TJ {
|
|
||||||
{
|
|
||||||
dup
|
|
||||||
type /stringtype eq
|
|
||||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
|
||||||
} forall
|
|
||||||
currentpoint cairo_store_point
|
|
||||||
} bind def
|
|
||||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
|
||||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
|
||||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
|
||||||
{ pop cairo_selectfont } if } bind def
|
|
||||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
|
||||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
|
||||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
|
||||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/g { setgray } bind def
|
|
||||||
/rg { setrgbcolor } bind def
|
|
||||||
/d1 { setcachedevice } bind def
|
|
||||||
%%EndProlog
|
|
||||||
%%BeginSetup
|
|
||||||
%%EndSetup
|
|
||||||
%%Page: 1 1
|
|
||||||
%%BeginPageSetup
|
|
||||||
%%PageBoundingBox: 0 -1 232 85
|
|
||||||
%%EndPageSetup
|
|
||||||
q 0 -1 232 86 rectclip q
|
|
||||||
0.290196 0.247059 0.454902 rg
|
|
||||||
133.668 16.757 m 133.668 16.757 133.25 1.257 148.941 1.257 c 176.328 1.257
|
|
||||||
l 170.723 3.749 168.633 5.874 164.891 10.585 c 150.969 10.585 l 147.234
|
|
||||||
10.585 145.441 13.222 145.441 17.538 c 145.441 17.538 145.492 75.363 145.414
|
|
||||||
75.445 c 142.301 82.999 133.668 84.519 133.668 84.519 c 133.668 83.995
|
|
||||||
133.676 39.347 133.668 16.757 c h
|
|
||||||
133.668 16.757 m f
|
|
||||||
41.039 38.73 m 41.207 38.808 41.25 38.921 41.457 39.109 c 41.5 40.347 41.375
|
|
||||||
41.511 41.164 42.823 c 40.625 46.238 40.664 49.726 41.207 53.07 c 41.125
|
|
||||||
53.214 l 41.043 53.366 40.914 53.405 40.914 53.405 c 40.664 53.48 40.414
|
|
||||||
53.554 40.121 53.515 c 35.613 53.366 31.141 52.577 26.758 51.265 c 24.457
|
|
||||||
50.702 22.16 50.14 19.863 49.577 c 17.984 49.015 16.688 48.152 15.812 46.913
|
|
||||||
c 16.062 46.839 16.145 46.691 16.23 46.538 c 16.48 46.464 l 16.395 46.238
|
|
||||||
l 15.98 45.863 15.812 45.409 15.895 44.886 c 15.977 44.738 16.105 44.698
|
|
||||||
16.188 44.55 c 16.523 44.327 16.859 44.101 17.062 43.909 c 17.234 43.988
|
|
||||||
17.234 43.988 17.355 43.952 c 17.523 44.027 17.816 44.062 18.023 44.249
|
|
||||||
c 18.316 44.288 18.445 44.249 18.57 44.21 c 24.836 43.464 30.973 41.999
|
|
||||||
37.027 39.933 c 37.152 39.894 37.281 39.855 37.242 39.749 c 37.324 39.597
|
|
||||||
37.449 39.558 37.406 39.445 c 37.91 39.296 l 38.91 38.995 39.785 38.734
|
|
||||||
40.75 38.698 c 40.914 38.769 40.914 38.769 41.039 38.73 c 39.117 40.687
|
|
||||||
m 38.117 40.988 l 39.078 40.948 l 39.16 40.796 39.117 40.687 39.117 40.687
|
|
||||||
c f
|
|
||||||
49.855 72.859 m 49.855 72.859 54.316 79.749 63.262 84.269 c 13.684 84.269
|
|
||||||
l 0.484 84.269 0.527 73.152 0.527 73.152 c 0.527 17.499 l 0.527 17.499
|
|
||||||
0.117 1.984 15.809 1.984 c 64.07 1.984 l 58.465 4.472 54.559 8.597 50.816
|
|
||||||
13.308 c 50.816 13.308 15.844 13.296 15.891 13.308 c 11.449 13.308 12.086
|
|
||||||
17.542 12.086 17.542 c 12.156 69.034 l 12.156 73.109 15.902 72.859 15.902
|
|
||||||
72.859 c f
|
|
||||||
69.723 45.148 m 69.723 45.148 66.891 28.866 79.219 23.05 c 84.949 20.351
|
|
||||||
89.504 19.945 95.855 22.363 c 99.852 23.882 103.457 27.659 104.977 31.769
|
|
||||||
c 106.496 35.878 105.191 40.874 101.199 44.757 c 99.793 38.538 98.297 33.53
|
|
||||||
92.91 30.741 c 89.711 29.116 86.457 29.386 83.211 30.995 c 79.961 32.605
|
|
||||||
77.473 36.48 76.484 40.363 c 76.484 40.363 74.473 47.585 82.195 59.417
|
|
||||||
c 75.809 56.718 70.875 52.245 69.723 45.148 c h
|
|
||||||
69.723 45.148 m f
|
|
||||||
0.945098 0.792157 0.0745098 rg
|
|
||||||
110.621 8.773 m 117.836 13.503 123.312 20.792 125.211 30.261 c 125.238
|
|
||||||
30.429 l 126.707 37.968 125.305 45.933 121.43 52.601 c 117.527 59.308 110.711
|
|
||||||
64.777 102.098 65.82 c 102.074 65.831 l 96.797 66.464 90.988 64.273 86.93
|
|
||||||
60.507 c 82.406 55.163 80.273 51.816 80.387 44.03 c 84.254 49.132 94.043
|
|
||||||
54.202 100.949 53.523 c 105.414 52.984 108.629 50.445 110.898 46.542 c
|
|
||||||
113.168 42.636 114.066 37.445 113.184 33.058 c 110.383 19.085 94.641 12.073
|
|
||||||
81.125 15.976 c 62.398 21.382 55.426 40.464 63.086 58.038 c 72.824 73.859
|
|
||||||
90.422 80.905 113.074 77.519 c 105.887 85.03 93.703 83.984 93.703 83.984
|
|
||||||
c 82.363 84.874 61.398 78.519 53.613 63.808 c 42.234 42.316 52.059 11.566
|
|
||||||
78.055 4.062 c 89.188 0.847 101.344 2.695 110.621 8.777 c h
|
|
||||||
110.621 8.773 m f
|
|
||||||
0.290196 0.247059 0.454902 rg
|
|
||||||
194.387 67.495 m 185.594 67.495 178.215 64.179 172.285 57.597 c 166.355
|
|
||||||
51.011 164.41 42.503 164.41 32.046 c 164.41 20.98 166.184 15.999 171.609
|
|
||||||
9.894 c 180.992 -1.075 203.68 1.32 210.367 1.402 c 217.055 1.484 219.438
|
|
||||||
1.644 231.012 0.57 c 228.027 5.839 220.824 9.495 218.348 10.011 c 206.766
|
|
||||||
12.195 193.328 8.179 181.414 15.484 c 176.691 19.57 175.734 22.14 175.559
|
|
||||||
29.62 c 223.012 29.62 l 223.012 35.269 l 223.012 45.374 219.598 53.257
|
|
||||||
214.785 58.945 c 208.164 64.816 201.25 67.409 194.387 67.495 c h
|
|
||||||
194.184 58.421 m 199.434 58.421 203.531 56.702 206.484 53.245 c 209.438
|
|
||||||
49.788 211.941 44.956 211.984 38.745 c 175.684 38.745 l 175.715 44.808
|
|
||||||
177.715 49.339 181.262 52.972 c 184.805 56.601 189.109 58.421 194.184 58.421
|
|
||||||
c h
|
|
||||||
194.184 58.421 m f
|
|
||||||
Q Q
|
|
||||||
showpage
|
|
||||||
%%Trailer
|
|
||||||
end restore
|
|
||||||
%%EOF
|
|
|
@ -1,1277 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
id="svg3118"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.92.1 r15371"
|
|
||||||
width="308.26666"
|
|
||||||
height="113.06667"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:docname="Logo EOLE.svg"><metadata
|
|
||||||
id="metadata3124"><rdf:RDF><cc:Work
|
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
|
||||||
id="defs3122"><marker
|
|
||||||
inkscape:stockid="Arrow1Lend"
|
|
||||||
orient="auto"
|
|
||||||
refY="0"
|
|
||||||
refX="0"
|
|
||||||
id="Arrow1Lend"
|
|
||||||
style="overflow:visible"><path
|
|
||||||
id="path4626"
|
|
||||||
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
|
|
||||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
|
|
||||||
inkscape:connector-curvature="0" /></marker><linearGradient
|
|
||||||
id="linearGradient4664"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666" /></linearGradient><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3132"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3134"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3248"><path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3250"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3260"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3262"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3288"><path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3290"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3304"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3306"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
id="linearGradient4668"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
id="linearGradient4676"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4668-8"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
id="linearGradient4664-9"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4676-2"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4706"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4708" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4711"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4713" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4716"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4718" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4721"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4723" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4726"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4728" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4731"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4733" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4736"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4738" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4741"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4743" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4746"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4748" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4751"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4753" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4880"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4896"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient4896-1"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4664-9-8"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6-7" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient4880-2"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient5022"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5024" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5027"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5029" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5032"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5034" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5037"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5039" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5042"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5044" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5047"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5049" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5052"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5054" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5057"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5059" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5062"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5064" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5067"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5069" /></linearGradient><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient5090"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3289"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3291"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3293"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3309"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3315"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3318"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3321"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3324"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3327"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3330"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3337"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3341"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3345"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3349"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3353"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3357"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3361"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3375"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3377"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3379"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3381"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3383"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3385"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3387"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3389"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3391"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3393"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3396"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3399"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3402"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3405"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3408"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3411"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3414"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3432"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3434"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3436"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3440"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3445"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-5"
|
|
||||||
id="linearGradient4896-6"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4664-9-5"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6-3" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-5"
|
|
||||||
id="linearGradient4880-3"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient3288"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3290" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3293-8"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3295" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3298"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3300" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3303"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3305" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3308"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3310" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3313"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3315" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3318-7"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3320" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3323"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3325" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3328"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3330" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3333"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3335" /></linearGradient><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient3363"
|
|
||||||
xlink:href="#linearGradient4664-9-5"
|
|
||||||
inkscape:collect="always" /><marker
|
|
||||||
style="overflow:visible"
|
|
||||||
id="Arrow1Lend-7"
|
|
||||||
refX="0"
|
|
||||||
refY="0"
|
|
||||||
orient="auto"
|
|
||||||
inkscape:stockid="Arrow1Lend"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
|
|
||||||
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
|
|
||||||
id="path4626-5" /></marker><clipPath
|
|
||||||
id="clipPath3132-0"
|
|
||||||
clipPathUnits="userSpaceOnUse"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3134-4"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><clipPath
|
|
||||||
id="clipPath3248-3"
|
|
||||||
clipPathUnits="userSpaceOnUse"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3250-5"
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" /></clipPath><clipPath
|
|
||||||
id="clipPath3260-7"
|
|
||||||
clipPathUnits="userSpaceOnUse"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3262-3"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><clipPath
|
|
||||||
id="clipPath3288-4"
|
|
||||||
clipPathUnits="userSpaceOnUse"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3290-0"
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" /></clipPath><clipPath
|
|
||||||
id="clipPath3304-6"
|
|
||||||
clipPathUnits="userSpaceOnUse"><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3306-1"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><linearGradient
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
id="linearGradient4759"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4761"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4763"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4765"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4767"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4769"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
id="linearGradient4771"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4773"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4775"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4777"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4779"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4781"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4783"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4785"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4787"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4789"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4791"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4793"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4795"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4797"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4799"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4801"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4803"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4805"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4807"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4809"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4811"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4813"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4815"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4817"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4819"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4821"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4823"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4825"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4827"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4829"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4831"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4833"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4835"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4837"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4839"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4841"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4843"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4845"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4847"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4849"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient4851"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
id="linearGradient4853"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /></defs><sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1678"
|
|
||||||
inkscape:window-height="1028"
|
|
||||||
id="namedview3120"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="2"
|
|
||||||
inkscape:cx="234.31834"
|
|
||||||
inkscape:cy="117.22431"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="20"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="g3126"
|
|
||||||
inkscape:snap-bbox="false"
|
|
||||||
inkscape:object-paths="true"
|
|
||||||
inkscape:snap-global="false" /><g
|
|
||||||
id="g3126"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="logoeole1"
|
|
||||||
transform="matrix(1.25,0,0,-1.25,0,113.06667)"><g
|
|
||||||
id="layer1-0"
|
|
||||||
inkscape:label="bateau"
|
|
||||||
transform="matrix(0.8,0,0,-0.8,3263.1972,1017.0386)" /><flowRoot
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.23999977px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85333335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
id="flowRoot4297-1"
|
|
||||||
xml:space="preserve"><flowRegion
|
|
||||||
id="flowRegion4299-9"
|
|
||||||
style="stroke-width:0.85333335px"><rect
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:122.87999725px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:0.72817779px"
|
|
||||||
y="645.2547"
|
|
||||||
x="5058.6104"
|
|
||||||
height="354.98666"
|
|
||||||
width="928.4267"
|
|
||||||
id="rect4301-6"
|
|
||||||
transform="scale(1,-1)" /></flowRegion><flowPara
|
|
||||||
id="flowPara4303-0"
|
|
||||||
style="font-size:122.87999725px;line-height:1.25;stroke-width:0.85333335px"> </flowPara></flowRoot><flowRoot
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:10.23999977px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85333335"
|
|
||||||
id="flowRoot3677-9"
|
|
||||||
xml:space="preserve"><flowRegion
|
|
||||||
id="flowRegion3679-9"
|
|
||||||
style="font-family:sans-serif;stroke-width:0.85333335"><rect
|
|
||||||
y="-627.65375"
|
|
||||||
x="5665.9272"
|
|
||||||
height="85.68248"
|
|
||||||
width="658.91034"
|
|
||||||
id="rect3681-4"
|
|
||||||
style="font-family:sans-serif;stroke-width:0.72817779"
|
|
||||||
transform="scale(1,-1)" /></flowRegion><flowPara
|
|
||||||
id="flowPara3683-3"
|
|
||||||
style="font-size:34.13333511px;line-height:1.25;font-family:sans-serif;stroke-width:0.85333335"> </flowPara></flowRoot><flowRoot
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
id="flowRoot4653-0"
|
|
||||||
xml:space="preserve"><flowRegion
|
|
||||||
id="flowRegion4655-9"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
|
|
||||||
y="331.22806"
|
|
||||||
x="4741.1704"
|
|
||||||
height="300.37335"
|
|
||||||
width="348.16"
|
|
||||||
id="rect4657-1"
|
|
||||||
transform="scale(1,-1)"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
|
|
||||||
id="flowPara4659-0"
|
|
||||||
style="font-size:34.13333511px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot><g
|
|
||||||
id="g5567"
|
|
||||||
transform="translate(-81.066665,-29.439999)"><path
|
|
||||||
sodipodi:nodetypes="csccccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3238-6-5-8-3-3-8-2-2-0-1-4-0-3-3-0-0-1-3-0-9-0-0-8-1-9"
|
|
||||||
d="m 223.64477,47.315777 c 0,0 -0.44523,-16.533333 16.29322,-16.533333 h 29.21227 c -5.98037,2.657493 -8.20768,4.9232 -12.19893,9.946666 h -14.85334 c -3.98336,0 -5.89333,2.812907 -5.89333,7.417494 0,0 0.0533,61.678716 -0.0299,61.769596 -3.31946,8.0543 -12.53045,9.67808 -12.53024,9.67808 3.2e-4,-0.56032 0.0107,-48.185703 2.2e-4,-72.278503 z"
|
|
||||||
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672" /><g
|
|
||||||
id="g3276-4-2-8-2-4-8-6-2-1"
|
|
||||||
transform="matrix(-0.24101235,-0.49825763,0.72298939,-0.16609682,125.97693,71.485057)"
|
|
||||||
style="fill:#4a3f74;fill-opacity:1"><path
|
|
||||||
d="M 1.7934243,-0.96970754 C 1.5691998,-0.79961828 1.3331053,-0.8164976 0.87787922,-0.65822353 -1.5218484,-1.3975491 -3.7083721,-2.3133919 -6.1451141,-3.4323038 -12.488224,-6.3457762 -19.225905,-8.5326385 -25.903247,-9.9575472 l -0.247882,-0.2029018 c -0.25648,-0.208217 -0.273442,-0.400249 -0.273442,-0.400249 -0.03366,-0.381227 -0.06736,-0.762456 0.138575,-1.126553 2.283231,-5.891302 5.781359,-11.321624 10.249609,-16.300951 2.100325,-2.689577 4.204242,-5.37796 6.306738,-8.069263 1.9162051,-2.131222 4.1509802,-3.29873 6.9218717,-3.669328 0.033842,0.38312 0.2866489,0.589194 0.542211,0.800166 l 0.033341,0.377443 0.4698516,0.0336 c 0.90753081,-0.310177 1.85073987,-0.242743 2.8272897,0.202131 0.2526397,0.204184 0.2699367,0.4 0.5180682,0.60574 0.2831425,0.588942 0.5687898,1.179944 0.8453212,1.575714 -0.2263115,0.172761 -0.2263115,0.172761 -0.2095992,0.361956 -0.2179629,0.175237 -0.4171267,0.536997 -0.8678447,0.693713 -0.2045063,0.36702 -0.1874599,0.559997 -0.1708311,0.748247 -1.33185938,8.799057 -1.22651547,17.893566 0.074677,27.2596895 0.016798,0.1901409 0.033847,0.3831197 0.2594176,0.3992467 0.2552276,0.2071871 0.2721071,0.3982738 0.5082015,0.4151532 l 0.067266,0.7615089 c 0.1344498,1.5220696 0.2521035,2.8540008 -0.1044352,4.15579 -0.2086962,0.1749594 -0.2086962,0.1749594 -0.1917332,0.3669921 m -2.9158252,-3.8077224 -0.1346165,-1.5239637 -0.3531155,1.301094 c 0.256313,0.2063246 0.4877324,0.2228697 0.4877324,0.2228697"
|
|
||||||
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672"
|
|
||||||
id="path3278-9-83-5-1-8-0-7-4-9"
|
|
||||||
inkscape:connector-curvature="0" /></g><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4310-6-3-5-4-1-7-1-6-2-5-3-5-0-5-9"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:144px;line-height:125%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:1.06666672"
|
|
||||||
d="m 134.24391,107.15482 c 0,0 4.75958,7.35189 14.30219,12.17301 H 95.663964 c -14.080107,0 -14.036267,-11.86123 -14.036267,-11.86123 V 48.10415 c 0,0 -0.435413,-16.550293 16.303147,-16.550293 h 51.477446 c -5.98027,2.6576 -10.14496,7.057813 -14.13611,12.081173 0,0 -37.304323,-0.01067 -37.25547,0 -4.73792,0 -4.057706,4.517867 -4.057706,4.517867 l 0.07467,54.922883 c 0,4.34826 3.99584,4.07904 3.99584,4.07904"
|
|
||||||
sodipodi:nodetypes="cccccccccccc" /><g
|
|
||||||
transform="matrix(0.81587728,0,0,-0.81587728,-701.65987,1291.3573)"
|
|
||||||
id="g3550-3-3-6-3-7-9-3-8-0-2-8-8-4-4"><g
|
|
||||||
transform="translate(-43.249218,364.84503)"
|
|
||||||
id="g3586-3-0-0-2-0-8-5-9-6-2-3-7-1-7"><g
|
|
||||||
transform="matrix(1.0404262,0,0,1.0404262,-71.883772,-41.905465)"
|
|
||||||
id="g3402-8-5-9-6-1"><path
|
|
||||||
sodipodi:nodetypes="csssccsccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3359-6-74-0-1-9-6-9-6-3-7-6-2-3-6-2-7"
|
|
||||||
d="m 1120.3633,1119.4763 c 0,0 -3.5568,20.4619 11.9327,27.768 7.2005,3.396 12.9255,3.904 20.905,0.8664 5.0224,-1.9118 9.552,-6.6569 11.4611,-11.8215 1.9093,-5.1645 0.2732,-11.4417 -4.7449,-16.3195 -1.7695,7.8156 -3.6493,14.1069 -10.416,17.611 -4.0225,2.0444 -8.111,1.7045 -12.1907,-0.318 -4.0796,-2.0228 -7.2085,-6.8927 -8.4528,-11.7715 0,0 -2.5254,-9.0737 7.1765,-23.942 -8.0225,3.3894 -14.2234,9.009 -15.6709,17.9271 z"
|
|
||||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate" /><path
|
|
||||||
sodipodi:nodetypes="cccscccccssscccsscc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3359-8-8-4-6-7-8-1-6-3-1-1-8-8-2-0-1-1"
|
|
||||||
d="m 1171.7557,1165.1847 c 9.0667,-5.9443 15.9456,-15.1034 18.3323,-26.9986 l 0.036,-0.2122 c 1.845,-9.4715 0.083,-19.4824 -4.7861,-27.8592 -4.9017,-8.4311 -13.4688,-15.3007 -24.2922,-16.6144 l -0.031,-0.011 c -6.6322,-0.7981 -13.9274,1.959 -19.0297,6.6892 -5.6838,6.7137 -8.3619,10.9192 -8.2233,20.7045 4.8592,-6.4111 17.1623,-12.7819 25.8393,-11.9272 5.6097,0.6749 9.6503,3.8646 12.5032,8.7716 2.8528,4.907 3.9787,11.4322 2.8727,16.9447 -3.5229,17.5582 -23.303,26.3651 -40.2867,21.4627 -23.5286,-6.7915 -32.2906,-30.7698 -22.6684,-52.8538 12.2398,-19.8825 34.3524,-28.7354 62.8183,-24.4779 -9.0335,-9.4406 -24.345,-8.1228 -24.345,-8.1228 -14.2495,-1.1222 -40.5898,6.8652 -50.3766,25.3512 -14.2965,27.0046 -1.9507,65.6469 30.7149,75.076 13.991,4.0384 29.2641,1.7151 40.9212,-5.9275 z"
|
|
||||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f1ca13;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate" /></g></g></g><g
|
|
||||||
transform="matrix(0.84351752,-0.54896555,0.51910062,0.8920468,307.56423,30.76431)"
|
|
||||||
id="g3240-2-1-4-4-7-8-0-7-9-2-5-6-9-2-7-6"><path
|
|
||||||
sodipodi:nodetypes="ccsczcccccsccscccss"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3242-2-6-6-9-6-6-7-4-5-2-2-3-5-0-0-6"
|
|
||||||
d="M -51.831427,47.326395 C -59.895364,42.363849 -64.893573,35.32236 -66.817364,26.26606 -68.739856,17.209458 -65.984036,8.7300195 -60.40346,-0.33818968 -54.49654,-9.9366965 -50.210652,-13.255154 -41.97748,-15.484843 -27.515019,-19.70367 -7.9836824,-4.8218392 -1.8943856,-0.97576512 4.1949112,2.8703089 6.2927392,4.3529194 17.480784,9.9551429 11.932455,12.839158 3.3756816,11.947763 0.82595055,10.996623 -10.961104,6.3524792 -21.140137,-4.7136447 -35.966514,-5.1033549 c -6.512982,0.8784234 -8.76316,2.5650242 -12.915824,8.9552297 l 43.5206803,26.7826232 -3.0155866,4.900207 c -5.3936837,8.764517 -12.7311517,13.673383 -20.1799837,15.890713 -9.204896,1.353089 -16.931596,-0.298964 -23.274199,-4.099023 z m 4.660181,-7.983573 c 4.814882,2.963078 9.488296,3.783934 14.043484,2.454391 4.551634,-1.331826 9.427718,-4.109627 12.783662,-9.471337 L -53.638108,11.836745 c -3.208293,5.274169 -3.790195,10.333683 -2.479019,15.483935 1.312201,5.148586 4.29059,9.157276 8.945881,12.022142 z"
|
|
||||||
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83779979" /></g></g></g><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="bateau"
|
|
||||||
transform="translate(0,-1486.9333)" /><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer2"
|
|
||||||
inkscape:label="Calque1"
|
|
||||||
transform="translate(0,-1486.9333)"><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4297"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
|
||||||
id="flowRegion4299"
|
|
||||||
style="stroke-width:1.06666672px"><rect
|
|
||||||
id="rect4301"
|
|
||||||
width="1160.5333"
|
|
||||||
height="443.73334"
|
|
||||||
x="2244.2666"
|
|
||||||
y="2077.8667"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:153.6000061px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:1.13777781px" /></flowRegion><flowPara
|
|
||||||
id="flowPara4303"
|
|
||||||
style="font-size:153.6000061px;line-height:1.25;stroke-width:1.06666672px"> </flowPara></flowRoot><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot3677"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion
|
|
||||||
id="flowRegion3679"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.06666672"><rect
|
|
||||||
id="rect3681"
|
|
||||||
width="823.63794"
|
|
||||||
height="107.1031"
|
|
||||||
x="3003.4126"
|
|
||||||
y="486.73111"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.13777781" /></flowRegion><flowPara
|
|
||||||
id="flowPara3683"
|
|
||||||
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </flowPara></flowRoot><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4653"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
|
||||||
id="flowRegion4655"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
|
|
||||||
id="rect4657"
|
|
||||||
width="435.20001"
|
|
||||||
height="375.46667"
|
|
||||||
x="1847.4667"
|
|
||||||
y="1685.3334"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
|
|
||||||
id="flowPara4659"
|
|
||||||
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot><g
|
|
||||||
transform="matrix(3.7418697,0,0,3.7418697,-7508.261,-6259.3333)"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none"
|
|
||||||
id="flowRoot3442" /></g></svg>
|
|
Before Width: | Height: | Size: 53 KiB |
|
@ -1,318 +0,0 @@
|
||||||
%!PS-Adobe-3.0 EPSF-3.0
|
|
||||||
%%Creator: cairo 1.14.8 (http://cairographics.org)
|
|
||||||
%%CreationDate: Tue May 16 12:15:46 2017
|
|
||||||
%%Pages: 1
|
|
||||||
%%DocumentData: Clean7Bit
|
|
||||||
%%LanguageLevel: 2
|
|
||||||
%%BoundingBox: 0 -1 1660 851
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
save
|
|
||||||
50 dict begin
|
|
||||||
/q { gsave } bind def
|
|
||||||
/Q { grestore } bind def
|
|
||||||
/cm { 6 array astore concat } bind def
|
|
||||||
/w { setlinewidth } bind def
|
|
||||||
/J { setlinecap } bind def
|
|
||||||
/j { setlinejoin } bind def
|
|
||||||
/M { setmiterlimit } bind def
|
|
||||||
/d { setdash } bind def
|
|
||||||
/m { moveto } bind def
|
|
||||||
/l { lineto } bind def
|
|
||||||
/c { curveto } bind def
|
|
||||||
/h { closepath } bind def
|
|
||||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
|
||||||
0 exch rlineto 0 rlineto closepath } bind def
|
|
||||||
/S { stroke } bind def
|
|
||||||
/f { fill } bind def
|
|
||||||
/f* { eofill } bind def
|
|
||||||
/n { newpath } bind def
|
|
||||||
/W { clip } bind def
|
|
||||||
/W* { eoclip } bind def
|
|
||||||
/BT { } bind def
|
|
||||||
/ET { } bind def
|
|
||||||
/pdfmark where { pop globaldict /?pdfmark /exec load put }
|
|
||||||
{ globaldict begin /?pdfmark /pop load def /pdfmark
|
|
||||||
/cleartomark load def end } ifelse
|
|
||||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
|
||||||
/EMC { mark /EMC pdfmark } bind def
|
|
||||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
|
||||||
/Tj { show currentpoint cairo_store_point } bind def
|
|
||||||
/TJ {
|
|
||||||
{
|
|
||||||
dup
|
|
||||||
type /stringtype eq
|
|
||||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
|
||||||
} forall
|
|
||||||
currentpoint cairo_store_point
|
|
||||||
} bind def
|
|
||||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
|
||||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
|
||||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
|
||||||
{ pop cairo_selectfont } if } bind def
|
|
||||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
|
||||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
|
||||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
|
||||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/g { setgray } bind def
|
|
||||||
/rg { setrgbcolor } bind def
|
|
||||||
/d1 { setcachedevice } bind def
|
|
||||||
%%EndProlog
|
|
||||||
%%BeginSetup
|
|
||||||
%%BeginResource: font DejaVuSans-Bold
|
|
||||||
11 dict begin
|
|
||||||
/FontType 42 def
|
|
||||||
/FontName /DejaVuSans-Bold def
|
|
||||||
/PaintType 0 def
|
|
||||||
/FontMatrix [ 1 0 0 1 0 0 ] def
|
|
||||||
/FontBBox [ 0 0 0 0 ] def
|
|
||||||
/Encoding 256 array def
|
|
||||||
0 1 255 { Encoding exch /.notdef put } for
|
|
||||||
Encoding 32 /space put
|
|
||||||
/CharStrings 2 dict dup begin
|
|
||||||
/.notdef 0 def
|
|
||||||
/space 1 def
|
|
||||||
end readonly def
|
|
||||||
/sfnts [
|
|
||||||
<000100000009008000030010637674203eb93108000000e8000002546670676d5b026bf00000
|
|
||||||
033c000000ac676c7966e2f9cb840000009c0000004c686561640e24be09000003e800000036
|
|
||||||
686865610eaf07730000042000000024686d74780796006600000444000000086c6f63610000
|
|
||||||
00980000044c0000000c6d6178700647062d0000045800000020707265707c61a2e700000478
|
|
||||||
000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204
|
|
||||||
002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206
|
|
||||||
2900000001660133016600bc00e90000013d00a200fa031f00020002006601660002000200ac
|
|
||||||
015400ec00bc006201660181048501540166016d04a400020166007f04cd0000000201330062
|
|
||||||
00710000002504a401bc00ba00e500660181018d0548055a0166016d000000000002000200f6
|
|
||||||
05c301f0053902390058046d043d04b2048104b2016601750466048100b00466043902d1049c
|
|
||||||
047b04cf047b005801330166014c0166014c000200ac009a014a0123009a029a014401190144
|
|
||||||
02cd00c100000166013f019a013b05cb05cb00d500d5015000ac00ac0077020a01c701f2012f
|
|
||||||
015801b2012300f600f6011f012f0135023501ee01e70133009800d10358050a009a008f0112
|
|
||||||
009800bc00cd00e500e500f2007304000166008f05d5022b05d500c300e100d700e50000006a
|
|
||||||
01020000001d032d05d505d505f000a8006a00ec00e1010205d506140721046602f800ec0183
|
|
||||||
02a602f80123010201020112011f031f005e03cd046004c7048900ec01bc00ba01020333031f
|
|
||||||
03420333035c0112011f05d5019a009a00e106660179046004600460047b000000ec02c302b8
|
|
||||||
02cd00be00dd00d50000006a025c027b029a00dd01ae01ba01120000008501ae04600762041b
|
|
||||||
009a069a045800ee009a029a00d102cd019a015005cb05cb008b008b063100f6040600f0034c
|
|
||||||
016004a800c10000002505c101000121074a06120096014a078300a800000337007b00140000
|
|
||||||
00c9010005c105c105c105c101000108061d00960427039e00ec0102027d0133009800d10358
|
|
||||||
017900cd02390362009c009c009c009301b8009300b80073000014000326b707060504030201
|
|
||||||
002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720
|
|
||||||
b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ff
|
|
||||||
ff5058041b0559b0051cb0032508e12d2c4b505820b80128454459212d2cb002254560442d2c
|
|
||||||
4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b02063
|
|
||||||
68208a108a233a8a10653a2d0001000000025eb8b54203fc5f0f3cf5001f080000000000d3d9
|
|
||||||
0a2000000000d3d90a20f772fcae0fcd096500010008000000010000000000010000076dfe1d
|
|
||||||
00001021f772f9320fcd00010000000000000000000000000000000204cd006602c900000000
|
|
||||||
00000000004c0000004c000100000002034e002b0078000c0002001000400008000005ed0221
|
|
||||||
0008000441840280012600fe000301250011000301240121003a0005012400fa000301230016
|
|
||||||
000301220121003a0005012200fe00030121003a0003012000fa0003011f00bb0003011e0064
|
|
||||||
0003011d00fe0003011c00190003011b001e0003011a00fe0003011900fe0003011800fe0003
|
|
||||||
011700fe0003011600fe000301150114000e0005011500fe00030114000e0003011300fe0003
|
|
||||||
011200fe0003010f010e007d0005010f00fe0003010e007d0003010d010c008c0005010d00fe
|
|
||||||
0003010d00c00004010c010b00590005010c008c0003010c00800004010b010a00260005010b
|
|
||||||
00590003010b00400004010a00260003010900fe0003010800fe00030107000c000301070080
|
|
||||||
00040106b2972e054113010600fa0003010500fa0003010400fe0003010300190003010200fa
|
|
||||||
0003010100fa0003010040ff7d03ff3e03fefe03fcfb2c05fcfe03fb2c03fafe03f9f84705f9
|
|
||||||
7d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03f2fe03f1fe03f0fe03ef1e03eefe03edec0a
|
|
||||||
05edfe03ec0a03ec4004ebea0a05eb3203ea0a03e9fa03e8911605e8fe03e7fa03e6fa03e591
|
|
||||||
1605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03dffe03defa03dddc1805dd6403dc1803dba0
|
|
||||||
1e05db6403dad92505dafa03d92503d8d12505d8fa03d7d61405d71603d6d51005d61403d510
|
|
||||||
03d4d30b05d42003d30b03d2d12505d2fa03d1911605d12503d0940c05d02303cfce1405cf26
|
|
||||||
03cecd1205ce1403cd1203cc911605cc1d03cb1403cac9bb05cafe03c9c85d05c9bb03c98004
|
|
||||||
c840ffc72505c85d03c84004c72503c6fe03c56403c4901005c4fe03c31c03c2fe03c1fe03c0
|
|
||||||
bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203bdbc1105bd1a03bcbb0f05bc1103bbba0c05
|
|
||||||
bb0f03ba0c03b9911605b9fe03b8fe03b71503b61203b5fe03b4fe03b3fe03b21703b11903b0
|
|
||||||
1603afad1b05affa03aead1b05aefa03ad911605ad1b03ac911605ac7d03abfe03aa2603a9fe
|
|
||||||
03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05a3fe03a20e03a24004a1a01e05a1fa03a091
|
|
||||||
1605a01e039f9116059ffa039e940c059e1c039dfe039c9bbb059cfe039b9a5d059bbb039b80
|
|
||||||
049a8f25059a5d039a400499fe0398972e0598fe03972e0396911605961e40ff0395940c0595
|
|
||||||
2003940c0393911605934b039291160592fe03919010059116039010038f25038efe038dfe03
|
|
||||||
8cfe038bfe038afe0389fe038887250588fe0387250386fe0385fe0384320383960382fe0381
|
|
||||||
fe038019037f0a037efe037dfe037cfe037bfa037afa0379fe037776a60577fe0376a6037574
|
|
||||||
1b0575fa03741b0373fa03727d0371fe03706f2c056f2c036efa036dfa036cfa036bfe036afe
|
|
||||||
0369fe0368630c0568320367fe0366320365640a0565fe03640a0364400463620a05630c0362
|
|
||||||
0a0361601505619603600111056015035f0a035efe035dfe035c0111055cfe035b5a1b055bfe
|
|
||||||
035a0111055a1b0359fe0358fa0357fe035601110540ff56fe0355fe03541e03531403525119
|
|
||||||
0552fa0351011105511903504f190550fa034f4e11054f19034e11034d1e034c4b14054c1503
|
|
||||||
4b4a11054b14034a490e054a1103490e0348fa034746140547150346140345fa0344430e0544
|
|
||||||
0f03430e034241250542fa0341011105412503403f0f0540fe033f3e0e053f0f033e0e033d3c
|
|
||||||
0d053d16033c0d033b64033afe0339140338fe0337130336351a0536250335341405351a0335
|
|
||||||
c004340a0d0534140334800433320c05331403334004320c033130a60531fe033001110530a6
|
|
||||||
032f0c032e13032d2c3a052dfa032c1525052c3a032b64032a640329fe032815032717110527
|
|
||||||
1e03262003251e0324231105402b241e0323110322000d0522fa03210f032140042014031f0a
|
|
||||||
031e1e031d1c19051d25031c0f13051c19031cb801004091041b0d031a194b051a7d03190111
|
|
||||||
05194b0318fe031711031615250516fa031501110515250314640313110312fe031101110511
|
|
||||||
fe031064030f0e10050f13030fc0040e10030e80040d0111050dfa030c32030b0a0d050b1603
|
|
||||||
0b80040a0d030a400409fe0308fe0307fe0306050a0506fe03050a0305400404fa0303640302
|
|
||||||
01110502fe0301000d05011103000d0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d0000>
|
|
||||||
] def
|
|
||||||
/f-0-0 currentdict end definefont pop
|
|
||||||
%%EndResource
|
|
||||||
%%BeginResource: font DejaVuSans
|
|
||||||
11 dict begin
|
|
||||||
/FontType 42 def
|
|
||||||
/FontName /DejaVuSans def
|
|
||||||
/PaintType 0 def
|
|
||||||
/FontMatrix [ 1 0 0 1 0 0 ] def
|
|
||||||
/FontBBox [ 0 0 0 0 ] def
|
|
||||||
/Encoding 256 array def
|
|
||||||
0 1 255 { Encoding exch /.notdef put } for
|
|
||||||
Encoding 32 /space put
|
|
||||||
/CharStrings 2 dict dup begin
|
|
||||||
/.notdef 0 def
|
|
||||||
/space 1 def
|
|
||||||
end readonly def
|
|
||||||
/sfnts [
|
|
||||||
<0001000000090080000300106376742000691d39000000e0000001fe6670676d7134766a0000
|
|
||||||
02e0000000ab676c7966f9f1ddd70000009c00000044686561640d13be360000038c00000036
|
|
||||||
686865610d9f076f000003c400000024686d747807580066000003e8000000086c6f63610000
|
|
||||||
0088000003f00000000c6d617870046f0671000003fc00000020707265703b07f1000000041c
|
|
||||||
0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec
|
|
||||||
310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629013500b8
|
|
||||||
00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189
|
|
||||||
022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4
|
|
||||||
009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2
|
|
||||||
055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd
|
|
||||||
03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a
|
|
||||||
009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083
|
|
||||||
0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4
|
|
||||||
009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3
|
|
||||||
00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139
|
|
||||||
0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460
|
|
||||||
0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f
|
|
||||||
007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2
|
|
||||||
002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029
|
|
||||||
006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859
|
|
||||||
212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559
|
|
||||||
b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d
|
|
||||||
2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45
|
|
||||||
442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000
|
|
||||||
00025eb862af5a3e5f0f3cf5001f080000000000d3d90a2c00000000d3d90a2cf7d6fc4c0e59
|
|
||||||
09dc00000008000000010000000000010000076dfe1d00000efef7d6fa510e59000100000000
|
|
||||||
00000000000000000000000204cd0066028b0000000000000000004400000044000100000002
|
|
||||||
0354002b0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f9
|
|
||||||
2503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee96
|
|
||||||
03ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e453
|
|
||||||
03e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03
|
|
||||||
d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe
|
|
||||||
03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe
|
|
||||||
03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb
|
|
||||||
05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03
|
|
||||||
b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa
|
|
||||||
03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe
|
|
||||||
039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d05
|
|
||||||
97fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590
|
|
||||||
bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a4103
|
|
||||||
89880b05891403880b03878625058764038685110586250385110384fe038382110583fe0382
|
|
||||||
110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe
|
|
||||||
03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036b
|
|
||||||
fe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360
|
|
||||||
fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe0355541505
|
|
||||||
55420354150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10
|
|
||||||
034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344
|
|
||||||
fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d
|
|
||||||
053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b
|
|
||||||
03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c
|
|
||||||
32032b2a25052b64032a2912052a25032912032827250528410327250326250b05260f03250b
|
|
||||||
0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051c
|
|
||||||
fe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe0314fe03
|
|
||||||
13fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c
|
|
||||||
16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503
|
|
||||||
fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
|
|
||||||
2b2b2b1d00>
|
|
||||||
] def
|
|
||||||
/f-1-0 currentdict end definefont pop
|
|
||||||
%%EndResource
|
|
||||||
%%EndSetup
|
|
||||||
%%Page: 1 1
|
|
||||||
%%BeginPageSetup
|
|
||||||
%%PageBoundingBox: 0 -1 1660 851
|
|
||||||
%%EndPageSetup
|
|
||||||
q 0 -1 1660 852 rectclip q
|
|
||||||
0 g
|
|
||||||
BT
|
|
||||||
115.200005 0 0 115.200005 1659.494566 0.0000456218 Tm
|
|
||||||
/f-0-0 1 Tf
|
|
||||||
( )Tj
|
|
||||||
ET
|
|
||||||
0.945098 0.792157 0.0745098 rg
|
|
||||||
158.102 787.356 m 160.379 829.535 l 190.289 799.809 l h
|
|
||||||
158.102 787.356 m f
|
|
||||||
21.06434 w
|
|
||||||
0 J
|
|
||||||
0 j
|
|
||||||
[] 0.0 d
|
|
||||||
4 M q 0.380357 -1 -0.775998 -0.295156 0 1266.965088 cm
|
|
||||||
471.528 27.38 m 435.436 6.755 l 471.344 -14.188 l h
|
|
||||||
471.528 27.38 m S Q
|
|
||||||
58.695 757.856 m 80.516 721.688 l 39.07 729.465 l h
|
|
||||||
58.695 757.856 m f
|
|
||||||
18.464385 w
|
|
||||||
q -1 0.699805 0.543047 0.775998 0 1266.965088 cm
|
|
||||||
-278.556 -404.865 m -310.193 -422.942 l -278.719 -441.304 l h
|
|
||||||
-278.556 -404.865 m S Q
|
|
||||||
10.25 623.512 m 41.414 613.496 l 14.113 596.141 l h
|
|
||||||
10.25 623.512 m f
|
|
||||||
17.112694 w
|
|
||||||
q -1 -0.121862 -0.110002 0.811158 0 1266.965088 cm
|
|
||||||
75.757 -781.871 m 46.436 -798.623 l 75.608 -815.637 l h
|
|
||||||
75.757 -781.871 m S Q
|
|
||||||
101.438 509.071 m 70.375 498.742 l 82.148 528.875 l h
|
|
||||||
101.438 509.071 m f
|
|
||||||
12.576204 w
|
|
||||||
q 1 0.937579 0.772771 -0.802194 0 1266.965088 cm
|
|
||||||
-330.318 558.711 m -351.867 546.4 l -330.429 533.894 l h
|
|
||||||
-330.318 558.711 m S Q
|
|
||||||
0.290196 0.247059 0.454902 rg
|
|
||||||
161.094 604.578 m 161.094 604.578 152.773 561.961 192.316 543.309 c 210.699
|
|
||||||
534.641 225.316 533.344 245.688 541.098 c 258.508 545.977 270.074 558.094
|
|
||||||
274.949 571.278 c 279.824 584.461 275.645 600.489 262.836 612.942 c 258.316
|
|
||||||
592.989 253.516 576.926 236.242 567.981 c 225.973 562.762 215.535 563.629
|
|
||||||
205.117 568.793 c 194.703 573.957 186.715 586.391 183.539 598.844 c 183.539
|
|
||||||
598.844 177.09 622.012 201.859 659.969 c 182.059 644.739 164.789 627.348
|
|
||||||
161.094 604.578 c h
|
|
||||||
161.094 604.578 m f
|
|
||||||
0.945098 0.792157 0.0745098 rg
|
|
||||||
293.059 497.508 m 316.207 512.684 333.766 536.067 339.859 566.434 c 339.953
|
|
||||||
566.977 l 344.664 591.156 340.164 616.715 327.734 638.102 c 315.219 659.625
|
|
||||||
293.348 677.164 265.715 680.52 c 265.637 680.531 l 248.703 682.571 230.078
|
|
||||||
675.531 217.055 663.453 c 202.543 646.313 195.703 635.578 196.059 610.594
|
|
||||||
c 208.465 626.961 239.875 643.227 262.027 641.047 c 276.348 639.321 286.664
|
|
||||||
631.18 293.949 618.653 c 301.23 606.125 304.105 589.465 301.281 575.391
|
|
||||||
c 292.289 530.563 241.789 508.082 198.43 520.598 c 138.359 537.934 116.312
|
|
||||||
599.153 133.5 657.778 c 160.254 711.746 268.816 729.453 286.945 734.754
|
|
||||||
c 280.277 744.656 213.539 742.957 213.539 742.957 c 180.559 734.364 130.008
|
|
||||||
728.141 104.754 682.086 c 53.828 589.199 105.188 506.442 188.582 482.371
|
|
||||||
c 224.301 472.059 263.293 477.992 293.055 497.504 c h
|
|
||||||
293.059 497.508 m f
|
|
||||||
0 g
|
|
||||||
BT
|
|
||||||
32.000001 0 0 32.000001 1361.895445 368.012451 Tm
|
|
||||||
/f-1-0 1 Tf
|
|
||||||
( )Tj
|
|
||||||
ET
|
|
||||||
Q Q
|
|
||||||
showpage
|
|
||||||
%%Trailer
|
|
||||||
end restore
|
|
||||||
%%EOF
|
|
|
@ -1,779 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
id="svg3118"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.92.1 r15371"
|
|
||||||
width="533.33331"
|
|
||||||
height="533.33331"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:docname="Logo EOLEienne.svg"><metadata
|
|
||||||
id="metadata3124"><rdf:RDF><cc:Work
|
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
|
||||||
id="defs3122"><marker
|
|
||||||
inkscape:stockid="Arrow1Lend"
|
|
||||||
orient="auto"
|
|
||||||
refY="0"
|
|
||||||
refX="0"
|
|
||||||
id="Arrow1Lend"
|
|
||||||
style="overflow:visible"><path
|
|
||||||
id="path4626"
|
|
||||||
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
|
|
||||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
|
|
||||||
inkscape:connector-curvature="0" /></marker><linearGradient
|
|
||||||
id="linearGradient4664"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666" /></linearGradient><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3132"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3134"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3248"><path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3250"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3260"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3262"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3288"><path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3290"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3304"><path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3306"
|
|
||||||
inkscape:connector-curvature="0" /></clipPath><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4668-8"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
id="linearGradient4664-9"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9"
|
|
||||||
id="linearGradient4676-2"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4706"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4708" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4711"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4713" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4716"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4718" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4721"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4723" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4726"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4728" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4731"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4733" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4736"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4738" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4741"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4743" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4746"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4748" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient4751"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4753" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient4896-1"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4664-9-8"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6-7" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient4880-2"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient5022"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5024" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5027"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5029" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5032"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5034" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5037"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5039" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5042"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5044" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5047"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5049" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5052"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5054" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5057"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5059" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5062"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5064" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient5067"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop5069" /></linearGradient><linearGradient
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient5090"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
inkscape:collect="always" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3289"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3291"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3293"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3309"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3315"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3318"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3321"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3324"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3327"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3330"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3337"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3341"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3345"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3349"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3353"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3357"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3361"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3375"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3377"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3379"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3381"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3383"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3385"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3387"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3389"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3391"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3393"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3396"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3399"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3402"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3405"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3408"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3411"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3414"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3432"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3434"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3436"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3440"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-8"
|
|
||||||
id="linearGradient3445"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient4664-9-5"
|
|
||||||
id="linearGradient4896-6"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1114.8962"
|
|
||||||
y1="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y2="926.69495" /><linearGradient
|
|
||||||
id="linearGradient4664-9-5"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4666-6-3" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3288"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3290" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3293-8"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3295" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3298"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3300" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3303"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3305" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3308"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3310" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3313"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3315" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3318-7"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3320" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3323"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3325" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3328"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3330" /></linearGradient><linearGradient
|
|
||||||
id="linearGradient3333"
|
|
||||||
osb:paint="solid"><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3335" /></linearGradient></defs><sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1678"
|
|
||||||
inkscape:window-height="1028"
|
|
||||||
id="namedview3120"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="0.1767767"
|
|
||||||
inkscape:cx="2217.3454"
|
|
||||||
inkscape:cy="1337.1815"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="20"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="g3750-1"
|
|
||||||
inkscape:snap-bbox="false"
|
|
||||||
inkscape:object-paths="true"
|
|
||||||
inkscape:snap-global="false" /><g
|
|
||||||
id="g3126"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="logoeole1"
|
|
||||||
transform="matrix(1.25,0,0,-1.25,0,533.33333)" /><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="bateau"
|
|
||||||
sodipodi:insensitive="true"
|
|
||||||
transform="translate(0,-1066.6667)" /><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer2"
|
|
||||||
inkscape:label="Calque1"
|
|
||||||
transform="translate(0,-1066.6667)"><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4297"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
|
||||||
id="flowRegion4299"
|
|
||||||
style="stroke-width:1.06666672px"><rect
|
|
||||||
id="rect4301"
|
|
||||||
width="1160.5333"
|
|
||||||
height="443.73334"
|
|
||||||
x="2244.2666"
|
|
||||||
y="2077.8667"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:153.6000061px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:1.13777781px" /></flowRegion><flowPara
|
|
||||||
id="flowPara4303"
|
|
||||||
style="font-size:153.6000061px;line-height:1.25;stroke-width:1.06666672px"> </flowPara></flowRoot><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot3677"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion
|
|
||||||
id="flowRegion3679"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.06666672"><rect
|
|
||||||
id="rect3681"
|
|
||||||
width="823.63794"
|
|
||||||
height="107.1031"
|
|
||||||
x="3003.4126"
|
|
||||||
y="486.73111"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.13777781" /></flowRegion><flowPara
|
|
||||||
id="flowPara3683"
|
|
||||||
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </flowPara></flowRoot><g
|
|
||||||
id="g4708"
|
|
||||||
transform="translate(-234.66667,-661.33333)"><g
|
|
||||||
transform="translate(258.11647,292.41513)"
|
|
||||||
id="g3750-1"><g
|
|
||||||
transform="matrix(3.4040263,0,0,3.4040263,-5864.8164,-2849.7877)"
|
|
||||||
id="g4763-8-1-4-8-8-28"><g
|
|
||||||
id="g4707-6-9-0-7-9-1"><path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="path3438-4-3-1-5-7-4"
|
|
||||||
sodipodi:sides="3"
|
|
||||||
sodipodi:cx="1546.047"
|
|
||||||
sodipodi:cy="712.37"
|
|
||||||
sodipodi:r1="15.609281"
|
|
||||||
sodipodi:r2="7.8046408"
|
|
||||||
sodipodi:arg1="1.0427219"
|
|
||||||
sodipodi:arg2="2.0899194"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="-1.800643e-15"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
|
|
||||||
transform="matrix(0.22906783,0.6022449,-0.46734074,0.17775615,1770.4985,222.63478)"
|
|
||||||
inkscape:transform-center-x="-1.8039821"
|
|
||||||
inkscape:transform-center-y="-1.1274589" /><path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="path3438-6-6-2-8-8-7-96"
|
|
||||||
sodipodi:sides="3"
|
|
||||||
sodipodi:cx="1546.047"
|
|
||||||
sodipodi:cy="712.37"
|
|
||||||
sodipodi:r1="15.609281"
|
|
||||||
sodipodi:r2="7.8046408"
|
|
||||||
sodipodi:arg1="1.0427219"
|
|
||||||
sodipodi:arg2="2.0899194"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="-1.800643e-15"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
|
|
||||||
transform="matrix(-0.52791029,-0.36943435,0.28668023,-0.40965724,2360.5301,2170.4693)"
|
|
||||||
inkscape:transform-center-y="-4.59347"
|
|
||||||
inkscape:transform-center-x="-0.15719734" /><path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="path3438-6-4-8-6-1-0-7-83"
|
|
||||||
sodipodi:sides="3"
|
|
||||||
sodipodi:cx="1546.047"
|
|
||||||
sodipodi:cy="712.37"
|
|
||||||
sodipodi:r1="15.609281"
|
|
||||||
sodipodi:r2="7.8046408"
|
|
||||||
sodipodi:arg1="1.0427219"
|
|
||||||
sodipodi:arg2="2.0899194"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="-1.800643e-15"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
|
|
||||||
transform="matrix(-0.48926443,0.05962255,-0.05381995,-0.39687094,2528.6554,1547.0921)"
|
|
||||||
inkscape:transform-center-y="3.4869151"
|
|
||||||
inkscape:transform-center-x="-4.1484718" /><path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
|
||||||
id="path3438-6-4-9-9-7-6-6-9-8"
|
|
||||||
sodipodi:sides="3"
|
|
||||||
sodipodi:cx="1546.047"
|
|
||||||
sodipodi:cy="712.37"
|
|
||||||
sodipodi:r1="15.609281"
|
|
||||||
sodipodi:r2="7.8046408"
|
|
||||||
sodipodi:arg1="1.0427219"
|
|
||||||
sodipodi:arg2="2.0899194"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="-1.800643e-15"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
|
|
||||||
transform="matrix(0.35956287,-0.33711877,0.27785959,0.2884392,1004.6201,1710.9855)"
|
|
||||||
inkscape:transform-center-x="-4.1631714"
|
|
||||||
inkscape:transform-center-y="-0.057200996" /></g><g
|
|
||||||
transform="translate(-19.751502,372.32158)"
|
|
||||||
id="g3586-1-2-5-3-2-7"><path
|
|
||||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate"
|
|
||||||
d="m 1808.1526,986.76492 c 0,0 -3.2597,16.69338 12.2298,23.99948 7.2005,3.3959 12.9255,3.9039 20.905,0.8664 5.0224,-1.9118 9.552,-6.657 11.4611,-11.82157 1.9093,-5.16452 0.2732,-11.4417 -4.7449,-16.31949 -1.7695,7.81561 -3.6493,14.10691 -10.416,17.61096 -4.0225,2.0445 -8.111,1.7046 -12.1907,-0.318 -4.0796,-2.02274 -7.2085,-6.89258 -8.4528,-11.77144 0,0 -2.5254,-9.07376 7.1765,-23.94196 -7.7559,5.9661 -14.5205,12.77754 -15.968,21.69562 z"
|
|
||||||
id="path3359-6-74-6-4-2-1-8-6"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="csssccsccc" /><path
|
|
||||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f1ca13;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate"
|
|
||||||
d="m 1859.8421,1028.7048 c 9.0667,-5.9443 15.9456,-15.1035 18.3323,-26.9987 l 0.036,-0.2122 c 1.845,-9.47143 0.083,-19.48234 -4.7861,-27.85914 -4.9017,-8.43109 -13.4688,-15.30069 -24.2922,-16.6144 l -0.031,-0.005 c -6.6322,-0.79814 -13.9274,1.95899 -19.0297,6.68912 -5.6838,6.71374 -8.3619,10.91924 -8.2233,20.70452 4.8592,-6.41106 17.1623,-12.78189 25.8393,-11.92722 5.6097,0.67502 9.6503,3.8646 12.5032,8.77162 2.8528,4.90695 3.9787,11.43223 2.8727,16.94471 -3.5229,17.55819 -23.303,26.36509 -40.2867,21.46279 -23.5286,-6.7916 -32.1648,-30.7698 -25.4329,-53.73354 10.4805,-21.139 53.0027,-28.07465 60.1046,-30.15118 -2.6116,-3.87866 -28.7525,-3.21222 -28.7525,-3.21222 -12.9196,3.3663 -32.7194,5.8024 -42.6107,23.84314 -19.9471,36.38183 0.1691,68.7974 32.8347,78.2264 13.991,4.0385 29.2641,1.7152 40.9212,-5.9276 z"
|
|
||||||
id="path3359-8-8-4-2-1-4-6-6-02"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cccscccccssscccsscc" /></g></g></g></g><flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4653"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
|
||||||
id="flowRegion4655"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
|
|
||||||
id="rect4657"
|
|
||||||
width="435.20001"
|
|
||||||
height="375.46667"
|
|
||||||
x="1847.4667"
|
|
||||||
y="1685.3334"
|
|
||||||
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
|
|
||||||
id="flowPara4659"
|
|
||||||
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot></g></svg>
|
|
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 9.3 KiB |
|
@ -1,927 +0,0 @@
|
||||||
%!PS-Adobe-3.0 EPSF-3.0
|
|
||||||
%%Creator: cairo 1.14.8 (http://cairographics.org)
|
|
||||||
%%CreationDate: Tue May 16 12:27:36 2017
|
|
||||||
%%Pages: 1
|
|
||||||
%%DocumentData: Clean7Bit
|
|
||||||
%%LanguageLevel: 3
|
|
||||||
%%BoundingBox: 0 -1 300 165
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
save
|
|
||||||
50 dict begin
|
|
||||||
/q { gsave } bind def
|
|
||||||
/Q { grestore } bind def
|
|
||||||
/cm { 6 array astore concat } bind def
|
|
||||||
/w { setlinewidth } bind def
|
|
||||||
/J { setlinecap } bind def
|
|
||||||
/j { setlinejoin } bind def
|
|
||||||
/M { setmiterlimit } bind def
|
|
||||||
/d { setdash } bind def
|
|
||||||
/m { moveto } bind def
|
|
||||||
/l { lineto } bind def
|
|
||||||
/c { curveto } bind def
|
|
||||||
/h { closepath } bind def
|
|
||||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
|
||||||
0 exch rlineto 0 rlineto closepath } bind def
|
|
||||||
/S { stroke } bind def
|
|
||||||
/f { fill } bind def
|
|
||||||
/f* { eofill } bind def
|
|
||||||
/n { newpath } bind def
|
|
||||||
/W { clip } bind def
|
|
||||||
/W* { eoclip } bind def
|
|
||||||
/BT { } bind def
|
|
||||||
/ET { } bind def
|
|
||||||
/pdfmark where { pop globaldict /?pdfmark /exec load put }
|
|
||||||
{ globaldict begin /?pdfmark /pop load def /pdfmark
|
|
||||||
/cleartomark load def end } ifelse
|
|
||||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
|
||||||
/EMC { mark /EMC pdfmark } bind def
|
|
||||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
|
||||||
/Tj { show currentpoint cairo_store_point } bind def
|
|
||||||
/TJ {
|
|
||||||
{
|
|
||||||
dup
|
|
||||||
type /stringtype eq
|
|
||||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
|
||||||
} forall
|
|
||||||
currentpoint cairo_store_point
|
|
||||||
} bind def
|
|
||||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
|
||||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
|
||||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
|
||||||
{ pop cairo_selectfont } if } bind def
|
|
||||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
|
||||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
|
||||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
|
||||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
|
||||||
/g { setgray } bind def
|
|
||||||
/rg { setrgbcolor } bind def
|
|
||||||
/d1 { setcachedevice } bind def
|
|
||||||
%%EndProlog
|
|
||||||
%%BeginSetup
|
|
||||||
%%EndSetup
|
|
||||||
%%Page: 1 1
|
|
||||||
%%BeginPageSetup
|
|
||||||
%%PageBoundingBox: 0 -1 300 165
|
|
||||||
%%EndPageSetup
|
|
||||||
q 0 -1 300 166 rectclip q
|
|
||||||
0.32549 0.286275 0.529412 rg
|
|
||||||
197.438 160.944 m 171.461 160.944 148.402 148.244 134.059 128.76 c 154.211
|
|
||||||
128.76 l 165.531 139.28 180.707 145.713 197.438 145.713 c 214.016 145.713
|
|
||||||
229.07 139.405 240.355 129.057 c 260.641 129.057 l 246.285 148.385 223.293
|
|
||||||
160.944 197.438 160.944 c h
|
|
||||||
132.855 37.463 m 147.086 17.01 170.703 3.549 197.438 3.549 c 223.234 3.549
|
|
||||||
246.145 16.073 260.508 35.323 c 240.219 35.323 l 228.949 25.041 213.953
|
|
||||||
18.772 197.438 18.772 c 179.809 18.772 163.918 25.92 152.438 37.463 c h
|
|
||||||
132.855 37.463 m f*
|
|
||||||
4.26191 w
|
|
||||||
2 J
|
|
||||||
0 j
|
|
||||||
[] 0.0 d
|
|
||||||
5 M q 1 0 0 -1 0 164.490509 cm
|
|
||||||
197.438 3.547 m 171.461 3.547 148.402 16.246 134.059 35.73 c 154.211 35.73
|
|
||||||
l 165.531 25.211 180.707 18.777 197.438 18.777 c 214.016 18.777 229.07
|
|
||||||
25.086 240.355 35.434 c 260.641 35.434 l 246.285 16.105 223.293 3.547 197.438
|
|
||||||
3.547 c h
|
|
||||||
132.855 127.027 m 147.086 147.48 170.703 160.941 197.438 160.941 c 223.234
|
|
||||||
160.941 246.145 148.418 260.508 129.168 c 240.219 129.168 l 228.949 139.449
|
|
||||||
213.953 145.719 197.438 145.719 c 179.809 145.719 163.918 138.57 152.438
|
|
||||||
127.027 c h
|
|
||||||
132.855 127.027 m S Q
|
|
||||||
q
|
|
||||||
0 164.491 300 -165 re W n
|
|
||||||
% Fallback Image: x=0 y=0 w=300 h=165 res=300ppi size=2580000
|
|
||||||
[ 0.24 0 0 0.24 0 -0.629491 ] concat
|
|
||||||
/DeviceRGB setcolorspace
|
|
||||||
8 dict dup begin
|
|
||||||
/ImageType 1 def
|
|
||||||
/Width 1250 def
|
|
||||||
/Height 688 def
|
|
||||||
/Interpolate false def
|
|
||||||
/BitsPerComponent 8 def
|
|
||||||
/Decode [ 0 1 0 1 0 1 ] def
|
|
||||||
/DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
|
|
||||||
/ImageMatrix [ 1 0 0 -1 0 688 ] def
|
|
||||||
end
|
|
||||||
image
|
|
||||||
Gb"-V#C$t`_Z+TWTnl<<&Yt88b,Xs2W2ka,:g=(M65>*n8eDZ2(mhN?N"B_H["+5<Td>p+.A
|
|
||||||
<))6]`'+5R]f?:_V:#om[bNcc\tLR=!98HgXVBTBGt8j6i'dBC<tac]?jCo@I=Lzzzzzzz!
|
|
||||||
.]34EcP)sAiqcX3I.W;#64`(!,s5e=ZKP9VjpGjG[U!^D4?SS0)oG'_AsdcRspj>B!VHZ0u
|
|
||||||
LnW#DWd,0R#dci1=3U^ZdGoX-LFj.hBC\rto0E=uRLJqe*Nd:%%]!1bkYap\`u6@:BmK-Uc
|
|
||||||
5g>UMEJ*k$.Wb'gn1*Bef>o]]:Gf<3sE'j1,Z"98E%!&0DO@_$gHB)L'Jd6!Aj>dd-Z_$Ql
|
|
||||||
d+#\((^Rd`c/[fRU`nI`_piL1([`;HJIf)B3o]8[)<\0UO[:\OWQsK50rk*LSHE-6H(]XO9
|
|
||||||
!:U!!3I)DRYO1(c,'*K$Z_hXXmCRIJh`4t(:28U0V"0sgf<f6I8p&]OrBeM`L_(SS?0&_Pq
|
|
||||||
bJMD\fp@Ll=0kq!!!!&6;C;Dl'"]N[N1?0Zn$*)jNrGcH?>aIn(XcMmBtP)dsQq(cBtn\H2
|
|
||||||
-ejdIEsMkN,QH!<<*"5Y>p3hSflS@s5hHL[>Ke]mN)Ki3l?M/+8!@)GsdeGPc7$nF4f8>B`
|
|
||||||
KSSN1h\h?j5_!!(_jVI]&NHW"r`s,kM$opdIgQ1As^O41hr(fC25`[kI<^ACIfRIp,&e]/a
|
|
||||||
3!!!!592!Ng4*5X76qkD[jh8;)k1N:RG:Uc1kEcj;q^`)F]/=2%HqJFjlE^Qm!!!#c/gi%@
|
|
||||||
k`Kr0(@N15CNtoc;jI)4o!!?so'>tn[.0o?O'M\)ab5S"4;\%u!'n8<1F6O,FSrf0c%?8Fj
|
|
||||||
borfRLUph%NDc/FRI]^HVa4c?iU0,!&!GT;Y&uCZ%2q<ICf#1hY`[?*e+(&$^re]mImKgj;
|
|
||||||
Vg5cSY\&!!%8Jo^o3eHV]A!D&UbOQtBN@nnmQhJH:lpU>f'L1K:!!z$G*=?SD2;1:qmR5>?
|
|
||||||
\hkb/8-_Y@)?*Lf5KZ.nB9C#ljr*TE%PGHZe#)BHQ^=D85";1#r@Lhe^MUT1*Nrm_,-TXSQ
|
|
||||||
`:!!!"\5NV!0iXVLg$/3n@lZD57Lq$9qm6#N'i49#;:Zgg#WBQ4@!!!#/]GoJO2Qf2&k1B)
|
|
||||||
4/]T=/42duEWO;d$OisIW*PRrY2cp(\!!$-aE`2IcLmUL,6Tc=`.;q-jT;?\jOi%AU=M&>*
|
|
||||||
NU,@D(]XO9J<p5$ds`IqUmF%`SrNZdaX0cnX&i1uTDJTg!!&P1L%Ep6_fl%SIB`:r64.<m>
|
|
||||||
ohRAcLRgDP:kZfrGDT8!!&\9okUP$(C]Lr3H^d<Y'L/Lj4S+aT`-*M<po(]WrN,"5f&SRQ*
|
|
||||||
V\bDRe#eekLD+.<3eCo'dSZE5C]0Z'cK_Wo#N2!!!#c_IE>eULXE.,!3.KX1X&r@PAfc`s%
|
|
||||||
E.*j[@\0@-Bh4Tk`b!5KRecWln:gP13,3Dk(^+N3Dao:!="p6J>fY,d"9!<<*"YYf"Ep82s
|
|
||||||
;#PAU)hCiD<i4lBcm_lGohlqY>[R\;JBBQ:DLB.AT!&3^)l,t59S%`Vn??rFk`(ojnoFD@d
|
|
||||||
4IL.[ot(Y5!!'f%V5It.MqmLOH^=4,6&<E6W*dWc[0JKD\]GHa!!(qFcCML$II`g[\LeFCW
|
|
||||||
:=Wa5C:C>^9n:J!!&s/Yup]fs#FoB6I/-dCB>[%e&oSSDs625qbC>)+#!Zp!8puDkuhe'mH
|
|
||||||
`SN](0/mL_HZ;5GtW>Lri36;Z0>o!!!#i^Vk1pB22aU1J\>)NL-RCXQ^ZV?+cm->mgW4!9?
|
|
||||||
qrNh#\[]%F?OTCTrc+YK#1NCWi+>]qm]U?ZqV!!!"\J&E?g45=J2o$ooI/tG<,6=P,Wo9E;
|
|
||||||
U!!'fH\N+r)2oP^B@tsR94X'VJ"*t,hgN"PmO0T)m!!$+E1F%6X6qm>M;j8s"$-AP0[e&"i
|
|
||||||
jaUfPjf!X3!rr<$c7V7CCJ!`MYM+q:^5OEbhrgV=:0\jSS$!(u!!#,X7XEY6d%0f-66)LJm
|
|
||||||
/rY-h49t%Xniq9!!!!YMp..H'bN00WN:KX:.Tq1kI)&@_fjI.!<<*r^sPpaEN4E:ApigtXm
|
|
||||||
'PfWilj3!!%PEAS'sS>J."XgBl#hjb/_Bd\U6bb%5p?EcP/e-NF,H!(Y,RZYW`bTUXPDj\'
|
|
||||||
S[Ldl]4T"8LN+U\f_"TSNf^33oQahHZX<5/8WKG[DODSPRpMGnrbzb]bTjEQF44PV9QR+ZA
|
|
||||||
Cg5Kl<=n?hJ]#QOi)@#d%@0)H)`XF-F1#a('j,G.,I=nNL5!!!#'h2U`7;^XuAo'fSl\gE)
|
|
||||||
tP1GU_cBtmq,ro9(eHGpQ!3f49:>UkaR#[cuPV9$C+f<;\Q%+&2:2U+A!!!"#&[O"e].SZW
|
|
||||||
(XdsJ]B9!ne+^j-W4q*g!!!"&cCDI.CsYN1Me>A4_r<a'o^%trWinPc!!'gJDPgsgR'O/Cj
|
|
||||||
,qL9b_-N4Vfe2c1BZ7*V.QaA%KQP0!<6K4r3^fuD!/5?PV8:.+UZ\pI=SgAL^O7a!!&\=l'
|
|
||||||
"\kqLp>)*YUl1,X1)Vcg_$D!!!"tOI;4oHcF(V:&'Mt+YJil%bt*S-DT],DpHSN<dg57!!#
|
|
||||||
7b'!j+&H`&=8(Z'fVVp..@->d'2X86!'!!%QIn']/o_gN:L?N:a+>TtDA??A1V=nQnF!!!#
|
|
||||||
p;dQ&,q9n*dRuL:ZmNmOr:cbs#]6_G&m]$Bi!!%)24`f^lIHN"cmLhik1d_Jk4eHsnop#pc
|
|
||||||
!!)g\DJid*fZpp"7k7s.&jfhai\D--GAD(kT'E?p!!!"(f]eSkhS!PN?ec8\nkJuRS='q<6
|
|
||||||
1qVp!!!#%-RU9#FRE0N1d_O'4lX>a0I07qA5lq!!!!#W1/@amnV8/APV6SS+o++rH3Tp(Q)
|
|
||||||
+7k#64`(B4nLI[3?flm2)O^Y@%Y[q**e9'-=S<09?#1!WW5Y_3-G,)"Q]LjU5-V8:eq!^2k
|
|
||||||
oGqd0='!8M3W<1K;Q^[h%I+f#+86d'Ib=7&q7'a+L:J?qe\OZ)Kk--DRRKTH6VE?Ps],Loj
|
|
||||||
`!!!!I[O:pt0'rb*Y>,BI7&3JfJA$:B<*pFB!!&Z]G'<;t^ic6.e?;M:Ia7,V-U:ogihA8B
|
|
||||||
k/Q2H4Or%S!!!!Ye:khV"*t,$?]Gaca91JYB@b$0f2Z0,!<<,X+PSdrl-OI@nl7(]eu"/d#
|
|
||||||
nTV(UZ]/S;/rV>QN.!cYck.0S>d/GPqP<-+iId,,thLQ<*q]f!!$CCB2;n6U&,8[CJI2%Yp
|
|
||||||
t15s*!PSA^sjY!!!"dCua4Om@0)4^=ji#8bf6gX%-F/2Qr0AI2rIk!.[)8ZZE%'?_r.48I-
|
|
||||||
K&R6G>-:/7tWCFT;a!2Nl1SFTUNfuhp4KFhTb#4r8:FRb+N.k:T"!,QarhoX/\-R`>%&jhD
|
|
||||||
2&XTnXqbO3*^&e97^cE7S?f?od[drod^7HU'&CVjVDW,"c`J"d%!!"Vp,<]hdn8RL484!Te
|
|
||||||
CI\67-oEkLobA8C!!#(*S[n<>fBLFZO+\)(J;DD)q8@'KYIac7!-kI@J"6$!oN/bE,_Q_a`
|
|
||||||
N,:(J\<F2?[VqT!:Tt=,@^El.NtSfVKLp]X+&s$qAKbB!.b*7S!+XJ0iIg6OUshn7U-/:`D
|
|
||||||
H7#(]XO9J)*f?nF<*RI!nNk+j0Cpms-A(l)Lr0!!!!&gA/[&gae3m6LNphc;RN28lC(S"on
|
|
||||||
WOTX\&9+b\XC%P>_XbG4>Q1]RM@J[9gurmm'!.UNXJr0.[C`dZMcd(@W*@07=))'1ta6KIJ
|
|
||||||
N)]-cV^+pmEmAbS3Rh"nCMA(pJ"+*fj`*^$<e#/?]?FYG3-PJ,gq7hq39b`)%DbPcX_(?T9
|
|
||||||
M*[G_mgbo#20euoao3e\q^rmME5@'2_;2aN[qe$.q<jIEPh&PuDHLsFolV/Q!2-!h=T2JXH
|
|
||||||
].G`+E>AJeRj3DShl0!/..ma))cEf`jH%?KbS\#b2nlSX;nVqG%O5;V$kn9`?jr/NaKD=hn
|
|
||||||
kJR8`NkJ%M%mTrAQnr5\u?<Mo5c4!!!"BQ(*srEU4%oCHph>C#*=\pKa\T2EEX5h27#UQsK
|
|
||||||
5p:0l/hbZ9/kg+G6?j2@Q+GATFQD"4[mP?*V8g>f4_SrM77eATHR/stGh(B=HNIaZ\#LCIL
|
|
||||||
]I+:`W/a]$ena82Kd^U%N@6:6.*(rD<2)i!0/B]itZf7%:hmiBqlkpa2DscCqMXk7CS1m;8
|
|
||||||
/kAX[<.21V!!)(I=0JFllT%o>HB1$Q\p7!knaiLNZa]:WMA)Q1_M9'0^\"nWj$sd7YMMKZq
|
|
||||||
M&F2(4OeG]^g\DS0:,hQuV5.MX&Y(!!"-K3HOJk-mm)<H:1cEZjR`=',EWQl^m<)Y?t(*I6
|
|
||||||
P6*o82)-CcF7]b$+8jZW]<HL1:BGhfP6-qBSk8!<<*Ra-#"1gc`[LZqrmdmBlHRlhg(nl''
|
|
||||||
^eD*4&)l%\JE0V?G3auOe/h"%;Ra,Po5j1tmQ?EO-d*BC%o1^!dYE-Zs"rj.$Z1!3RA_u]C
|
|
||||||
EjQG?Gf">.Tp[1UD:ZH54G'EmglE9NpI[e!If/M0C++<.9Zu8-?h]<i8$31'6]BC9Ug3tbK
|
|
||||||
q7;U=2?3Sp@_h3h4/1_4P1*F'E<V\BXPsco#"3Y%3(`op60t$u9h'!SE^]R<#64b^OuBM)D
|
|
||||||
;CS_dH/]%fja<pJIB?4Fsb.7:jo(s?5G8"?b:(1R,R!E4i]!9<JWfdb/8/bb'g9c1]RLU(D
|
|
||||||
F&e(XI]WB+YC@a7"Wsc/3[q/ho#?]CNO`S=JBPZ"HC8DYgM/T^q]0QlGRE>T11PodL(F!8o
|
|
||||||
Wp"`IGUKHk**Q&"7Y!HV=1`*?&0<deSrG%XQU?8R0/J6p(7cR<73B$],NF.<41!45l[QKaT
|
|
||||||
6.poh!q6Xikb'.ggg/\#f>Ye:H>/<n!0&B\O^3dqO\ZJ!lPb2PU5(O@l.B3@J!"Y9[B:1`&
|
|
||||||
L%7)?O\,F^@n-8Hh6Q!9C2/Lg'+4GuHm<M,lM\Ks4,dC6\U(-3?Y,q1!WW5U7o[ugdE@fYe
|
|
||||||
qe0Wjl%T@b-ill1,H7:T1X(0e=.=k<poofh`8j*_ZCQo+*ftgljCHY%KHKJ2_(ink52=16g
|
|
||||||
&>]\o^=48He_)Bb2>oo@qPhQ(OA\L5[&`Odhi<qBQ+B!,r:>U.uR(]CH[TYps(Ordb*4EJM
|
|
||||||
i>5(2@2//F.'0uW>(TuC-q-RuAN@tod%k"o"X!'igt<^^D&UjR#K%&S1-Oi)UaG!s;\BBQ9
|
|
||||||
YGMqgC1U8sCO8\l]$ToAJT-]iG.,Uj8<<*"qOGUBlB]#Z/=(T<@\p'SU*k(\:[8b[h%:%5U
|
|
||||||
M`3t7DYgBXGibhX0bV6pMfWq6CFB/_:_8J@3c`jcjm+Xq)^"PE]=&gAc74p?Q'J[ac%5lO"
|
|
||||||
Xu[4M/Gf]Z@q\F!W[b&7T>t!IM'_(@RMGXRuRsq^&6B:9<(c'j>RD8(BO[_`<iF>,UXKJo4
|
|
||||||
p<S'`\4J*#?_);oZ"=^'5em997@s_o$Yp,c@\,;imVW^RcoMZYj*5Q(RR,@@9)u"j^$L!!!
|
|
||||||
1R=Ro.X]LM_^MqfE#7O*Wt>d/S<ERpt*R,"4ED-N%ue7Z5\o:J-!djM9[H2mpFo"@%>2_&0
|
|
||||||
YOaH*@aD]ji#X7#OKb!N4q=@DRQ+n-VrL#NkKBfcF!!'fp_WG]6^>^>\Vfe2c'?@7H4F:*$
|
|
||||||
W<)q;Z+.^a5;2SDV#IJ^m`ta`>?%45!!!"BZ#!"=o!K7DPI=hWRPo0YV$kmTT,5;V:7\mOc
|
|
||||||
7boW#>\KFU+BWT?1iID!!$E4[4D"Aq[k2Iqds>iVld^[,t7Ju!GFKcG\sbdau2s`.=]O&gK
|
|
||||||
Ck'YNh;Q!!'ek4/1^s)t@\Up$'hDgt^g^2m0'X4sL'&/ghskS@Z/r(N`[MC$"<_F5'RBB*8
|
|
||||||
27J-fZqS772O4RJSt%LLjRH8@q]klB?[l-bQA1!BC90'*Z]o0WaXX$.O(!!&gb5+1Knl*#J
|
|
||||||
G<KJF@p1&i4oDMVK")#qb&LXpUpJ_/hLR-s5i\.5o(B=F8Ca>Is5JN_eHqdV&1YaAEoVj+d
|
|
||||||
-N[\Q_m*kReT[&E2ci:?QhCFrcLViZ!!'h-,i;/iY"PGYePq*ZGFr#n&+[P!jBL"nNqMg$?
|
|
||||||
25GA^o$;H;m0P(<IGV_!!$+E,<a5^pFK7o67l.i``t.RFU?h8'kaeM4p_3NbKI5n?bO3ia%
|
|
||||||
=G2F9OK!^C*Y0b>`m*!!!!9P+.[0bM\)s=&9&SS_Hnq>lKM'rDfHkJE(0OjXck8X^0E'b27
|
|
||||||
^Q0]H!&S'(s?!!'NZ^kn2rf1lK$SrNXL7P@P/:02l5!B%#b:(_CFjmU+hQmq&sWBU(W!!#'
|
|
||||||
GK^M[NC+<m7cn"ndd6uMT*`2=`r_pMBrMKKE=jRedBUA!/%fcV!:cl-,jai/HN)qP0'bN0G
|
|
||||||
H$fi3poiJC4Ro<4csj*I[qEO6B;6&C2]YqIj8f5\*[(IGH+k3Z^h'4sPjtgLLbJ6_Q]mTQr
|
|
||||||
5t4'*>`_c(]Oh=IFnQ#!<*M6-LB/E5l"$OJ7LpKi+$bS`#$d?@.25+H!63&d\U6bV2I93+*
|
|
||||||
.D^JH&5;bP\'S%-;9#Je0S2s2a;On.B$CTU_P-Y^,!W1`<.fc!(b-]A%8'W>V^s3<0&pIi_
|
|
||||||
bV4![f$lDPh9\51c-.k.J/38f*XT1g0M.p2UO\0,>7TS<;$)?9b6DJ%ffjm/Xg+"pFiNGB'
|
|
||||||
)51G)jbK\:9'"Xk*(]71]m[5q\KBf3@!!!A5bo:,WYDDatHj>F5:.eQ8W.Fm)6K5Br"6M(_
|
|
||||||
;s4$o=E?b#T`tJs"]Rhd"`EU@f6$X)[s$:c$_O!mb[[n[`7q;?o.eDFi;#?L\`GIE!)VYN[
|
|
||||||
FD?"-RiC1jl?+G$,(AIDkR5UOa-<ZTRJ',hra_ohfP52r\^DG3!0/2![K-@G>Nc)GkOa"cZ
|
|
||||||
+>=%^7mM`NhURG?[6B@^cd44"!*O=7pP;!!!2A[#(hX=MoNhIM([pnaW3sY>>7T3LOic2pY
|
|
||||||
I2>Gd?dV>:H"!.Y,Z?0"32/"_3W<ZZ^Jk&99'%Y01CAnHrVV>L[^?PC!J&(O/e!!))$7us0
|
|
||||||
Ue"jcDb/"S&"n()adZN0<WXgaZE,CYnoCDNTIsK.[&c^"05K97Y!!%P_ge>iRju$<;ROA,H
|
|
||||||
`6X?>P1*DQ?D*t'S<V5Vmd1VV0+RNU&(QFO!!)(I(<^'66Ph7[mGtU\DDEthmT']+RfT$HD
|
|
||||||
Jl%j9=FE\;gr`-B,U-DM!H#\!&.]sU0Ypn3Vb3h]*'J!?Vl/Y!Sf4!^o;65n>%Y"ZTNWEl2
|
|
||||||
qCo!:lCbEJ^feN)[O4a\VFK\L]lq;tY\Fn6d]el+[X5W;JuETCSU-W#k%.WW3%7*2tkQ\p'
|
|
||||||
U;I"dc&,*ltZ=7&q7;uu4(bHlj)D=VM=rh>Nndc7AWia4+6%kI\\E-W5B?R(=X;80K\2sJa
|
|
||||||
S+R\`%eOL@);*1N3g,C+Kr6g^G,6!;5(K:D8J>AGB1!3QTq'Ot3B3i'<UABrQYg2Ks8Njh[
|
|
||||||
Wr)p]Do*;i!<@Y/K_Ppl^F8SI7l;ap,F;tRAue+k!,RdhQH;kHbt@:K,EEj*VtuJV!!&@MO
|
|
||||||
e1+hT@9%.BC\>lH2*)Km8SKr!D'ItrXs-[^8>X;\p7$4+jg8i^]n;(LFZ`RjF_Phm=/O48_
|
|
||||||
"%ZJ2qd@`I6EKXRZ`l5)A+C`I'rd!!$,4c-!`Bf.d"C5BNN;iV[iK#8;WU:7k5Fd@%2;RZQ
|
|
||||||
W(q1:'r!&3\K_PO\87k7r^\9^US>EY,?V>=R$0]2P=W<7GM/&008HJ11nFo5pIl@TBC!*m<
|
|
||||||
h^5i%!?UpC+oZ:n>o(Y$\ODftKV=3>=jd-le:\RUH5nsA"kR/6@>kttMV;p6B7-NF.WXg<S
|
|
||||||
]?AC("AXnTIa)m*%/3oC(K:D8J;+MK%Ob\h\9(o"poTJ0Vtr(KE1HF%S]\,uXrb<M$31&Ik
|
|
||||||
00gJm@0)4^0G[6Lf\LjoUi,o,616g\Fs=r-6nd_Jm:7oeN:ne;um!7I53UbqfMj4q-(a[o2
|
|
||||||
V:Mg]dm0YkCKbftKIrb@c15GFEP.KeKA+!.b)ZZN!PYWta/[O0>E+T"V0#(]mOucf5hQZjT
|
|
||||||
]Z3HEpapBfjfWW3%WNi7qmPcmkf2uS%,?+YD]oe?TBhM(RQ^ZuN2r1`8`q0ctal=1)"!1^o
|
|
||||||
[`+pAsN`3YOERFQ+cVI3Y<.,/U3/a7T)2%d@.).ULB_[0/!!!S9ZZ>p8$rXepERB^a&WrWT
|
|
||||||
X83Y7E%[QHfo,!2$OPNTCrklVHW;.Q!!&[Z=:Yi('hiF7aNR?o^-`&(zzzzzzzzzzzzzzzz
|
|
||||||
zzzzz!",`i-SDNWL`s2Qma,+e#7q'dPq+:f2]X6R-13I*>6"X'Vm^Ni$3-.2Li(hVl%nU,L
|
|
||||||
k=j:itmrPr2uMhbP%kuJ,fQLcpCBj#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%190Pm
|
|
||||||
K#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5
|
|
||||||
(P!!)H.cH]HR"oJT1iZ>I+RF"j*">*V#Zr@$UEr5Rtqr!);cC[>ii9b,fAK<gR-nHpna2b)
|
|
||||||
XX&^mgr,SoC[2_:6#`4Cpldi0W5CS"3Y$Du'BMbj:\]Di_eWY#+ZrEI?;P=4F<@5(P!.\6-
|
|
||||||
0elHfq.-0cKkf2?H1'HJ]5Hrg[;0jGbk^M$T>(*[MsAin(G8t&d/PDLWa.!&gGX!,4DNBEc
|
|
||||||
CI&3rV#!,5Q5o$qp8705tdIL/JUn);Ir0f"TTqb'bs`K<2ht8Uft0@#mgq3gYBf.)t,FJZr
|
|
||||||
G(mrUndM%g4KW*jen7cr-P?/QF.);uhFuU,,",fOO[*PH%W`*^>,/ITrVE3WiQc[:lNpTqt
|
|
||||||
'^>,k80W;loE<ifD#U-shC2O*dob9&ikclO.&V)eodWjQN>181O2$!O?&BW1t3`sW=c/R#N
|
|
||||||
[7S,%5[VU&-[-?>AV)eodWjQN>181O2$!O?&BW1uncX^X"?G#=IV+ZZ%M7<LF4[!*D]`-O<
|
|
||||||
\T?T_h6fn5:o6pS*BSG3]4kHKPG"aUMj>h+=t5c0V94IW$32\(0/)ehn`(2n&X+S<p@7\;d
|
|
||||||
A'4\VG5rts8CZZCHq^_ZXq=GeQDO3/6T8neZ*Q%q.B6\c272"2g+E8SND$V^:a^T#2XiBh1
|
|
||||||
p:Jd7;fl?Z4rTBrOjZQ>/!TW_@**:kFu_'3Zjc\:fD8#JU01gS/C#lurZE]=X!X.L+e9AP6
|
|
||||||
oYY.aR=il$[kDJiM";!dc<eZ6r`!%l_mcr-u799ff8'hZhNAO9#n!132a^\uEWEbC#^'e9b
|
|
||||||
20]:Tg@s6Q05<hBe-<@3MYpE&/QnenMWfs*P>)S[r'3ZlMTV]eaQ3mUE_#Z.\[_d_+[r1"_
|
|
||||||
2E'.Aq0RI8CM`Y-Vk5"cA4Z7M`?4dYMA@eT@)2p?C!]bK">//-ZrEI?;P=4F<@5(P!,r5SC
|
|
||||||
T4eR]=[h%djHFf7=OA7Ma\&NZ)u`fCS*_7;Z+WW4*FT%:uPi4X@SHt1M>!tS.%""8^LA;78
|
|
||||||
&mP/JUn);Ir0f"TXnIi0J[nN>a\Jn)#cYo<)B2C2BV5M\`:kWH\@2fs>>We>`&D5O@Op2LY
|
|
||||||
FDRE<fRSHLOp>-q7scr-P?/QF.);ugkD8m5u'>;n3=\T4Ojbbn1)p:ueZjn/9?cHFDCkKdd
|
|
||||||
OA9`BF4n(s6PUNeZlW0Fqcr-D;/_+%3<12*2T`crI-F?_PE!`OJC8"kfE6Xh/16_J&n[X.n
|
|
||||||
OH:$5*uR:lr&kRl&c["$U.$idpktI'1h`l>U8?"cQ3npOWA:0D!e<p?fM[FOV+W0],fn3E=
|
|
||||||
0GqS7]TXripPX7FamrPW`<N?GCE0V<ga9L7S@k:ZrChg;Ir0fKbCalRF"h4^a0h9WUB3BAc
|
|
||||||
KMXT7-FtVk:]8le1X,\)+^re%*JTTCqjK']Y!qEotR`K0OMFfWgl&CPn`&0OTFUS%]gneOe
|
|
||||||
+cX[PmJ#qZlacr+FA9*G<^T\EB1f<6j]T>k/^Y?nm\*?@:]hRjq[r:.JphU?`9bJOGd"j-*
|
|
||||||
t7Ri-9YHR^sX+!Z7gX"3l@^4!jq@6]/PG"aUMj>h+=t5c0V94IW$32\E\#"QQq<(cf.,*[^
|
|
||||||
=gQt0isk$#[;tBO3B9*Cg-NcPV)eodWjQN>181O2$!O?&BW2!i&km5CG:Zn&Ug1HN#)d4a7
|
|
||||||
"i,Jj^>Gp-UCD5(+iN5ZrAG>99ff8'`_KjrE?5jkF[6)WD^]+95W7]R>F#eGdLEt5teU$/Q
|
|
||||||
F.)<%(%*PmK#W!*k+]>H4oWs*c3M<%V+MPW_5&S"6*umFjE&I%8ig>3beHf@/0r*4@l*iX@
|
|
||||||
F3k09C;aiX85MHOVl181O2$!O?&BW2!i'("FPKn''e?b.ghLlRL]gsD<:<u*GqgoFM[:HnT
|
|
||||||
MC=T?Pmd>9'03Y_r[;+511hb7JGOP%jE)Bme[ri48/bSc#dm68c?[_Ut>Aq2tcWum0GiB%W
|
|
||||||
g01n!20S?=?+Y:%ge1e,KS5#H1M?FKgUC%T7Wn"GH1AiiT7?k9>.&+Ys8MmiRPYm=B[H>3b
|
|
||||||
:d5:I.r[]^86^.l1S9S_$;'H044_HD3ZYT;B5GNN>qcipoIW)`nDAZ3<h'8-F?`#5tdIL/J
|
|
||||||
S7jJcf1k;GrZ+M:u/G6m&[Nr1':I7>hq,G^'oO;FG^Z[u'p.n\l<=Y3+m/9((MPNc1n2Bkc
|
|
||||||
%n9mc?BpY=QZ%.89"b*Dkumk7kH\MGtr\T?q_q;mq]2/3u].<3^!rqPLk1M5GAoqfQ0Wi5h
|
|
||||||
-&J="R.TWX<_:QGDl-`mE?:H"#lU\B^RF"j*">*V#Zr@$E#nCXJ_FG\rUq;BUp@bq<f^.tk
|
|
||||||
ace):pY9foCVp%M=0Ff1l;TKuj:45VV5C/g%i[FnWMc>nD3m[Yn'\%*;GrZ\o.cA@d,06BN
|
|
||||||
KM!)\=_u8!sT/F#?:S]agY6-`A2f6lk`uQ_5<S!58l@l&/uR(at"g"Q7<PO.[6U&b(Q&f!%
|
|
||||||
u)B/QL:*h5,IR%NVVh1Fam>Puh:s\LH<.N3d*=(7?1b=A)r-C/qZVe`:rMM'nl#%1P1+8u<
|
|
||||||
0MDq_R4O$33(r2satCoKpb*3!/OY5C+E'E@gAs)$>jnn$0GAO9%D'!tW+cr'n[,rhcu:7aR
|
|
||||||
NGMV,gH#nV5M+6Ogk?#04@JR3JLRXd&\$rikXhb#i2('bAP^VSamkphhs8M#sPan,RPa%D%
|
|
||||||
N>e4p?Q*HYlKm31++<cY'.;85@70/N=e_b8KU)rkBW3b\V#l0?E(in>bBr%[qe)OLAn7k4o
|
|
||||||
Q1TS&!L26]p^cl@bWJPm+kPq1G`7DCh\r9ma@qig:Jh?^3mJ7mFq9d[0O"JV>C#`fjd3glI
|
|
||||||
<@jor>PUWE!W2181O2$!O?&BW2!i&ff@uVb`qf]3H-];0SP[e5RZ"EL$(YVk8hjD!__d[A@
|
|
||||||
JHAVjRCDjPtMkpMt`-7L5ejioaA[,8%BcaK-Sn35C2q=s!2*Up;/LS:QeKU)rkBW3b\V#l0
|
|
||||||
?E(inF5('m.>.n4RG1qRN/=+kh>FX+N[!6nC>5L<^qmFqd]Y([igY-e"h;$d$04&JLoONao
|
|
||||||
\ODDlG29S'g!EVE9UK5V=nV1:f,h-"&[YN*cr-P?/QF.);ugkDNbPJ`3d&kVW;#N'6[K@d+
|
|
||||||
!6\-J\KO,7pEBRp1pWP7Z;<%r]^/=PP71ae,^Q9rpFE999"gd1B)qORh[P\Gh]ZDG']^ed8
|
|
||||||
FOB98+"c<12*2!Pg!@VPP3A/a_2q@l6`3M2?4rG;m8&J)Z;4hLGS([VacVo%U$9RsObmM>t
|
|
||||||
QiNu'HUr5]I#et7,#WFE%?5*eXeS52BJ<0Z^qd*Sn![r0j&@EtB'rVH2f<2l%s?1-:GRgh0
|
|
||||||
\g"E]EXh>C1fU"XAl?IPu1i:sRDV_nM5QAA*pQDh^V-^cWX\+j.#"O.0[F]eRHpU.d`5s.5
|
|
||||||
mD=PbI=6NZeZ*3Ma(s;0XlKl,ZrEI?;P=4F<@5(P!,r5SBW9apD)8Ii?bUp`_a__lbr'`u*
|
|
||||||
Dp$E[VWK``JXO7JLUj9h5t\W`^[r[hL"]Sj83MNQ7=r=)fNAtA?)Ar*^4uH@=sBm<1uV^h*
|
|
||||||
FFL5(3:7[?It#]6<QM*JQn7C=K1:@D[\=kK_mJaMj&RkK]XQW`?*/`JPNQc)R)`ZY*&YA(I
|
|
||||||
_aF7nhK%i]'Feub[^)Au&ekH8Nu181O2$!O?&BW2!i&ff7r5Pse'h=Z'P_M+2:OrcMJE,`%
|
|
||||||
D7=N45'fU!`UcY2[bEeDF>LplG^]4;F_0r[\9:[eIL@,I=[@B6uVX@8^Y?j(aGl.-tA*kOY
|
|
||||||
',MHtj?Z-#md@g'^A%Y]_u7NqoBWTpQ75a%G>.$K2)[ADaKP&Zp$.g-Q)-WCDJlV>&&#aNe
|
|
||||||
lr@AAg1EY9PCD%JsIl"=t0N^"FIW-8WtLc0$Xj\H61,E7M$m-fk6r-*MGfR$@i'NVnlO'fs
|
|
||||||
Bl3`uinR;`$Rg".J(EF)l;CpKDYej#pQ[eX'Tg8UJ6njiSI?K^ukVqJ4n'?PN#!n8PF_]mT
|
|
||||||
X]mYb\iV7(-h8p?GN#7i^PROG1*DADiKhhg(u/QF.)<%(%*PmK#W!*k+]>O(:kP7?Ao`n/i
|
|
||||||
:@=s5fL?eb_WD]Q&*&q?Vgt&T3BB2!_#4H89H:senJ%k@+rr);8>;^#7FL:HgY?\WdW\J@0
|
|
||||||
oB&alhamG7pU=T#f3a#5HWYnPou)\#\u0Fu"q@ZF(\G+Nf6"bS4D<(a)tmG>/QF.)<%(%*P
|
|
||||||
mK#W!*k,H>,iupiWlk]^8"f8@M^Y%Gh>j]^]2%9#iisd[pbGJqtAP\\RW[?7YW\3V:M\K:O
|
|
||||||
BmD?@'_Jhg9P2dRAN8n%\nZg+f]E&e^r9ZJ0aW+gY@P\$rj?39$_sFm>4!dgHKidN2HL6Nq
|
|
||||||
X"99ff8'hZhNAO9#n!1.)&9?kT#M2mT;3HF12YIpSmjukbLmej:D',)%%n)Gl)TP^<"9h@q
|
|
||||||
(rS?%7O$/f#Sut/>\Lgg'G29?=cBp?(L0`ZJGH^_E[;+6t@9BQIq'<'O:Goi1XHm&'H?JUp
|
|
||||||
^AdtE)l>".-1-%R(F`8Cg9k]SN,1:RW_@**:kFu_'3Zjc\-1WRqX1uam^^Z@9q0_9>8J%j(
|
|
||||||
).JDj5\Uf;lBKbl\e*-4k'RjT+Y/r@FL]$AW#m]F6:]OH1sgi*j%N<OmdafgJTCpSub(YWD
|
|
||||||
]QJ1,<\#jl`4^:1Ifn2`FUjD&_.6MoAT.I!P+mHh#&kD'%T!QF_SGIdKFSh7Imc2T$"F3bX
|
|
||||||
SeB$D7K7^`aX<@5(P-p^Lk#qZkl>_6id[C:u+-Yc=NpP(Jb55OKfRl>3@r<jDok^HP'gMaj
|
|
||||||
W*QQs$g87R`mEo+FC1ZuhGO3sZHgp7_BU]7Y'c.[a]ldcA^k"D)Db<Y3#RJcuUgh<#<dc4c
|
|
||||||
DH!H.eK0+n\8es:C`?QX9PCD%JsIl"=t0N^"LTi3e'h6BH<%"HeK1E$gU<9K5f8<c[5VOT:
|
|
||||||
;>r"eE<HR?@0'De#1s5^S=8XdN1M!.*1PeFbPO'Bl@:5M2AK_HrF4KDNXD;WKYR_e9u^`QS
|
|
||||||
)Q[*o$t,<12*2T`crI-F?_PE!ZkUlML%bYPi7`Unf9l5pf9m+Sc?Q)`CB:'CP;V\mJ/hZ)(
|
|
||||||
dAIU2]K\2$3bk007IK+At`eE4Siq=s_uDnT8X@PU`s0r:_\qWb-8K@k@VY1nsX4fU[?B:jT
|
|
||||||
aoADO"V94IW$70Ab181NGJ4i_h;B%Q4S<fJ<4h$tDGNt2%'br%j$ER@76?aqMNp*Q59l-du
|
|
||||||
^(fhnjjhm^%2q(M*kY"(*g/1UL/+:#Bl@;Jp._Ek<8DIp2f.-nk1<u7H`=Dgf9U[cX@5dI#
|
|
||||||
qZlacr+FA9*G<^i:rUAUe$WA6\cS*cA7T1V-^oc?1J^iGOD!h<`Z>+V*0Wk/ToaPAO^$!qe
|
|
||||||
4ZgV;t:L621!$X]r9#).1+S?Fb*q][tRI'e31EGm19<99ff8'hZhNAO9#n!12X%QMT!!+!!
|
|
||||||
=[^u4"fNutPg>-VPUjBmK)ltkKllTY$]`0NH$g,(<d:ci@?W0-_1qG=B/p6t^+-%D+/hbjt
|
|
||||||
*3b7)_BoCE99?XsLetT"`KU)rkBW3b\V#l0?E(ioIF)u-DTRi4q]%h/tnDW*=55!E(VS!0\
|
|
||||||
9:")aORBSb9l-g.rr1K^\7YX!P>@u]d>*&<`>>qkro9&(b)A"2;KqTdD;K&BM\7=.aLhT*U
|
|
||||||
8?"cQ3npOWA:0D!e<qJCJ,E(oX3:W'4pdraceX,D9.e^g>c8<?JUh^iL+>MdGE6+&L4YQ0X
|
|
||||||
7J>G&r"Ws8D\g?dXY/<iqhaepmMW(RagT>O%M+>>0AmD,R0#&Xc_9>-q7scr-P?/QF.);ug
|
|
||||||
kDVRP&QV+T:==0H8_T(D-k^Nf:CbhR;EC5j,h9R.4"<N;k.TjN<J<I4i^>O'S/6`k^Sc1^t
|
|
||||||
rT1cqn%ooGu(%&.'r:A5ij3+p]p$:5!pKH;1n])`<Gm19<99ff8'hZhNAO9#n!10A5;P/@-
|
|
||||||
aThcHUIL5Hh9rQ<8'sd2%j!iNgphY$k&'"i4Y\\=@^2:X2pi)BkP"Ps:ReX5h0Za0qtk/i?
|
|
||||||
t)e%oCLEPb22K2pS8]bC1qPaLECu,).1+SDV_nS][tRIcTLfXbU['Q>,k80WDJ24.MGu8!4
|
|
||||||
W0fQ>5%/XD-/^L8HEWi60BieU9Vq?soZ$+==Nrh0VWES!TJ.oS`QB[;+7?hKnA1SRog-DlG
|
|
||||||
HG1$608[P7#glitj8AO9%D'!tW+cr'n[,rfs=SMtJYmZLoNTrYbfP*0pr&fr*s4c"qH2'aG
|
|
||||||
8H`4f8$ig"^O5>&dAB>J+QW1kX++C0%GER.eQ>``M:7TZP60Qt+U]"O!ET>'\]E6ZYV94IW
|
|
||||||
$70Ab181NGJ4jkDQ>5KeQdO4.P$9[34iG$\pM(4J@S>5l8iV>"]]<D"ioT9u]k`e'ig+M^R
|
|
||||||
@0JS^KY'PBT^LaSI-rK-F?`#5tdIL/JS7jJhsmcF6Ch_cV9cjICeK?`f(e1]9TEuYA+SW@S
|
|
||||||
?[kcTcR8ZY@l8ah:_dnDM-oH["c).@\AEDlH'W$5KoQnb)R_H%sV!Q7<PO.[6U&b(Q&f!%u
|
|
||||||
*U>H1N6I!P,DFm[m_EYGQZ\(9D([;+66#;NK[k2k^hhT\VKCUp!:-8[PYHe3q]F6D7>^*tZ
|
|
||||||
,dn`3Y*i+)Qju1Q4g!EW.6;*"FZrEI?;?=QZ3-e/6e>SN'oZEFLQ]mVCoD#;aWOeA!<NB03
|
|
||||||
j-\IsKt;EmC6/)_^]3-P>uiI!+[LJ,KE_l(fK?ks/TnjZ!SW0j-rD0K3SEOd3Ybhu9PCD%J
|
|
||||||
sIl"=t0N^"=J,eUIL6k/N'S1YI8`Sfs>>WN^%7+,i*H^>H1\aG1CG$DJj@^naSO+[6bXe7J
|
|
||||||
HD\@df=!5Ao6NVR4j/L^<B6"EESV2FD+E99ff8'hZhNAO9#n!12X)/N#.5::Dm$G^.k!G[=
|
|
||||||
_5Rr?$?49!?c-Zt3mD5gQ!"EWta[CW\Ze#&+AH`^P>/mWSnm]3P*Z>FPZ>&$Z%9$sA%[E!R
|
|
||||||
lq<'Oi1MrVW;k^&1KU)rkBW3b\V#l0?E:T;E]_q?D\ts#`RPd!^4CcA>h2t.l0f%8PmG#%h
|
|
||||||
.8ls4<`YO&M.L4.PV-6FHU'MK[k1gmfW`uMrVl]_\hC\J4553QDG!P:55F7Qh+<VD0uAY_3
|
|
||||||
ZD8&9PCD%JsIl"=t0N^"Qs^&'.6Q)m0dAV;GpDo)E'<)Z!=h[\g("A3n;;bZ*CRF6g`U8bP
|
|
||||||
:_@FmGndTU>c,UIVH?CM/`mP>e;M(#?R(>.*Xl9:)_#goQf&B?hLQ)&=Z!AEhO=f"V41KpF
|
|
||||||
2%=t5c0V94IW$32]pq-0ktT=Vd>'L)Nkj,Ap*K4A6&I_Bplg:CdOm2@OjVb`r9*UW0r^G`g
|
|
||||||
XHhQgR*Di\@]m<pgSFL$YKV+m/OhH,/[F[$9\7!k.B!p-q['V3PGX?V/,tjP/[;(t$YCX$Q
|
|
||||||
V94IW$70Ab181NGJ4jk\Q7D\+qALe?s7jW!Y$JZ:450N%kML^^>pBF]*BM^.$r^)'h;$em7
|
|
||||||
k7iSn:hAkN:41BrJb`BjH2sPN#?-sNK,Z!^-$Q'<!V<=8Tb!1T75M8hGpOQ`Msa!XHr^LiN
|
|
||||||
l9!pM[eAk/NB"2SB`QV5L4E?G(O=\okI[\3*rp9PCD%JsIl"=t0N^"IEf$U'!UNbVM^<6`!
|
|
||||||
D?B$Qnqrqll=&WL2@PUTBkootT4b*=Jie^I!f=0JbgAr.-Hr;HR'hK:1m-:S\R,?):hj$SP
|
|
||||||
0q=DosNJsBnQF:MV-6F>%qXs0d]=WtCT/1,?nNAbKjN3Spm[C)*c'gLo^OCTSG..+3\[f8^
|
|
||||||
^EPVn;FQl%I9c4]O$32=f</DSUSIGOnoRA;40j)!hJqSq2/1M"n])^f5MiMH2hSFl*A(8<Z
|
|
||||||
rAG>99ff8'`_Kj9=.YA4?VD,?RU$^F-s(6\+]Fb'BO#kb*B;GcQ58tGe8.db*FVpI$"0qk?
|
|
||||||
Bg]k09A7**IBU[VacV]"2Lu)H!"^`pD6VQgkC>);N-IUOW=C@eTs,!uELj0Q#ONZ"(fa*BL
|
|
||||||
QOn(nKm2QTr]gASe[rR\g`-$Oa<-5tu-n%</\Y*CVF\n0'NhVR,KV40PjmVfl=2K@_EZ'th
|
|
||||||
#%d_W?b?Jnu-'#V*+N@WcY]/PfX(Ec9f(m,e+,H9;f@P5pUe)^Q+Z!cVS1nBgYJ:(jY@#$[
|
|
||||||
/R$Z*=nDV3#hQ7ehgR5d2Hm+SBW4g[Q7<PO.KHs]=)"X#LCP?+XUI*$D91GqN>st,L(.jH6
|
|
||||||
ocP>jb4LW0R`EXf;r+2M'HN*A&jTmqWO[afXnauePZQj-9,C6jiWjpdu1;cQ7<PO.[6U&b(
|
|
||||||
Q&f!%u*A>&&A0qHImOjabKMZXuoN^1MWTe>XW\MHI9[8sLmj%N?3#BB82PP$WJ!-(BpOX<g
|
|
||||||
N*)#mRA.BIBc2fIQ#p!m+a0X8ff0AG_[ej`;t#qZlacr+FA9*G<^i'K"q3-44U[;+7Y=r&S
|
|
||||||
gXD%4-KK=;CB[sOTqs6*`_ld=ZqN48hZ.&^/k3hYTnCt7GoCr"2^%%>DXDOq'6:/PqcTZ.5
|
|
||||||
M+'j%g#M2E78&mP/JUn);Ir0f"TXnI=tTEN>JIIkrqYaEe.eo^W?QDmg[jUS)gQhQ*W>j-1
|
|
||||||
H=r[%3'3BB#f@0@q0B4ECmKKc+<qURW`.-9E"2-=_I2a?3^Z=Rf:/B5tdIL/JUn);Ir0f"T
|
|
||||||
XnIE\6sf>7XO*jHEA5Y6f@;ekJh3Pan3k6,j:6:f*8DOcLMEB&ji52@Bm#PMC@")`MZ9>e.
|
|
||||||
0=p?iFF>,m[SSF#M)BtoMtl-m].Qdd-]W_@**:kFu_'3Zjc\-,lLWBs?TcJZNkc2%U6)!@f
|
|
||||||
hI`fgU11b>R=0=CT:"&7hBWFTt92"mMp+BCIQmmB1&*"1U[?E+BY&rsYakiZh[CN+@(5q:`
|
|
||||||
hgRBV,U7(Br:mbcBW3b\V*YJlW_@**!8nJp[&)Up)]L<Yp6+g9@DdhsJ(XG<R56Eu[*UF1i
|
|
||||||
r?];o;2tLa2Q$*C"()U4#L`!m^_Kr/mN)XMdW%1]6Ac$l)47=Waa3+[;56g^L)#9=0Grtf<
|
|
||||||
=(AO$.+7grbj11M"Q<;dM_)d8FOB98+"c<12*2!Pg"kFA';aa,V13St<oZ(UpC\PUKD'D;2
|
|
||||||
MMr\i4T#7hmRm^qr1Pq2UE$&E%=1O+:p]]_sCpQBQ@GCT5/2o#Clq_`0?jQ5Kk[F_8e03sV
|
|
||||||
[4j'*EDtDiA-G!aD\okth=L;a=;Gr[71DF,;jN*I+lI<(aDPB#'o[6B>IJ).G\T>/#Rql*4
|
|
||||||
<12*2T`crI-F?_PE!aY.ak&B&pA7%o'2o>M%dquSUIK5:^#8_LT,51KcC?mQ4DVqpU&aW=^
|
|
||||||
HXD+Y\2:R*ZcBk^AG(s-DJ(0D;*L(nc/CENsQIHZu=k$Dh%YRp8rk;HKqI?5Q"?b^WDZe7n
|
|
||||||
#kCV59S8!W1!`bn]jBp%<1W\8dc`<OAB$;lj(UEH"/=kTb(pJ,]9,d*U-La,W0QI@iK=+t+
|
|
||||||
k<CY,_m^]&PI11`:S-n=gmDnX]3F6?Dq7R]d9?Fb*qhK(K)Q7<PO.[6U&b(Q&f!)Ot)4oO<
|
|
||||||
TKBq*j>I%d2=BO5(V+\cl+$+Kl,9oSKeElV_`JXs2*8%T1O4`Reldq&ELl[Tm8kN"STG\DS
|
|
||||||
AS!/5,`"SreQ(t,peUG+7un]+s5UM&f::pR_)H8e&8.H!fVVB4`$D+QUZ:@ncC[=nR[U7&C
|
|
||||||
(Ed,PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P
|
|
||||||
=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G
|
|
||||||
:qE,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff
|
|
||||||
8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.)
|
|
||||||
;ucmu-V$gp#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<
|
|
||||||
12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);I
|
|
||||||
r0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%1
|
|
||||||
90PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4
|
|
||||||
F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:q
|
|
||||||
E,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'
|
|
||||||
hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);u
|
|
||||||
cmu-V$gp#qZlacr+FA9*G;3Fm7>NjQ'k%ZN/nhZrEI?;P=4F<@5(P!,t@E)&_nWqsGDA]TJ
|
|
||||||
GCUj=Wnm#IA]'3ZlMTV]eaQ3mUEa'u;qkg6$M/N%=p4EKYDl59W,03YALBW4g[Q7<PO.KHu
|
|
||||||
K@Ddg7]$%G+5'uYK1"DHh?q7S'RF"j*">*V#Zr@$E/W1Du/mPo*U&V0@q==FVm8H/*!;8`P
|
|
||||||
PmK#W9$gII6;%I^(\5TgIm!SkUP0bb9URZj[V\r+5lc'o99ff8'hZhNAO9#n!*=1>r;"L#.
|
|
||||||
mL84hH$pmaiMOoe^FY/5$Fs[BW4g[Q7<PO.KHu3['[2!hKVD_U>GV8cTeJ%.0/te;Ir0fKb
|
|
||||||
CalRF"h4_"h+aQ8WU6:f2cFMj>h+=t5c0V94IWMYo%h4oNa$6[SOn=gr9SA7VM2cY_FFM>q
|
|
||||||
nmjN6cTCt5ioN#FZpTPd3kp%;<J9`XlR99ff8'hZhNAO9$Y5'-8R`MH4op?U>6If9,h4S+N
|
|
||||||
OP2>$N]mBA:%3%4lhnT2C"Ug>45H]>#^k7>qL:Xq+Bq3E,ruF=Q]]s24YTm>O9PCD%JsIl"
|
|
||||||
=t9)uoB4FqQnY4?]mBE;Tu4AI'e4=hcsb4i3B(j2:q]63Ir4)W]m0),g(ebYUe.Sa$,F8gW
|
|
||||||
A:0D64$hq9PCDEFaNiKC#?XQd@s'H/uSFo;5-J%Q7\l+U/^S$$G'06:6dJ>?K59B;PZj&E3
|
|
||||||
KGAZ$Q*.0k84Fl-^k=3niG[")pJ.W_@**:kFu_'3Zkj='T"ckF[6A@QD-ZHgeYg""9j88kM
|
|
||||||
_Cg9n==C.LmOl.\p+9O,&Eh>$O#]6<Qkh?&a&rqP:g?+G!Pl!":`Mj>h+=t5c0V94IW$<NI
|
|
||||||
`T&-YX5BD=(WaYJZaf>(P"\rB1hA9OHTlF6O.opK.OsQuD[r1$5g2@4".\Hnr<@5(P-p^Lk
|
|
||||||
#qZlE-S@#Hq\Mr'gV%sClCCCqo>;)'BUk:*M\hG1Lp4pChgG#imC*0L'i9LJ.MGu8Pb=kqK
|
|
||||||
U)ts&f)6`Z=HO*4/e1+?@#39:8>U]N/Z7G-cK:tmFnskg,(ArE)*c>RF"j*">*V#ZrFPs=g
|
|
||||||
M_N]=XQd61k[+2GEdmUVP!rc0aB$qZBX87j!/$_hJWogGCJsE)*c>RF"j*">*V#ZrFOBIt)
|
|
||||||
t87n23bfO@06K'HW3!TiM-GL$Ru\od0W4*K8!UU4"93RL`96;*"FZrEI?;W/6T6:0``Wk5l
|
|
||||||
iM%V,9qN8@3l`/fa'PP>!_08(-:o6pS?+Y:5H],71^cBe?AO9%D'!tW+cr/j#eui:o_sMh?
|
|
||||||
+nb?o(ccWtqXs/MT0Ag8RsSe`o^qdN7urQ-IDUXD?[r#sN>aYq2@+O$KlYA&/UQQ@8'7)I[
|
|
||||||
t"F,#AfEd$90D:W_@**:kFu_'3ZlUgk?+PSppNMX8;)\r6PDeS2p2\N>omHEoP#oET>(;rU
|
|
||||||
56Nq_tsX)IL4+fm^O;(pnGOf#*7R4(_^(<5:NA;Ir0fKbCalRF"jjbUaN&_hJV[pXAEXX8i
|
|
||||||
1rmkS)]Fk,*qpNA3-d\M_&3s)o!=t8I#BW3b\V*YJlW_@**E+Un<bV3@#^\dH2N/S0D[[W_
|
|
||||||
S3bHSQ<oYTYBW6N'U8?"cQ3npOWA:0D_J(;D-^QJnhFKkRGB]ZBHa`58!r2jK'lZpT<12*2
|
|
||||||
T`crI-F?`3XT8M.(oaH&MA04#BT_T%)O6ncIc/"mLkpk[TV0Dj-Vp0fBuZ)L9:%9e]6A0c8
|
|
||||||
rD?5=Y,kSf<1Z.I6&Mp6-L]'->))FFW35TfX#5:OX!BEdaDY1ccO:cO,k)EX^Ah,.On'g_p
|
|
||||||
P5L1G^i3R_0*tm&ZSuY$JZXc>MCF:&M>bVqR!`,;1_=jN3U$euY8sCY"_!;Z["%VG3Nq()F
|
|
||||||
>ga,UND/ss@5-Z>te=]pLj+'uBlfl+Y(2IXIUWDf^PGEDU'qtBDM:/4hIX5!*6ZY.UAdn.3
|
|
||||||
g`EBQ^djB'(mG>N\r:@I?kJTYc27IpCA7WWu`emi6p?^Jl6lJ:=r9_sIq=<Y,IlH]R-lUC$
|
|
||||||
3?p-X@dE%+M'FFW^0nd/X]r8l=39<g^5$r;Knb>.H[C8@p"(d"[f#3M:[6H/oBE0F[Vjp4H
|
|
||||||
hZr\"q;4.f]LGJ*C$faTr#nbQ3npOWA:0D_Dto8HM,ZU+#VJE7u\F`HEoTM$<A^#qXj%Dg2
|
|
||||||
!l,/mMLg?XA3WjdnV^Y$/6umQ2'9K4n\Cr:*9rE:Df%K>"q155aoflIDpO.oo@@V(Q,h]SD
|
|
||||||
8tGeqAacH'%(gpeNYT3]'PIH?_q*dF#`2`J4gPq+e1g2tQ+0uo=s\)71V3,p-)4T*f<Ihe/
|
|
||||||
]fW\f/RPhLF8L,W`Z!p/l-[gAi7+]N*cF2Wc*_*N.l-lOhCY%j/-_A\PWgK]^Vl)M=f<8O?
|
|
||||||
A\5N*<P4:VX<c]#j5]0Lq;mqR557D'^kng5hEg-47n,u%muWD#N[UJb5s]_0GD[1iY5P)O2
|
|
||||||
qJEj][4B@qga1sEAlNbD@[su%8fd;[7._A[3+WZrnj_UX#=nQ>dW+rHhWt/Y#A4rk005<g7
|
|
||||||
S)ZA"J/GkqBdG6F>@?Ua/mIq`qc:mHW,r9=]*)Zk(jG*e4+XO$EVgi4smo=0?X1Oae3OW_@
|
|
||||||
**:kFu_'3ZlUP?<qc=ZlWB+9,/#;_=`@N>OD0\`]P?^)X^Y<"H5<^3&V&=YgYjbl\1\L_[3
|
|
||||||
t-]=8TSO[YQ7P&+>KA3nUirccUQ'Jb%nRAcWe6TZC1M4=HogG,\V-\V#04):>k0U#%+44lH
|
|
||||||
PURi`Z\%Ct?[_UtmbPM:-YA%a:trEqXa9XCn`Rk:j_k=(gJVlBGOA_j-Bjpg]4fTdpYL8Cg
|
|
||||||
+A2r1N_j-.p&lE^)DLWHLL4X^OO+R$16HS'.m>W]i4.GWW(1)mfWk#Mg('VoX(/PHa[kM^/
|
|
||||||
d+s]2bk1WF*DhU9<34J_8W-YJ:(JABC!8D-+BkU=/J_A*3VU>Zepi=K>ISgKob!8sLn!jd0
|
|
||||||
=lgU>AF\J[e.PmK#W9$gII6;*"Gb08'dnr6VRnhKo44ibaea:O8?Z(@(\%R'C(,JAHu[d&u
|
|
||||||
9%ho]l<46UGR@-02e##hQ',0hN-oj;5q!d7n4uqgJFm@HgL"b[[4am2!M_DeXedgQ3If9+?
|
|
||||||
;,NL36UQ6K]SD8tbRBCD.FPP8:RU+@3_rCS]mB?E0>/X;h(iQa9URY)jqiWuVb`ZZ>E4IN*
|
|
||||||
AA`a`9+UE]6a.M3"rCl]8d+G<ifD<C9"ZT3-XdqgU:t,Is%edr+sE6*A:a3.0"%<IoFjt=&
|
|
||||||
8gl\AQqM=+43$U8?"cQ3npOWA:0D_?heu[`lfRiQ!$i<'A\8'1JcfN>cC\LFQ9%Y[kigRJH
|
|
||||||
XQpm<q,q`Xc9PO$i([ob1j]e-*rb*ZX<r7c/)fs\4WNZ9cb%M'dbcL'>n1]7uDiWU;\DO`/
|
|
||||||
H6E"(qC.q<[D)60dQC<u"o&Z3FR^Mem%3!msi8[+U#+7?.LM>8:O]e=-^16-=Ka)HYB>b#s
|
|
||||||
Hsl=EJqJ[tHgEIc[U-+A\VGTL_]WrM1B"Bpeui:/1F:f&;Ir0fKbCalRF"jjKY4t1F;G609
|
|
||||||
9usNGF*,(HLtnHcNN)l1o%d5qrZu#fJY%f[a[XQ9''8q]k-W!@[BN!ZXIM6h,8/)'u7b!C0
|
|
||||||
FeEZY%J+SRI?f-,RR;D4$:QQ?qoM1"1Uk?EID=KS0II?4@.H<2!pKRV(BM7pI@Q]tM[]hQU
|
|
||||||
G+N)(QX41fRscK7ke>Z$-*Jo#d"Q7lVE^b<[M&6C7.s'ieM>,k80WDJ24.MGu8S5!$bQBAr
|
|
||||||
VmaS5"lC$MP@^5Rie&U8*d+t-IBk#i1BC4MQmA+^[_D^1EehJbad&kXFcC-W6L;S"l)`MZI
|
|
||||||
s8MohQsm7/`Ki)[B'juq[a]a&p6k\K^q3UK>4pCE;qAZ$NbPIZX]i-nMpKY;2a@)q"4QGAI
|
|
||||||
J\2?'1bnpDqqk-kn>IelY6tN*,P!M,#5%+*dP]rajdCpe(U4WJsIl"=t5c0V94IW$>6\^gG
|
|
||||||
U;BK[#uFX.JRhHM6]>qJtd@/R,ZjiCe>Hg/<X&SpJQ5cY>MBV&$YMEh5:4VR;3>DIQUaVi#
|
|
||||||
ei=JGic`ue>V8RY8OO,oY*;R<gc[;0"DrCVjQ<'g.<R9PH'MJC%GVKA(Q<Qa6t3-'(]Rl>8
|
|
||||||
'q?647>-t5.Qi4"eXI!:CfcDs>o('*Z-qU,/b(Q&f-"s85Tr#WZN#=E@GEG_)>WLtmrnqYR
|
|
||||||
a,d^MEp.rS#7e+aDQ__lL$md/>ICetCoN,+rC1qod\YM9OkW8MC!iZ/]k@,W$SR;gCj]9`>
|
|
||||||
3_qWQ`=&dB)8Cnnb(L@>BPlEfi!MA1M0`H]fX0Ce>cM!HVCD1P9pLsd&gM2HVE@8'e31mHM
|
|
||||||
+;Sq#gg'fP)7f-;Cf50M/"8b(Q&f-"s85Tr#WZ(g1XRqQ&t<fsu1%BIe70&`(@Lc-=tg_7F
|
|
||||||
_]/RH*"<F=F#E(_d)lRUCmUK3sAs'b<PC_SI)Zr3_m0>@4U_++ghn^C8u)5!1WQ7>Lm[5U$
|
|
||||||
njH2rIe>Q6PC/s*Qr8(/\IB:!pO+U[%dn`3!P*0:%H?U3RFI*HT=__IK$Pk:tC05JlXB;a%
|
|
||||||
316n^&\>fnB?89>1]E^^cTLem_hJW>aBcE$mG,7YVl+0["q=mep!niR@DM#0P=_LFb(Q&f-
|
|
||||||
"s85Tr#WZ<3KV6G>Vf?%:JQH,9rsqc'ej'6\PmaY#hg`kg?.A/R#MugU8+aFt?q1<3-1+Zt
|
|
||||||
N=26j\Ku<3BKZWlNTP[T"t3Z.f6AUQ<.bk*mM]LA:ZCc^H`WpYUI-Z=M(Q8X'#Ckp,dmY$/
|
|
||||||
5Jp$:3_+<Y(N_M-1"0+SBs)E)D6rVH2Hp\LRNLDo&Q,:up^Cn!>"]Y2"tT$E]X,:kB^c'gM
|
|
||||||
!R6>idA2-"r0<Z0uGepD.XAc#lG':;oVi@(A_':QJo-6bc4F[5'h&cm8FQnsUmH^sjDI`lI
|
|
||||||
DiK5m;b9Uk$k+sPPaJ$Zm@HD;*BnjQS@8]@0jVD7D;u_>eSV:ph`Dp/pn?n2iX^sV[^\ATG
|
|
||||||
PA+;X$T->`!P"o;^\V0`]R\H"G:d-j1p3J<o"lhFMj\5HVU+m2*=!Kldi1bp?^JFH*_a6MD
|
|
||||||
onVmbR3[Xa>7RMiE_HSNpXnU;<>_55F9'ic6<)fA.O'\T[A/\1AKp\?_TngV/+5FJgDX89Z
|
|
||||||
KP#5n2LD`(!W:J]l]HabsYT7?k9SaX%FT5q`"DBF\#.MGu8Pb=kqKU)tCP+.qVA@Z:==7,@
|
|
||||||
sf@SWqi_$:a]63F_k006KN?]4qU(81/DPHkCT:p-qmEq\amN<)R&QV&.7MJ!M5JOO;cTZ/1
|
|
||||||
nUDGSp"@MA^MJ:1F^(kJ-Q=$q*"M")dh)2jp`tQJ%3+Sm.GbH,9&I:,o3m9-V>g,OdiX);E
|
|
||||||
S[>&qsHOu'@Uft2Vc_QgXW?+`Bho-L%=?Kc^m:(UL5Dr-hloV96VB7pYUHZ3&fZZqYg0GlO
|
|
||||||
G*Ke%0\f%,M6DWjDZ->JGplqqqEkAE6(d*cSc5k>'hf;c6N3qn6:IG0`>GS<69ZjK@k/![t
|
|
||||||
3-g7Qu&Y[Bc-EohCuC>HJ/mZ_f(>`BXZNZL?`43el+D)d"Bph-4Ip76Ea1&b,6U8?"cQ3np
|
|
||||||
OWA:0D_Ps%hIG2bW-R0j'oh>DOb*=KR9:+5#F30Rk=05Y;AAF0D2]DJtg`qkBP*hVME0@**
|
|
||||||
<8k]J$^E2Ad[cjUZh*>(1\g:9T76W.G<j">LORK_WOI^6rJuI+_oN7YGiFQqf<,u2<h'T0"
|
|
||||||
,_.H1,@;!B\U"7f.F"31kQkrFaQh>EbFa*?@#1J*/oh7HLtn,d2FiT?uU"\[+*iNEcO3am&
|
|
||||||
3!)_5\$-04)<DaI$P^QF5\+cUL)A&/,`;k2rPSoqFm5cC[>Ya;/8q@s*]EOWm4Nrqbq=h-1
|
|
||||||
=-C$YL,#P$076T4k8.;5\9Tqt'^>,k80WGj=k[VX>sDE[U81TIAK^BP2iX?0jq68M_&DVMC
|
|
||||||
(6h00TFbfAA^V@Scc"a5-h)[g4/(3$UHd2?2k2k\Bq&NC9=I?o*c#'GhBDC;,hs&FjO>W)a
|
|
||||||
XC&`Vp/$GN(LFRgSaf9@6q$66cerkc*8FGq>e-U+2;=!'.pfl5dJ0*dIf$88bA6V94\T[kJ
|
|
||||||
).^%ll0lUTfo(,n*b165`<VPlDq,R%TpGmq7*poj7BX8Vl-H\":S>\gU:tRVYcL=;56Tp&#
|
|
||||||
0$.L_iHsVq%H:b(Q&f-"s85Tr#W*)#:jq-oJ$&q-RUUC#ms-e##jGG3#<h+PgHpgG8OcAJ8
|
|
||||||
:Jd%EZ,mEn<*Yj1a5U4MUtm(`T!DhFgQhGXBbeHLmo@\[u*b!quUZ$Z4_h4a]=m;))7Fam3
|
|
||||||
=W)4caj#FQFlJD6Tc-=M5^Z5u);cB<<rd!m>%Ghf?gm7f'Z0t>oD;3Y"BH&mJe/cfih*!e[
|
|
||||||
g8[^_Q]R<%gF0i7nk3bRmGG[np6ahjeK3]&B:m`LnJ>P[dFLH]M3]V)=t5c0V94IW$E#Xlc
|
|
||||||
5bY/=2Tb%<DW5$N7=nPhKd.rB-<'Rq;?l9F9eEsDk<*=b\a=KIVlQAq/YKtAnPcBhHm'RRl
|
|
||||||
1I@ZU[Y'/mc2(jL^UFG$Oc#I:^Tf[GaTYnaZ/'^ZL"3Z,_fNJCD=d<V-I^bo&(apR!p[U@t
|
|
||||||
fuI.;oQED1;MK'mK-??tWIK0tJZX$)\$Gjo*VB5$)H5Q@gup#<rK)ujfm*LAEdf"SUqiPL;
|
|
||||||
P>e-R`K(]Z#%)*OJ%4tR,ZrAG>99ff8'i&>oZt[+0Y%GqIWLi7%[;4AhGIG,-n$[*&f[s<^
|
|
||||||
cdoO<dDEt$k-id/2fJ!<iQBkY$0cnPYYL`M#)BK_9,3&2K=+2b3d'_`4\/mc?H%d:[0Nu%_
|
|
||||||
(g02pu@FC8)CL\L[H:FCoIXL*70+*Xa4s1*QcFF,tjQR(q+PNd^cp!]&VG<V>g>WYM*Kt]=
|
|
||||||
V]fB'PD?QBnD]O+hKMda5-UV#?qcq&eu1FRIr;[ZP\?G^+JC`fJ`P=&8_6D19^66F9^[cr-
|
|
||||||
P?/QF.)<&bU;:QRF4EB(SQcHb"SDj'X.ofsUJpn@EV@Z?hJSut/8\Lgg+qsCl##OKm8McBl
|
|
||||||
Uqtk.>=K5=LK1"=qV2?M#H^Eb?Sp3U!6bb?11"miX2W(*;`/##Z,>Xab8Tt_9[T)(s<k36^
|
|
||||||
)a9-ugIE?6UcnMCj2Z9IYt%IC[;2-&R"CHUXb`RF4-%,f2VZ6mc0fEF9*ShebaI00%iI,jj
|
|
||||||
2Z<Bii>tR9#_t!j<SE<181O2$!O?&BW5r#'.-E"?1p*nhH]_1s'sBH4h=Q42f>/0-B*=6Fj
|
|
||||||
$(&]&T17;S.,>W]ab=VG402E;fY+\pKm9S8;^aqmBD>gY5qVSpU5"eJKGP+@,hEX&lKBoCR
|
|
||||||
.>o@Ua'GMPP)fi":rBqi9mCX:5:%3.?(HZ14E9s[>_c-4B_>e%$3YhHi?]WGDIDVB`--rE>
|
|
||||||
.aY/fD6US7/:pt1C,N%""+Peu^p:gllgt/]DeZ*E9XKcVg9$gII6;*"FZrEI?;W1TP:S4f%
|
|
||||||
[.sFVO&]!I5E'tLq8A+'17Pdnj+cu:G3$`,]&T17;K_GQo>rAP=>f%,j2Z:Lbk(#D)]?f$/
|
|
||||||
bS&<K=^ZE11c?_#TYsJd/J#<0/&fm-dF[<_*@e[,MbX*fhut-O$%XS>aks/$k1W,I)LgQ\q
|
|
||||||
AY1V$^5&<7)b1p?^JDK=q3[le6tJDVWm!\Ja#&?U*oaI/`s)2@lCJR]8N\p4HqcD;1rdj*,
|
|
||||||
`mGhDKQ;Wa^Mb(Q&f-"s85Tr#W*(qG!VjMtrY@cSRinlsMT[u?Hq5F^M-FUusUDng/>J/K4
|
|
||||||
B\mN=6O,l4TP[.L.?='5kP=`Objr99l?@2&sm2n:d'U&>>-RW[??F+6<h*E%3;Nm9,Zo96M
|
|
||||||
5()#FnTAbfAu&hgWMSm/Qp2]95^NY(Q>q+mf,eJds'tL\^oBHhp2(OkXKa([B^@=U\&>5%`
|
|
||||||
$:-SHP^JIJA&s/5XhrN?j#b)n%JII_2_e5"@T9^ZMEY(qsij"XI7W4m'V*+labm<]]ZM3rF
|
|
||||||
RqMhKuAm\T9(H`_P9sD1r@Zr.]>$_@n=(hd?lt6`jP"KZd!r3UL*W>U7NsAkZU3EWSl;>_&
|
|
||||||
Zn#qQgY'J(c^<2icLGFAKM_SSXL:.9X'mFehDn5bu9D+\Y5ED&HDr4$]u2/:VPgJdB"0J%/
|
|
||||||
--*(j]"R=dcJ,]8A^rORD>57-X;PZhqC'T`1W@TRjW(N*l4fCfLA?"(f-5S48+Pai_Vba94
|
|
||||||
'YAsX=K5H+/n0%*JFHHA-Vp<JgL,R6"bmL-HM=S!Nf.;EEWSl;>_&Zn#qQgY'ULI[V@Fl/(
|
|
||||||
GF(Gbl8m"C4%qJG6"U="nT@p^6@H1=A->HiIZ$$A]pASgJdAu03>;]@;/5K9-$*;XDn'eW`
|
|
||||||
@7/ZOmc]_Oi[e8P)Lj*Aj4]Z@!sp.d#mUe07nue,]XU#WFhjnmp\pLk/GcW9W_7#(qL'c'$
|
|
||||||
fUqtga;aYF>&=)$6efo@(7<1P(5!jGWaJY`E#^f'7sQ3p:mlAKd60M\F=.b+,ZVG3O,Ik0#
|
|
||||||
?O)sF*7;YG49;PB]._u82PURj4k/E5p=kZa-;Q1$l$@IauX?lWf7R6b3Vdq#U.a+=;Wm[V1
|
|
||||||
$YkeR=mF(j,DDVX0O]QP$S:TfWHt1qNfFm[YLS3(i?9?fe@0W*q!Pc_aN]q=NHcZJ99g/m.
|
|
||||||
c:@Z<DHr$^ncdGNMX@]QqbREU^BG:FE>j(7Imq)1)?]=:Tq:)H?jcB2^lKF.oiSpgnop1.W
|
|
||||||
s./I/3>Ep0!]Z1t<p01fUu;7^H'[AZ&L]jm?cI/Ci>&<k);4V)gUs$+H!@7h3Y!pok;L*%Y
|
|
||||||
uOX+7[g2mpr(THI)bW+I;VY$Al"&,5\e;f?;(!_\dl==W51/6,GQWPI#Vr^KIuG'<"RAhoJ
|
|
||||||
\i?D@,?7gXW/5J]hKnTglU:@&V^OKV#5m\l?\T29?2GM+fWS\Y*c^m9U41KM'T($BPJE^19
|
|
||||||
SXl<k\ssWX/Tq!dn\WOK/_.\R6+DWcKaUO%N#c84?ZE\^"eIl(`_n:s6[%qT?08TdkKcqAU
|
|
||||||
llPF;$:"$SA8#'(LX4_!_W]o7_<j2Vuqd*!seBL1RU;UldDV&j_n_b[VaO-&KMlDg^#H2Ao
|
|
||||||
27U/n/U.AsV+_9u0`,_ec)NlJfd@NRR"5?s,/)A1^g,Du,?!$C31,pW`Bsf,$)H>ilfOrUn
|
|
||||||
e:n)(1T=+u4%apBU6Dul7S-a6QXC.t6`SN9^u;l0tG&fA$M0(h2>eh$W$Tg%'UnB5)eYZ.$
|
|
||||||
uV1nc9l8RUJPM'TZ5Ok4%DdI/`Zd'6!*BSG?(2:(?\o-=bC'Rb0r5TMCp_E\cD.mVHUe-b\
|
|
||||||
:AXV=GMbQ5r`l;5.L[k.:11&O$a<SjJY`EHK5p&"CY,`ZXcmL"2E!Ja\$B\p,2oX<-r>HJ#
|
|
||||||
V8tfD/#CsDk:qFV+R#qm'H0;]bCCHg6=!_K%`Mc=mGkVl]'BZbimfj0==?7[FD<_[o,:)'G
|
|
||||||
Mgd2F_.b@RTQu(!)t0HX^HYKZ].PY#qr\\eMOP'e32Pp%;=4QVrC2apBU6Dul7S-a6QXC64
|
|
||||||
RCR@+q8S1o?cE5$J'C=Pqd67XQ:q-3[\YJ5b"_QkpG/6-;!Bc0'[ZuGp8lIF)EZRh;mX]r:
|
|
||||||
&Q"gk)VKU="Q?r>q@GqY-*^4tMhVS&&nKYG4PI8n]kKZs!SsPe1K\G'-;P]+f!V>L#=7>Xl
|
|
||||||
If3GFnHOX)baC7m\oc&^1FI<@B&o:cISk6.WilIsPnR7LhuYH0:11':"DQGg)0M%&042FhT
|
|
||||||
0@6GP.KX]Pq#epDhYbQg9tikD$6.SZaR6JB[K/VI7m4+JWE_O'OS.VM4F.te#6+gi<kVe4f
|
|
||||||
ZSX=PhJ+gU!iGXJJ+-p5HTW2Jq.nWRIqFf8QU#_A%7hmbPg<'+5U/9\l?*fX5L]O\:D)apB
|
|
||||||
U6Dul7S-a6QXK$9iOT4O*<IJS&G74qiT:q4.X3HBNHr)q;lP*2!Bq;rXTXc+8^QJ)g"<G$)
|
|
||||||
^TrpX;DVR4&O&Nf:(c#WXSFY`.eaU8!pF<JBYcohH0?ZG$mSm_$Otg*4NJi_<SNF<",GRbi
|
|
||||||
QIKVL3d'^5>X82[m8Y`'5p@Ks*$$%M<id_)UU4"!:dNe[a-)"MapBU6Dul7S-a6QXJinP^S
|
|
||||||
7U7#I/3@/q"X>.o$jX;e-_6Y5;$R^2fIQKDSk5cS_=Q)<G$*I4F6Wj\8d+iS!uYN,=db.rc
|
|
||||||
ktojc'3b@9TUnCpTXPN)6?Ykg6"qD+bcoCT2uZIelXGOd\.C8uR`?=gM]H(Jq>D_3gT,<GP
|
|
||||||
DH@\$`3D#*%F+,'NV$Mdc=R,u.^jTLkV\,]0e'3H_<9j4uAaYHC@2`KnWU^mqFcB0?,E-_E
|
|
||||||
Yool]gl77sLVb`p_gOZ3DX=]]erqT'oEPd>5%g6'DR54"&p$7bkPRhnJalU^4/%)Ksh7<o2
|
|
||||||
le??mNK9-%C3("AAP4%#BTR0XKNkp'8LTX^K*Mob$Qsqo?3)NAb^/!MBe8_R$9pMD33Z@BJ
|
|
||||||
Y`E#^f'7sQ3p;!Q?>Mm=LN#`Y9KGoD(8dpJH?!!,9s$B*Z#V_?/;\NKaKA*_,=jqQ@cq\T[
|
|
||||||
!pKW`1G+Y>&?9GTkiD@IW3kdOJ3!Wr%_l0g_jV;&<EY`quH:;moYkBmrR4*%@RD7RBF.W&*
|
|
||||||
74=BMM'J?#,!E?]>X]Y_?tfs7G/97j"_#qQg1!L>2_YZ,#!&4[rP7NI+mqssUHSiqG1'M2R
|
|
||||||
WL+mi>>\T2PgY5XGB3ad-Q7B5L'Sn@J\"&FpEK_Jor)'s9E_:\)H:f\c5*I?i(+ue9oB&Y^
|
|
||||||
MoFA!pu."lk\-g$-l,ai<.BCIlC/B2o&T?7p6JMu,LgYsZ5NVG=9Vj5A;P9WW`QBAb^*ZrE
|
|
||||||
WSl;>_&Zn#qQgY/=SP7U5j_$0JbM+EH*^^L%!m3U]-L>042H&Dr6Fh3?TGpA^8C:2f>k,#"
|
|
||||||
t4a>On,a9e'/C,ht.`hnFNgVP[%T6>`W?j2Sa]N-a<BF'c\:3:#2":Ycu.l'0nl=A7CG$,?
|
|
||||||
H4)g1VWCtV_"f-21S*2j$?X]dS-,XeI1<$a(H9R)FER8^AI"dUVcYZ/CA=K7n,;LurQOH<;
|
|
||||||
@=uGRV.#%$@Z]>t[7_sY(E,b<@7>pTjV-G./QBp%S>.8B$C'kOs7-<Xoe7O40q.I\O@Au"t
|
|
||||||
,7nW%DO+,/E+,%7rTr2nQH?s(FQbtB!=>UFjSJQ8eCms*>,Ba285n$_AQ/54=AbHqV/G/&R
|
|
||||||
:Yh=?+O!%OXpV>#3O'nMcrBpVG3h[U/\-Y<J9g63HF17k/7P0<&oN+!\V8djTLkV9UQ8)0!
|
|
||||||
L;t;lNs.lMgbZj_U%f3QNUsjN*H49>K36g'[jC;(%[H\od2R\7S$);Guu?]ij'"?ORO4R[/
|
|
||||||
?snm/hK8Q9PeNfG[R+oB+uD;2Lq[RU&<J,\KolRSu7q1OES:^\dVZD:C5NeN1@'e*%6\j`=
|
|
||||||
qe##itNK$qKU[4AXV%WHrY/$OobEmI3(+iG+Vu$/V:G%+db:gWCI/-["!`VU5)X=t\o,=qP
|
|
||||||
=K7n,;?7SAWH&&5"X_NN&L1D45\[3!YMSQpWriG+fsd-+ODs7"%:XDCT'Bih(5/Uh93$K>n
|
|
||||||
]1P$mtI5<#RG,$^-,,)`5gP\BS3-nUg(<G/CU5?qXeLki5$rRR[KSK&&MIuY=sKagrbm4M9
|
|
||||||
7Q]S4[a>n?-'/\od0lET0BkT4M._Z:U6,TqS10VT;ndk007bkKaP6c.ojN)>?Vfg9hG33[A
|
|
||||||
-rb1Eh(4$#D\CY%jnOX$SaB]>>Hbk;*b$E[OA^3B%;W&d:468i]7FR@d>J\QL(ll#K8LD7J
|
|
||||||
ujr5Mf&fqjMLkn$0i'?bf]a"ub`;Z`QgU?qRq2*p.>0+a<]2ke&)*.)B"dUVcYZ/CA=K7n,
|
|
||||||
;LsZ<*ZeX_7Ld@G=B`"CcX*YQXeA+;g=b0HhS#BeQ-!.ombPKVY$<.MR>c8IDVVa0_#eCfl
|
|
||||||
fQH](G&ZBZZ`;9IQi#GJE<1X6N6oY7un]c$HQnphVR,<Vb^rN(GuA^pE*=bV.Kp//TM>_,E
|
|
||||||
hIb3b!eUc^l.5AdnPK))uT.W;]t'=g?RMLA+*%af(]!-^fC"6EZR-[r8mh\_5]jeu`.8Fd]
|
|
||||||
$irqJi[@>&(,L9X]XZ=HO9cl'TF+Vd1jrd;bH*W>m0s7Y2cZ[MXE5[\Z/o!2iMZL86s##hE
|
|
||||||
p4ad%/^V>81D3FpUW:ATLCBk7bOEUFmicLo<L$;fVA7T6Ho&\R!hJ^1-[VF>BEX@6gCTaJ/
|
|
||||||
,\$DdNusuSF(U=G/Q1HJS2G)JE"+@6Au1Y<:EJMbY-+pg*^.[4$O>*/:J]=(gUBtK33dJ``
|
|
||||||
i4m5e?3)HEOWm)`/ru8A"&mV]=YZgcXm#^.WKHJSN:m+m`Y(6s":`_3P\PS"I9D)!)&Rj==
|
|
||||||
Q"QaJas,-B!2SbhU)7@o*N.48%pkn'Iaqa,V/Z2/;d>GMe8R3"[--3tR_#6D6`".TNKJZ!t
|
|
||||||
\"q=9C@Ck2Wk`;XNCiPUGF7>jd:1OoE%5Q:Ff]mB?T[r+p!K:GKns".*B6tUrKrV,3-4Vh\
|
|
||||||
US.Sb!\T6fQC##R[Rt_@k<iJuNm)a@!5WhngMh_c_P-?IBI6#ct(<LaAeseO4<i8\5Z8]k`
|
|
||||||
aR&B7I[OU?Q:`::/n*?Doda%B<6^jhM2er[fs3nr#%Z<tL!9=Y?+Y7p/g*8=S=BZoC*;,3K
|
|
||||||
aJR[eud]t$`!uI%?d_HHbc5;a7p'7]#PQ,<C>8\c^m9N:T?oT7sfK*r;?04eG@;O_/t>E!g
|
|
||||||
Y;`YZ/CA=K7n,;Lp/SHhONDG>JDt^ns<f)]p1%l`\&AVk3J@bCBHb;:OHTV5heOFmI!>Q`t
|
|
||||||
Dc5#JLh98;QUgpA=Q,uG2.=K#$RPEShr/Uiu)N>mf0'q2@+K!i"oE]Y^5eZ)WE(-jKJ`^`X
|
|
||||||
3o'G$cQ6"uKkkN\hP:M[7G_ZbLL(>@iCXt$u4$*ZP#P,pr5EKA<@).<Tc's2_e\;IO/F,n/
|
|
||||||
99g/m.c:@Z<DHr$5V$*NF=H6g1rb+:"\+fC8n:7frQ^rq@WrhD<E6VPkp!RBWVlA65=VU@q
|
|
||||||
Xs/`$ZgB1;mqFU7un!q0eP)]7>hr(DDWU!*[5>3+g"j]9MA-4"q?gO:]H'8R2O3/eSEa;;5
|
|
||||||
o)Q*&qnfAV]pBdmrdtIer:V;9)3kYZ*W6V#i9b;WS%I$8f]ggUBVb^SV^(o?TOKr`n"Eo&n
|
|
||||||
>KqXeJ.q[Jjk*fV'qqY^/qfZp?\N/;,*)k!p+#G"Ir@Udf`9bja\S:oCOP!.L0F__.>qGjJ
|
|
||||||
XR&*5%QC@__VB^+>.^u&LLO]@&Q_fE_99uMU5Uq[-/Rk\InV7-#Eqo-4Z,]B^YZ*W6V#i9b
|
|
||||||
;WS%I$FE5u:f+cImF32+Un^81$B2a7]Qis5V-d2[(+jjk_?FX8%@4",N>jgB0O\Zb(+rk53
|
|
||||||
(p8.,Y[f&Gl%%]qrCURg:)"HZ;DgG*BSFDC85-)e5ndOZIIqg'0E7jq-1=GAZW`$ff<Wh-'
|
|
||||||
d]O^H],\:S0hMr@EB#?G.U(+IU#CjTLkV\,]0e'3Ha2*(`^nldi0_*i/'D,V=<4jE^Xr/Rs
|
|
||||||
&L+X)e[e$/Gm:Hus(C(Q]2#!I;)Ll.'&gWdr%HhOPn8[R,Y1rP>X\o^MO-6c<O/6S-UUBZ@
|
|
||||||
ehVMR%drBJOAD[LCZIIqg9E.\R1*q'tB;LtVFXh_I[r1#2=j0DT%3%4$(3'3HEL!u(K$5Sj
|
|
||||||
,Qg])'3HaB!\@>H@&ZDd":#0m))EUXhRokK7e5`g5A\uVf<8P>Wf7Fnh;-mcf&2W]Y$ANYR
|
|
||||||
$6X.0EGR\b!M+>qbKlOKS>*lj[ia"6U?2!nOL]$H$OZaAK:&Dod#$4IU;P_HVt\@E[5uLR^
|
|
||||||
:KX4?YimIJVRDdSa$FdF$A&[\Lk@\Nk]Ie0eJ_baG7$G#N,*Wg26$aHQal.OVH"^]di?SA8
|
|
||||||
$RV?mY>,\*NGV+N0u%O#`B[VacY)`P&R>EBa%rr0@7[`!55f.^aV&32tKV?0Cb$ZXAm#7`S
|
|
||||||
+ekGkb^'Y`$:S0gVc<3Hp`JYPML(.XbAQ5%]KiTMDSs5P^aN-r:-HVZd]6sGFe##k:o]_Rl
|
|
||||||
9qORqp5_H;:h3W=b*FXVcThGcP%BVVC@[]MMmmW^?F+6<q>6-kH?(O":kOgiO,],.3=4g!O
|
|
||||||
R<'TB_C/kF&YeLhnHcJ>>,:4-dS;CPAr#k21VOG#qQg1!L>2_YZ.7taEWXP?2j]d0554qV*
|
|
||||||
[B&X]r8/Rl1ET#:idnnRr.4#F;4\;Q3^!g4BJ97*Y6GN4Z]K)aRN->Uc\h=0Gp:2b74^0d?
|
|
||||||
c)$kR<?W%gq,<(fqCkQ_V>&-o1@]fPhBOPt3FeudQ-?QTjl+gtb+q"XBSMi5cNJ,Un5%>u#
|
|
||||||
UDIHs.J,]B;kKagX<2uaEJ:KY$k1$A/LTq7D1UHrNl]Y3Ec'pYUP*4mBRN0e%oB+T(=&818
|
|
||||||
X=;>Qo]ah;p$1*%mbK*H$F-)W]QpjQBt7j#)@8Q1[r.aUZd-kA&t7&Ng%1O_>oGkP["O:l.
|
|
||||||
TWWAY"Dbsf<DJ53AlJEL6>c&V5:#AVoO]0.:R145(!"iP:'.\LPI['OkdaoD>ZWuq2\F3j,
|
|
||||||
aqXHhZsh4I!/oj9&&?'3HaB!\@>H@&ZD(q"jjTfs>>6PUSbAoOu[Ka`lWjQZ8Of2fE"HUs5
|
|
||||||
Af-SdQ.r-0u+4EKYD^V@P;Kl,YWp$]ZqDV)$30dBRuTgFG?(+`RnABCiOWtHKtQ;*+P@\57
|
|
||||||
Wl!V!M<'Ga,FQ15q"Uc*uf[u9oH,kpc]63Gj^OL`;>?`I&VfV%H.JWnA=Q8B$n(bI[G4!ui
|
|
||||||
'./f\Empm[M6-[NKpjl7P5gl=3TRps1M.'C,uQ48=]5(jq=u$nG`ZV!Y[PG*%MP[RfW\eB(
|
|
||||||
+hRhkWjN7e>Q6)NfI2D>Z"=Z;^%`Qp?^HY99t\=P0K-Veui:?AT.MEo?X4ep?gW/mbN6<Ue
|
|
||||||
/M,DVr1QjlJdl`Q-#3f</DtprH&+gMahaB[EDmjiV,c<N9#Tr+GTXOM*Srlr\9PSN:nNgoh
|
|
||||||
DF+>GUubKF]"qXp%":[Zc6(V'Y"Y?sNUn<$p!\Qojl,q!cV.<PFYC&'WJ97+R2%HJFiVQ8C
|
|
||||||
VB5cA&R=g-EW8HL_"-tDaYZ/CA=K7n,;F)(LN,M'M6=dgg#tuEIQ3mW=2c3FLkK]X)\$riT
|
|
||||||
[VjWq<NTH48sLlkp']+Bq=Bq$;1eR`UIL7>p?fJ:n`%HA&,Z1unLj`hJ>LBp//<+)Q7=8d;
|
|
||||||
uhH?J>E;IF9sKu:11&O$a<SjJY`DJoE6][!2)tmWH&&5"^HSSapBU6!2(]IW;lp(!_\dl==
|
|
||||||
W51/6,GQW;lo]!D<RrkRq!tSA8#'(LX4_!_W[skQt?@!'lmd;WS%I$Fg(/PnR7L!'j>q;?6
|
|
||||||
d/"I:MbYZ/CA=K7n,;?6cD!gX/ncm>nq3J"".0#1BH"I9ApckEW_!.Z\QV90)q'lX2>.OVH
|
|
||||||
"!.^YkV#gX=#qT(O@&\YaYZ*W6V#gYh"=t8fTM&[lEWSl;>_&Zn#qQekTI4-H!!$:+99g/m
|
|
||||||
.c:@Z<DHr$!!#._9*G=Z&m20(^et1L@&\/J9*G=Z$!8YW5aT8ajTLkV\,]0e'3H^a5Yo0n!
|
|
||||||
<B\6Q7=8d<58Z>Wgpk&!<@G_f@RLD+@CkliE[Z.!/LiF.OVH"^]di?SA8#'z9H707SA8#'(
|
|
||||||
LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!!Z;Q7=8d<5
|
|
||||||
8Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.=c-#qQg1!L
|
|
||||||
>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/D#WH&&5"^H
|
|
||||||
SSapBU6z^r1f#apBU6Dul7S-a6PMz'*jgQ-a6Rc"^%dp^et15!!!!m**B52^et1L@&\/J9*
|
|
||||||
G:q!!"]m@&\/J9*JRNV90)q'`\46!5QO(V90)q'lX2>.OVH"z!##U'.OVH"^]di?SA8#'z9
|
|
||||||
H707SA8#'(LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!
|
|
||||||
!Z;Q7=8d<58Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.
|
|
||||||
=c-#qQg1!L>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/
|
|
||||||
D#WH&&5"^HSSapBU6!!$!8f@Tchl-kZQNl-S\Z`p[l>n0\nW2M+?:X?.I[n`JT[:@7;#7hm
|
|
||||||
:>nPF&YZ*W6V#i9b;WS%I$31'`&/#UrjiS;S(RMo:rjtmo2C2"^ba+!%^\sIBJNtsLio2"B
|
|
||||||
HK=&D0miW\mbPM,XBF#rbUi/?hR$u1mi$c6J>LBp//<+)Q7=8d;ufUXf\"h4B?o/agJ=4mA
|
|
||||||
a.X>QS2]@8kS)KP]Zj$r*3N5kKK>MCY#Qr)`G?UpPsGd9(M&bPAGid;G@:7&RE"lD:u4+;l
|
|
||||||
<ArZtRk/P:+J+-FT':r9$;]LDuNd'F0pR-a6Rc"^%dp^et1e9t"lk;RUDpF@4sNeZ5<+I@>
|
|
||||||
@oU'V8<*B\RccC?oDp*E4h*.@_XrUf=fn*6,<QDt84j\qpDNHBrQFQq4kDJl3&JY`G."&"m
|
|
||||||
m==W51/6,GQW;r;.'.-DoD"LB]cIpm=GC^t5nDQarb*=dK:5'#iI!g<df;J\R<7>L9\om*)
|
|
||||||
am9#\g=ihk"\T$=#F6heYZ/CA=K7n,;?8I/gt^\<#Jaq`B%O4nk?TDJ#(rUPZY%)1C!`N(V
|
|
||||||
OqBo!L@K[>e>/2h5d:gEHcV>C^l[;N"7I>:11&O$a<SjJY`EU;@or\?bX2B!17/3DU,jl-B
|
|
||||||
9-19'm!pn(taj/!UJne\l1NV@E2\XAGSl\H#c9K;AY0"&"mm==W51/6,GQWELZ555kbG%j+
|
|
||||||
")/ebI0n(p2CXilt[=%#FZmpbMi+$Q3k3s,]tjB\`i@&`Ar#mm<^R_lt[NDiMQ=BN/dU,0^
|
|
||||||
1bDW2_==Q!gYZ*X9[-mS#?.TY:bfaY1*N$\Oji#^2m+IS/LhZ#)'0kdXn*f^@*Hs)@]$q!e
|
|
||||||
,#Er`4*RuhV:gXQHth-2'h_o&2/C4D;RsS@drFm860`I)E8cCgMXg?2A2t/,*Zc@R%Dl"on
|
|
||||||
U[M\HB%*YQb4t)[=G(tHHl97&#eYU/6->E_(F\dqWcV3]SiW8\8c#E^=9,\LNfS8JYf6]Ub
|
|
||||||
)2]Pq,NE<OQ_HY-';b_GYsTJYaQ:%4i5[1`'8/(?Ei96]AqIB@!1>/s]8EG3rE.o)%mjo<)
|
|
||||||
%FYgdc^PbgQlqNU6=b*MG9OWuCd_GYsTJYaQ:%4i5[1`'8/(*kRf:ggPe</MJFY).FDkK]X
|
|
||||||
AU'<Dcbhud+>[XPq0I]Xh9M@!<X;J>dEp8\oOJP6F.PO&j<(*p@V':`X!_^e,=B\m+O6NH3
|
|
||||||
PB`G9`9Z$YF6Ch#gm=NkF*`1[o<)%FYgdc^Pbf!>:7OkWVdmc-N30ooJan;f,'j\L'gXYm=
|
|
||||||
DHFJq=EdfBESfYeZ)V:6UQ-cai_JS$\cpQ=gM`1Y#,4-WTc)o9-oouPq#de&($4N0,RoGV#
|
|
||||||
oZZ91AIk==So90!NhVbO+&nbEXUPeYDs3cTf0io7hI?iZK<=e]4&`B?rbenmo`T.SUmbC-#
|
|
||||||
&5;NnlnZ;3*FY?"Q0CtW%%DQu,(9*N<?QAXl`YZ(bQ>[XO6RF'=-H1U1KW)4f$+;1BK=0LK
|
|
||||||
'Pq-?R@X+4dKfaMHo^(8;8<G)Fh'l0n5hE/EY@#&i].V'QV5D-5/X6kd)nUFhl37\9Ujd/Y
|
|
||||||
[;+7FZY,2E3!#<PN"7HSd;*-h#bnlF;?7q%3gq%"1:lURLb])<#;]+OUFflQkqGh)9dMDEN
|
|
||||||
a,U^;,Pb*%SHuF#F:8226^$_d9L(Y!,)O<C-#&D;Ioo&"i^e5MWcq%<!:TR@&X->"^#M#@&
|
|
||||||
^eS"F:09MWcq%<!:TR@&X->"^#M#@&^eS"F:09MWcq%<!:TR@&X->"^#M#@&^eS"F:09MWc
|
|
||||||
q%<!:TR@&X->"^#M#@&^eS"F:09MWcq%<!:TRoPLS"5CYk:ie3knS[GluT7?jnZt[tn?hjT
|
|
||||||
ohlWu]VG3QBmdC)NokWDq-N!T5*'\o-aiS8no][SjN[30KmFuj[nDWEINLM\7b+_=_<ifE.
|
|
||||||
Dr3`S:X@tW@,AlF,!J3ilIDr9=0K';Z0BW/6gN=*;iXE?k0;YfC"'D$cUj<I\[]/>4*N;>4
|
|
||||||
IgW#'OkN\/mc1]cE8<XL7"I"Vf\_C_hOs3rVH2V3HO>c?+\1?<H*l9[o?^AhZF)nO>Ct:_M
|
|
||||||
+1$:F>8#Xf^u\3HJ6(>e+Fh(=IVOF&7%<U4B);qoIO$D`p3Fa;oog2orfZk99Z9jI08YB$K
|
|
||||||
ShVh9SQN80-.aN+Ss*ZR4_Lg8HQQ7\RfGAbQ+eA$M5^]+(f>U/;t3dg_l_hSbf?2Z6*/rn_
|
|
||||||
"aM1>7LCPVSr^MkcV-KVQg?d:d&%Tr&gU>?@meeC;//?QJ@&XF+\`hI>,9e>QpoS,NQ8s$K
|
|
||||||
UfL6h:n[q.4$A&jfU,)s7n<%(]=3"QhIXlrALTC"6A5csX]p"bJ-!i[00ascHq6eaKWQUK-
|
|
||||||
?c:Q7[OO+G/oU`mFntkT0GPM2pKRjaJb8H3pC-P;Nc"r`:8QY68W&K^5rBbSiqE]GOCt[Dd
|
|
||||||
J`i<39>hN5f5;GThRc`j+%Gf[u`VGENH%/mXpBKB.\27uF7c`f1poOr+T3q)'j8JsK$i9DD
|
|
||||||
J6rqncd;iI"\+!4;(s+(7WQ7>m,q!W:baAK^$rE6I=&XcXuq[!Q8[r:/IE,b$oZY,OQ<O-8
|
|
||||||
`c>j7(aM#/[SN>i?k3VI4o]]:g>:6m;ik/gNN;"27h"f&%nac8)[r:0dc'ug\B[3,.$Pk:4
|
|
||||||
EcN@jfZB=)("[O&^etcX#*t,hRZ#HB2)$_'p?^I$MA0J=)PuJ\?[a/N*4:RTY@#$c4*GFk!
|
|
||||||
X5A7R1\FE6\Z"hF`i-(jpbf0A7S>M<gs&c,;_6A%*XSE/LmZNA]g7*0O]Q`X0,^<;RclcE0
|
|
||||||
];sU@!jT04o=8F:d^)dA+agB@#WQTXL]nq>$!h2m-8f@M1_haq$`75RnQ,'fhO5@Y0n<`(.
|
|
||||||
>/Rl>7@2FY#QH[C*[EKr(XP5XU?5]jDDa,YB4hGpT-`3tJLR@BZrEa'c+9C<an$Aa\$F`_`
|
|
||||||
$mek9eB5)'O>Z.Q7Og7>$:7TtLH#ou=P@Hm2R5Sp99U[ePn(tb#5(+RT==U&s^etb4F4#uD
|
|
||||||
'($m<'Lg#4^]!l\UIUBp-o*2!B[itX6s/Ldq,MnBoiLkC7;YbrV%Tb4]6:=;D[b&kUIG]DD
|
|
||||||
&L/faT/VO\T0HPOXEqrfs><=,U>p]5s7ju(^qoqXAJDUP<]*F;d(KAaPrL8'4PU&qXfpA(i
|
|
||||||
XS=oTUe'W`5slCgg>E<Y\WSM%_6d=0=)qUH*DX*&hc*b[37A',03WgmU-<.]8H`[;1u<`.J
|
|
||||||
<eJ""mfQAXl`YZ(bQ>kDI(c^m;sl)107$k1RH.p&n8bEjaVU[%:']4Lu;8B#[%e]5^c'Vf'
|
|
||||||
f`f(c[YW5]82(C(jnDM+ip8)otefR,*PYd3/Q5U>Id@io4"Zo8B3HM'N9#Ld(Pu"AWV(Q)e
|
|
||||||
.'9ft5($2%Uji:=0bt<:(M@5f_u<mqQ%f_e9)^^>eu`/!lI8\2P.Gf%8h37UYZ+#oJYaQHk
|
|
||||||
+VrN4`]USTgFHt)B5K+W(h)EXS`E^&e5j=9T9D.@3V"0]V%ZL'$>BWpkZ^$e[*c@^qfg>lR
|
|
||||||
U_VCgVW0Q8%ch)O=!UEkQel'^su=_hZ33+otfG,37%?Hi*O(&j!(VV39#iAa<c5@4bZi:jh
|
|
||||||
TjbEm_OlBU"-6#+]1/!kj!$m.Z<quKXp==U&s^etb4F4%RqmbYW]fs*h(a?VI@3a,:4Ocbd
|
|
||||||
ng9jk__R,\^V&hjMS8h^UG0J1SK\o^,a\r*8r2NbtVJKU;WE$!bfQiDj[o@Ad./T3P.`RnR
|
|
||||||
(RD'8j:^4ZGH]ZEWar*\Y@"2F3]K*$NN\C@+JL@N"J.GaP2\@g>%S&+MWcq%<!:TR1i93>:
|
|
||||||
S(PS*R@]rG3pdTd9g>`D;2L!]>@OW>O&1dVfLtGXa%UL1he/H>r=/j/1aKJa2g'bWDb0AVj
|
|
||||||
?>.3dpjH2>T`Gq'($k6suu$OuI=9J,fIK<+jace=8O?;SO%oJ"Y6!/#eX(a\@q0-]iiTe0s
|
|
||||||
86_hXtHKi5]a&\SC7MBJ@GFtM8!gUhF`_J0Ji1,<Lf*,.h[k<\!)pfctKf<8a\&"=FmB$:h
|
|
||||||
C[,RBDjO#qo0=\O%YZI[&V7q9K8r^"g#Zau,U@u$+@&_:HUIL6AW$qAbWaVkXmpl(YgK3q4
|
|
||||||
An9c2H.5H(h7CS8hO,c!(+bi?R)j_!'Ej_ZkV]SD"OUI2C8hLG$&oi\')PISac[t9e>ZB\I
|
|
||||||
/,mMnqd.8R@+rifJ40P%hGo[Q75b0=gM]\4*DT!A4ZI_h7Igq7`;WB`JTU=)0</adNBE6MX
|
|
||||||
<'j8<G+HW`::9rUIoMM.D&-DpFt>0>)GH/Tpm[jm69O=gR7@!<]2mR:9fA2f[iqhS"9B^Qr
|
|
||||||
*2B[M?\!62%'[FC<`8$_lOe60P8rDp%(2/_3:\4jGRjmqNVQe<J8gY7Y?gQI,aI[.Qko+ii
|
|
||||||
W9\QNYe8L#g,/I.b'e2VS%WXUAFqYoXFK"[u[qsa7^:>^nWq>W/DpkFQjP$+dGr#3AhgbYh
|
|
||||||
j(HJO'OKqS?naEOdY,:NG0#BWIMA"MQAXl`YZ(bQ>Vp2pAB;U^cTN-[=^,+&3HHN"/hUuKD
|
|
||||||
r/-0]65e'P`3"beREn+/;9ai+SHlm.p&mdGk#6oj_m][NupT`5+fsE;AUrjaOjVsnJqi>#;
|
|
||||||
7a6F9dL2*Ze(2nP2hS`6_G[6maf[>ol=897?Ku(#u@&mFnu>o^pA[!nk8B%NQbeb0gP->K4
|
|
||||||
Mo[+*a\=I(tf.TNLU@`=4k0>I(=HW!bie#-!NDr5GBA!='n7MA-kC'rjGo*m^taUO6b-.;c
|
|
||||||
0qXNUdgUD)S>-s+aokJO0^O?!FYsK4!D;;Y+Xf^u^4aT_:kq;&8`'g>NLCYIRG7P&hMj.ja
|
|
||||||
KV'k&$k-ZoKVi>(QIi9FbLcmLkc%LY)Dl-Cd`?q>!sFK)s/`F]Oohn/nrH>jVG/!fCe,%+l
|
|
||||||
-cC3Q;T"qc$0L.#F:8226^$_d9O%lWFVZ"Y[Bb_JO/2-I>+$c+=$7_)`Ed4*_U:ocHbcFNZ
|
|
||||||
C3IV+i]l,eh:.JEFRoqh/26AZ<DX^&l'NV56Y@)J!O%?=_1aQMQrj>&)Zl?)\hf6fn:DpJ^
|
|
||||||
CM0OY$j.<71"mV2nWp&+XW_G0.5O^lLr-1$[5^3fTl`f(d(MA.3UN/39tr00l_WB^=MK9MK
|
|
||||||
4FW)lQUYEG,1S`k+p"*Q0's^pkfed2SjCIlQnfkPeJ\N'dHoQ8,`;[2]fcp@62qcd[q=CR[
|
|
||||||
jiWi]^tJVWksK<=>`r$`:;(`3:<&bcWUT#mQc.e'+4RK$5OEbX&n\FI$<SdPf>(8r7!$bMV
|
|
||||||
:sSS;!T:KSNE1C_7Op[ZM^k)[VT*dKk\WDL?3D:@WnYFT4[Q%a]^1SZ_RKrpS\!?.LcP5p"
|
|
||||||
$6Le;fbC<Jl3r)&?(T]65c!;[Q\XFikM7^ZH(lF`VVfn3Lc!ED*^J[MC_&q6O_[aA%W)a1h
|
|
||||||
B3S)E44Q3NV^<0mB[mlhF7;WR,nX,ILn49:VuU]eUjW=S\5(bgJg*cJ>?8Ne@mQ6[Q"s8G1
|
|
||||||
AV\BB%MWcq%<!:TR1hWe]TqO#%I?#@3>#_h=.*M1CkI,6^=BZpoHtlSJA(c?39YiP;Pmjft
|
|
||||||
-K,h)Gd-8.P,TjCWE*&#_G0.5Ob<M%Cg+n.rO:[5'5mE.?[cEt8jQ+HI^)/H`SO*kA8t8-Y
|
|
||||||
ZT#bLC[PUT2&-V/?KfC;FcZ_6/C=f4aTT)ftMl]i<Cf6Y5Hfhf:+^;KKi![C'f<LNfJ:*FV
|
|
||||||
Xd&"bEKoH4;D?5r9D&=mCkZ/#^EDB[B#]n6keG`RL2V1lqtcb8[G\r:?!%$;JuI(G&ZRD5q
|
|
||||||
3mRO\8nRY"G'lJpnlrNSiY(Egh,ln[tgHl4+-X72nKWU0uC`bqchHhS:n8pGnj'*4CKTgG%
|
|
||||||
a?&KIM=IM"BV32LTqH<n[X2R!_lg%4BP3qM_V\q^DmbBh]:PjBb`,pO+,'j\L'gXYmbunep
|
|
||||||
HM)qA+Tq]_2f;0"3A)qe7ZA>9Spkf/RC&JIH^<AVX]i+f:)l[@">//30N>,U;7N0e3HO&jH
|
|
||||||
WP#r7A5sB;Q'65Pq/3.L[kBAo2">24Zkj*N>U,BT07NJTpnLUQ7ATFkih5NjiRn=S0LN6QD
|
|
||||||
pdABrPufDSd>:GCF6:!;,R,9=X)+ldfYFeGfFDKg0_<^]E,Zjo?qId;*-h#bnkCb>Nb9I"[
|
|
||||||
!5,'<(t7<89)%:n_&XfX1_&U/GC29I_hV;Ah.O4oW%[C(\5MF&ab,s+r5SUUP68ZQgb[V`l
|
|
||||||
5Nu^<Jg5(?H8j,ff*#tdIe<n$LV%lS8?F$iLh-`oLmF\\=n:iJF/>T\$r:k9jQM^==POVR>
|
|
||||||
6A7WMC+3]B!LAW,26^$_d9O%iWT;rbC*hAt<s=D<M^r,H\8_<s>IG5`Ug_/q_CZHN;C(XE&
|
|
||||||
aYmXV9YJbLYC%U>IPl"<YUEn.QJn;F640S8+Q*n^:q=u/[MO?W1]tb+8[To\FB+Qc_Yd8BY
|
|
||||||
[NB'hN<-e0iuU%2qWOa(Uc2)PKoF-[BW`LPH9+NB24IAGjsMldpjVl-Q,V]MA&!QAXl`YZ(
|
|
||||||
bQ>dS(A6\Z!]/u*+-U5[RjAd3A]RJcmP$S7f?4?'Usl;NiCgS,!XlL2Lf0&4ND5Q)k0Z_C:
|
|
||||||
7;Qj?9,2<HDf[$0S9.hu2p<Ll1?G&8*"U-K#p[6kS9bGO4.<G=UA]am.!jGYGFgc2D>.AR<
|
|
||||||
/(\I#qWQ<OlA#67r$8aY]m=gPQ?267Sai<OqXnW=8W:"CR1ul)7'D0<,)GBU/P@Al-fHiAI
|
|
||||||
soQsme-5Ebj=AN+$ZWOI,i5+dV:Qq94dpMA)bF`dQ/lc74a`#;X.>5;IQJHmFoGE;jSA%cr
|
|
||||||
*)Wr(-cD/_cV9rVH9WDmDU-_GV]33G[1siPos$bXqcQcY/V:I4;RGl-aV+DqVFmE;LMS9dM
|
|
||||||
lV3h$f9LZI$^i%2o<!1&N+26^$_d9JM=W<S!+3\$4FEGdgbI!hl`(&3NRqMGsFdA'4[C,7_
|
|
||||||
?IJNF[[?4b,G"M#$-krr9dA'2>2c@D>I2<c#Y$>,>IB!]*BW9)^0D_M3I'uCt%YkQ::/">l
|
|
||||||
Dr1i9;C0r*B?qXaY4MA\(2h'(Q:c;bC=T?+\Mes:q.J[[^O"D.;kg,8TL"2T7ujOW%[XK:;
|
|
||||||
A$SHQAQfRMhWc?0JJSl`nnCUj_osd<r7IP$SqVGL(,*#77pmM`RHH(AN"&`PfS`TLo"9Y>#
|
|
||||||
Mu-.T`cX&["r59D.rLUqVVRNj<6>&mp_YbHVu$;C0pd%$\?hcCI$Egka?/Fl:&de.&D"TgO
|
|
||||||
Sj<jcGX%e^Zo8!AEKahM<UpP,]`;A$SHQAQfRMhWdJANEuf&YK-sldls0b(pWS1A`WqWR6+
|
|
||||||
hnjtIXe1>b&`f8J;"Q&*;&4J.XDV_nRm\n9b'.8G`<7XqR'.-D7:a^8;DV_lAg&A\m/6-_]
|
|
||||||
iSibF?+4tB<oHN,AuU:XnHX2(Wj7'Mp5Dut-72XjYt.CQgpt%@msaEC)3b#5'paa@26^$_d
|
|
||||||
9JM=WL#8FVNrBB]tAHoC=Pq$.plSL+GBt,('oCjcMLP;AuWt>/JE#q5_0!"4"CY,/=$'"Y1
|
|
||||||
aHM'!>&N99"mhCso,9jFV1!Y.\`/3mrh_N@G2b<H=Wu*cpD`+l*(N[;1I80q+r]3D1)qoB+
|
|
||||||
;)/aUcR4"TiEB;A"V)GX%&Eb8f[$!8[Of>(8r7!$b;V4K_jMHYb<YHRj5Fme$fGUqhc1AgG
|
|
||||||
9q=B;)>HV3kab?.OV9YPh:Ul*6A]dR3X=+dfe?WZ/;YQ$Jm,#E[\3e.dPn4iP>-D6q3Fs!Z
|
|
||||||
>^4u0Be2&,.h4+1:8uaBc^$4k0&2'+/=$(gW7n=W[k>#@W6`cq5cu+H)]P!0SICgAkV]SD"
|
|
||||||
OUI2A?!V0*M\o4'GMgB6c<Yk[j&&(r/r@!W5B7iKpeC+rq"H#_C\`i>Zl)[7A5O6(+WFE\k
|
|
||||||
c;EpqNZ&5RoXDRi*\EM\`_0[nfOcOALI<@&\0=V4R1"G':_S(sPsZ<NAUFOK)jb>A=Mp0.2
|
|
||||||
IqOX!Ao:7WZVWi%DP<(*p@V':`XU*3/mGO?HYN&P\3aPTh+G3ssld]H`_bW`XbokNcB7.RS
|
|
||||||
,e1?kG2Che-PdI$>71i0-?I.+,S3;4"\3cH32>PDug>pa8=KnIB0!o<>6BUFK(kJMUY*0iF
|
|
||||||
lD(B?Z4_&nBU27r`CXo/4?S9IFE_p^:nW?/9p!7IB[EDJT0CBS?#kIl,'j\L'gXYm%9_uhl
|
|
||||||
dr+IgqS>Gre?k#D_A\frr)_,p=W``G#=1qq!k,d_G&3Pa[$_\+`H5MdX!AY74bioq=<$`U+
|
|
||||||
/*>g^pVb4\JKm+<Y(QaH9pZr_5n>&g\S]T\i``!L>4G:6sRs2Jh"ggka?/[:-t-e.&D"Z"(
|
|
||||||
hQ7='<-P<6"m%?\76q3OkU*g7!`("$f)W<f6/BZO(SQ;4r3l&trReZ)VBGUk[12OT!elIDr
|
|
||||||
b,#=gp/Zg^*ZW&\NVD]WDfc<p<@]=M8e.HTZ]C3ILTI*-70/YQB^3r([g,(h)/:[]upTIo:
|
|
||||||
P$\M1=K:FCa\er'3pORgVDH82Z!t[O]f,?7\\hP7rr)_*5+e>q="\NoQbV"F!D>lR)H\J@B
|
|
||||||
J(4/e>T;oC)PMSs/?QXbF:Gon5^MK*&@E$YHKUeaMj&R9<6=e/G8)GPLN(7]Y(%_<YUEn.e
|
|
||||||
QC%6%]@ZTe?Haa&5ilMi6>p@u'.&L8n=Y:0LJoR*:)W9!7d4TgR=87o_@o=YEc_XoRKL\pW
|
|
||||||
MU#tmoaC"*(po&Rn[?*%'Q@&\rg"%u&obsb!c8gn#Y\8W=\7urtHM>R&9;`cN-NY8b@2Jq/
|
|
||||||
=X3K-Fp$q(_e4*tDnA9u*Q9&j70]>Ki1hgEP^'J+?921+F&VC<!-GsH\Ytg(iQT7Y=99ia0
|
|
||||||
Fm?;L%.>M[bu1H8T.[dA8sLmJhhpF7Gq>Y.iPL.sJ]=l2QAXl`YZ(bQ>dS(A^]4;FE#HFgn
|
|
||||||
r(^d\@T7L48\Bt1P$=cc-:r,SiqGoQS52j/PXJf8L%2[))Z/nKV"&i&PI7gF;/Vg:n^3FT#
|
|
||||||
3H,>V%`9EYFg#F!gQ!R'[PZ>#anNBjdp'l_NC7^An1ZC*Q3Se8<sK$#df,bUaq^6N2_h+>u
|
|
||||||
-$oB+<I(CDoQ@`/Q4<sqYioGUg]JnQdjZIC=%V?iNN1M>!`J,hU!kgZSqn0SJY/o33Y"Bnp
|
|
||||||
?GVO>b$,"q@J>l[$J\'?CR5/=d',)[6<YUEn.a].!4umoZUtU5/J>8s<&/>pKG'/WS-)`mT
|
|
||||||
Ksb^JW`foa<EbOGQC]U.0&aeR<eX;fBU8MYd3Iq2[Vt%UIm`Kerm`uNl;ZNHD6mm$:@1[]j
|
|
||||||
I\6eDa`+UQAXl`YZ(bQ>dS(ALCYK(<jI&EC<>iJ"U4#5SQiW&G4!ui2r`r\74g8bNZ8ig?5
|
|
||||||
-V8$!QVm;5:)WS2bLTCer$ELo!R/6r8[,K*Mof].X4^/[\EK6:N@J4?VE=`eL#$e3d"o9@Z
|
|
||||||
XBWR?Z/Y[@KS^F`ToK\DI6/2\RoTlAu-_AhdmZ(q4+)$0:="SEN)<2NE]C?4qnWJFj_919E
|
|
||||||
:79c&r'buue?U!F@lIDp_r*-'!e>6.NCY#S\[_oD^?c@m;hn=@aW]Us%eG]:=;qj%DkYVpb
|
|
||||||
-+%@56F`RKH1JUmnNuX2A-UR^F6:\\Zsle%4@rg$Z=qX[Wn%/CPu&X7Mj>kpNk4,\]tLC>)
|
|
||||||
9l%cSND$2hN4.nR;qA(;hUo9O-VA%QFchUeu``K_I0@!?3<hh&C!XJQ:`:B6S2onQ7W_Q%L
|
|
||||||
`as;P]+fbLs47J,Apk[AgQLf2@ONp17eKp8.:#5CQ:S/_Bc`)AX+.19Z_l5GouBW@Uh\>?P
|
|
||||||
+.g(sdG+B-J\o]_RelIin"41--h7-YKe99i>IXfX0tVq%_CK;C#,>,mL=$[#\7%]ROXN5N\
|
|
||||||
s+7%O^0AIeHhF<k_4"[[97'D0<,)GBU3D3q/kdO6R1?%3N@Tsm1BFqR_F)uDgVT?ikFQq6'
|
|
||||||
f!9^LoXB>MrW5=1`Q#n=3,kO3kKZ)/k+oFtHqPc-ldh'L<9;8f<OER</G8u=pFM4mONjcV(
|
|
||||||
BFR=!iWM4^3nUIob\*l++O2c\/prSFX.&^'jKO[.p#goeRj*^2qb^,)B'MdI?92f@)2n52J
|
|
||||||
4"9]m<+Qprq(1c^6#p;A$SHQAQfRMrlQJ0eoqB`JW/k>.8Ai',/:?m"uN.W,31"(L)*,G%P
|
|
||||||
GBQ'sRGNZC44_80R'Q7]8BY2hf@S2dcBM\[iGZW+G:lB*;]=DI0KT`[#e`q%'BPbf#H[V\\
|
|
||||||
)$Sg=?]6:1'(BIX($m%ELUbPLd4'&j4lC+2_J>J.'mJd(]`JPD*mP/b.#n@GWC!`659'G*C
|
|
||||||
2g'2pZY(Z[?DY)D"M/^>,2=D`e;RN@//?QJ@&XF+\S08d$1$3HVq.(!bNk7K^Y`n`\<5nI"
|
|
||||||
X9,re('Vd)0&-33Yd=+V37G$W`=tR]O--`jis8RN"q4:5tbdWkr7@`_=36m,NLD)6(InnN>
|
|
||||||
l=k7=Dm2=0>fJ*7bT:0L3.>HhZs-[rke&HXR-h*2$%lPesqMiu$N-ZDIQtn%XepjS%ieLJb
|
|
||||||
Fn$Fr<+]66oJZA"u)>\iC6(m^'C26^$_d9MpAe2ha;FAmb:T0Hti-QsY,>.&)r@hn!gkK]V
|
|
||||||
3kZU5:^qbL'=dgQ$h7Hb<IDago]3rI,N/]=h(J?(@fWg(6_Yj6$:S']%a2`t?jX3iq3&ilS
|
|
||||||
C=Ge!k::5FKN>3Y0m9I:l-aY8b^'6f4aZ5XhS!uSGOO.e+&N6.,q7=5o?TX"X"%,LeG8_!W
|
|
||||||
D,O(qGbu9#1Dd^rVEqG9aJODWPAE*S)X1=0k846<g!bmWgB&Rf</DY4">q.7>e=ag2(:m-*
|
|
||||||
VTh7#;OTVbRu71:<aHhtHHlXf\^`'e>S'?Tr$Oc\uSeV?qH7_KT.'J>FH9%4i5[1`)u><@'
|
|
||||||
C>0:b7QQ@7;olIDpKQ+1el!Z@;ZKn]@!qN?CR)3+:Vh4+79:b(Vijq=O$5(<DhbBo7A_95`
|
|
||||||
uStXGiRhg&2RP\_6ET4p=>ITc$FR.L0173I^lBS9FkG:h<gt^[sba:\NUVsT=5=1C'5QT#2
|
|
||||||
lGJAfW='?8KcFR]d=;,ffB1>Ic^[":p[6iR04'b.gqS@=qXs0P:S6LRE?j^aqtBE,pu)J"4
|
|
||||||
#mK0DjRH1C"()Ld?0saRD#BOZ=Q[<b(Bp0-<HD<2/RR)g*KukSih9t>qMD^;UqF\jiX!VA5
|
|
||||||
#WBgEJR24$1&!7ujC8G`Nn/+t"GBd9XJ6H2$a_j2[4a;Pf8LY,tp;Nd^pHhbr@EGse-*3\<
|
|
||||||
@4jJZ:lmdT2Qf<8OWG1#^3\">m7:3I5[`ejYVs+Xdb;l37Qe>ZBC8sRhQQMd.i1#rE1nF2P
|
|
||||||
8<=ebb)cEo1p;I)+7J%L#.Y;=d)RWNGOTM;C;5d;7acjNM]=YCCI&%%\/<rJTa6^r%JaV@+
|
|
||||||
$Z'*O9-k,u<j+/j&c5rZ&Pi^;agaYBOiOi(rR.N8NuL$<N8#5HP2$_lfUdCu2f78J<:@bg`
|
|
||||||
@Y)0rqu@`;;]>1hbjc]<in-oXrn;M(Tq<Jr;#F"$5Y<WAB9l(kKcfb.CCh>F6?:h8<CE`U]
|
|
||||||
=%VoGUg]JnQdj[FCS2QmPOr(nl]Nfs?$MGf[FH*'8?1gMaha6E(qV24=8g@;45m=]8_WMH_
|
|
||||||
PJE*?@GW7RS>2K%:uW\>M:+-q,LdmF$tisXQO*^'5_+-RAggt\D:l\ZE-[VacBq!d5u?T<N
|
|
||||||
4q!QtMaaU\'Yp&PWpr1FhH1OGs:+WVK"fYJ#;IEn*W;Y&];Mdp<lIF&`4+oZBZ)+:.g:o:F
|
|
||||||
[d:qh'@3428,[Qf/hW/h;s?LF<EcbCU"l5L!g\`-26^$_d9O%oWQALR,:['7]\54kZF%H[G
|
|
||||||
OPP+it&Ojj_Lj;CAu"CZq+S^@)X^_5e:=7G&<MUPKJOb'>t[;UIPhlS#B5]9#a>V*NR\b<6
|
|
||||||
WS1aD!<9GG9Va.RhIB,mDl;ap]ng8r/FbCtc7qgA>FMi5*9AUjXO4/`b-Z<iqgEKuK]NK-j
|
|
||||||
Bc4Cu["q=Ed5s(cCc9Dk5XSj.^R`Ysdr/R]!j<(*p@V':`XU1m7praLB,'cZ7"L)(-P7K1K
|
|
||||||
e]mD&`&*[[bg<-5X?bEFMW<S!k`l:JO#H9h1OQj<UL8?5H&_0@1)QD5W'Za*OCfSD#^A6n1
|
|
||||||
p.]Ysgc8jh_hJV!Y>ZkY))=Us4r4AR<=utFrqhH]+%k2c]IYr9Ml?XSqsUQQ(?+H,hnFN>l
|
|
||||||
IN:i=V<,2-qK?2-NG\4d;*-h#bnkCh,4RJhnO*^YbC'GcCI&+PEV1CpQ,?*GhgE)-i<Z,?_
|
|
||||||
g4)Q84=4.lMM5d*nmgPJQ+iIJ\]tf\G8PYmcmK2$Fd4(K%LL0sY<0Nm+r1P,/d8+sNsYK$'
|
|
||||||
cr`JP;.EclM9T07#1N#<L;@$rNI%c;^/S_1tQ,lgT':SUC=,lcrMd8H1C]_(aghg_]9B*oA
|
|
||||||
',k.,&LPLY2RnhqC=0C8m;A$SHQAQfRM[h9qq9*_gq!d8/j)un:rqN8BlfA^S]RB\NW`?)h
|
|
||||||
Num,kI=!0l5Q14QmFnstrUj5b91s&9CM.9m0/'N9Ze=^#\Pp"Snj2uO;g3h(9-miVHF7M<W
|
|
||||||
X9c+s'totl'ZB`4\JLXmFnt,h^XHDX"TI<5gC@hl(c@7PO>c>OccZhk`n)FhFj1fak>X3^f
|
|
||||||
'8ZcCaXea2c0<8`'Jp/N&6!gU<@q;*q*bjQl-$fle`;R\\A$;]u)[8@p\!"I=r/26^$_d9Q
|
|
||||||
<PW@;)bGd1l*RPM?C#1ukP:?=5nT]5%n,[>`3If1+Q;VP(UZ*CS*k05DUW0#4JP"MWISMJr
|
|
||||||
cg6S3*ASGFcC[569E[fP0'T*\[/p[;,@Y--=#A8E^RX@rb?DOD_JH@2pSs6dp):>piG3RFD
|
|
||||||
]e96^qsX:Jhj:nR9u0_k^H@qapYUHN50%p,_M&0M12,@HV6ZR`9A-U^7BQ3^+L"g5YCWMoL
|
|
||||||
utEZ925C@2=$8C4+@%j-OJNO5%SMFlf[FYoff'1F6Cg`mK38iZpq:L'M'Hik0/rJaV?fm`"
|
|
||||||
3*,pI;C:']-NM7ns]m^YKSU>-pYP%Qen&'UTMjKnP*^GB\7^R:M+SBDf#Nl-cC`ld(OD[;/
|
|
||||||
!QoLM`<7%nNl2&H`4+$Lt5G3@/A1Rk=5/4ATGo]X+tK.nW]W@<pYVl!4[>.SfiRCe:1D;)F
|
|
||||||
8lfR=Vn6KV:Kq+C(7ZA>!'K$boMWd"'<!:TR==f^GV"\gpo$_9DSt6TB9_eGHT;g"WPUotC
|
|
||||||
HhZsHD53l$V/=ChFR%@I\1amaY@_U.$lqKEaE\IR*Fug2rVH2$e#'NhfofoqbO!og'<uE3^
|
|
||||||
A['1Mm$I#9!.1MoB3u=\T-Ya;LM.91.FEVrqs]k'7]uRf6mDbZ&Cf'(GFXF<NAul7W$kdl1
|
|
||||||
*fSU/n+$iROu1/hSaY#7bRsTE.pJeEq^-"Wng.++&A3qXs0\<6bb(pLVO6`Q-"LgFluk-#p
|
|
||||||
IK$2dnQm+=&O;_^6k=B]A9r;;Qr4Z\)lHn-]tEg57l.Nqklp$1'4%2uTpkK\m>#cTo_/&]B
|
|
||||||
E:i@S9TBa:T3ub_?OBW1)g_`JC>VG/)*\h,WZa97U#7jq&%"@a+"lo4JU*0J>OYT+MrbR6.
|
|
||||||
Po6f*7'D0<,)GBu@]>eC,UDI!V+X2ck0BMZA]b]B"rK::gl*+,*$$&\*'*TVfeXi`U*N+k/
|
|
||||||
68j>n0$oL\T>F,Um$n%5a7.jlK[Y,Ne3gmh9;9Cao>YQAe"QS%N[`'#)^n6#>GH_AM7E),g
|
|
||||||
tu?k-f$TWmpI<?+W"+]hrhHIJilfaAn@b2VG%<[l6=b"oaJ5rIP1\lI;dXH!Hn%GOG1lgQT
|
|
||||||
?A7Re;uG9DU<W2Rat+.kN4K#lm4c'r!D>f_al1j7073TNC9kM!\#^SduB=BHF/9)1`TJi@W
|
|
||||||
)>eG=/h;*MPlIBF;baLD)n`%M_:/5$&DEW+*&G_q^I/"hdnUQ,idLL8*7<FgiWMQHQh7Ilr
|
|
||||||
h#e:?V':3p//:H-(Yr;qDBNF=iGhWdm+E]b9EVR[Y?nmdRPSd4Ya-kFIfKB@!X!B35?4jk\
|
|
||||||
T?rZe##jo]mFs:BIN?'!T8gL^]0`[CKe2b/`FZN,,`3Sp=lTIX%_\N'3H`Yf>(8r7!!pUC'
|
|
||||||
'%(5[D@CHM-R9b67Yb3&m;(X1,S4h(Lm?rqsZh&)lL+]^#X77#?n_]mBA:qXs/%:7TtKGOI
|
|
||||||
crr3J\A#'K4\q=+j#C=R(S\8durD7XoXC27Us@Ddhh2fG/C"U.OfoGUg]JnQd@<)#&rrd="
|
|
||||||
_o&IcOk?TD7!!!H191AIk==So90!J=JLlRMPZ=Sslkt7J9S>^Ko&WF%_,ldoF]`LhqoGUg]
|
|
||||||
JnQd@<;!bIodZ*Er;#sYmbN6ep?`LL4F6MT60HOa=l+(s=gOu+VL\dK!+;82;A$SHQAQfR$
|
|
||||||
S5:@*#osH\Ra6j<<j$UChICiGOODcp[8=l#H(f!JGd/MAl"pVZ#J[=k09C%ph:*$f<=Af9`
|
|
||||||
P.nq>ch=kV]SD"OUI^WTqm;B29;Zbagh>d@s'&Pq)IO2rCiTBj,9&XI503^q72Y!!'A8//?
|
|
||||||
QJ@&XF+\\M+nUI'YAd]?@]AnGWk04*_q<r`4#RKo.9kV]SD"OUI^W@AJs(ha%@--VrDRs/3
|
|
||||||
?!!)3`==U&s^etb4F+L0f`1]PRN1d*O#7aF"9&eZ.!!!"F!1&N+26^$_d9L(Y.PZ#,9XPW.
|
|
||||||
n%\lt2u+'d!!",Z==U&s^etb4F+L0fKXnY(H@B&)B[Nqd\+8r2!!!")!D>lR)H\J@BJ-Mg2
|
|
||||||
)#jU`JYO6_bY@:c>@E8*>fX7]8HXh!;$IH("$f)W<f6/^f"/V3&l0;[V\0Sp+0+;La%:OY$
|
|
||||||
ANZP:-8&q!d\h!!!"I!_YuS)H\J@BJ-Mg[7O%cI.6(1`f1pm%NS`^DV]mJ$aQ79Z!t\rc->
|
|
||||||
FrRs4Pj<QpU/!!#8a@&\rg"%u&oblsDJI"Hs%DVr1qiSibTij*t-njSHP:&2Yb))LXGm+/7
|
|
||||||
@ZZ"a8.p&m$r:lCuV#UJqZ4O6>7'D0<,)G@_9*G:q!'i:j("$r-W<f6/^et15!!&)h91AIl
|
|
||||||
==So90!J:T!!!!E_bq*F#*t,hRL:Y]zafn`4^O`4*Lunb3"TSN&5Val*d;NEl#bnlF;?6at
|
|
||||||
!0@U^7J%O$.Y;=dYZ(T&!!":^;A&j3QAQfR$S3"m!!!#@YZ+$*JYaQHjoS0Z!!!!a1+X0fD
|
|
||||||
d]OMU:J';!<<*"O:4cNoG^m^JnQd@;ucmu!$oH[&cDp"MBJ>q//8-b!!!/j-be?k/nV5q?J
|
|
||||||
Omp#17i?5Bt6GnktB)Y6*99*]KWL0&^_-Lctl5"TSN&zTIR3$na)*n:Z,M3zzzzzzzzzzzz
|
|
||||||
zzzz!!'gALl.-Si,Ji2Q(X2s]T4!3z!!)5KFXp70CUY-hccCZQ"8tT4+#a0"z!73*u1%Ab/
|
|
||||||
\o:_8D.UWcVZ;N&z!!!"t_lFUQ4Y6!2X.Qge7+M;>6ko\%z!*$dEqc3(@Vn(_%<<*"!z:^M
|
|
||||||
cjnB[nIgq?L)q<ou:INc@b*WQ0?zk`A(0d!jf:F8%lC`OaBqpHG3o+$BT(z!72nP:Z(=fI9
|
|
||||||
Ok!IVX<SWW3#!zTE5U]%WIau/S8CO(!jSlGTT'Kz!!(@b&`M-TqQ8m4I9K<oX6!+uqX?\!!
|
|
||||||
!(L-rk16p2d\hG"n,@i!!!!A"g<8kX=X->T,,nVj-!WuTCG*q!!#sVr94Ggk=]jX9\Yu"AD
|
|
||||||
hkE!<<*"?n,u95/VerU=&V?>]TMs'A`s*!5KJ)+aM\jbM;PWg<K-dCEgWjGooKU!!!"d&Fj
|
|
||||||
`Hj$mqI5"a49X=W^u*4X8j(]j]IOdM6;B),<lpEK"%7gJphO5BIlMuWhX!&-Fi]F+#UE=)B
|
|
||||||
EMK\$on[nm`WWA4SLlRLb2e*Zu>EG_'@*];=LCjLd!!"@gTtNCqO&\$-V$m";a!L4=MuWk<
|
|
||||||
&JG"edTBT=2]kb,i@GLe`<QAC!.`9I(^tJ_mbg9<d<+MEgDM"HbPOg3!/uKTgRo,\S@II"1
|
|
||||||
``k(5=`Z]5*>mG!!"]eJj2[4m'20>\4+lO*P!=I+H6&W"9>CD_u"?W=Q+-H.m5HNT0C9\Vu
|
|
||||||
Qet!2+DnW]0[GMq0\_V^%L*"[L+5^[ea5Vkr0e2-S=grKqd=zXK5TOK_st%lQIM*X-^%W%0
|
|
||||||
/HMJB&,#0eGW`oCh-c;ucmu!3d+O)*;T[>4,l;XbVjFp[#DE@2K!U+X&#VH.<5hpD+c[eDP
|
|
||||||
J3TCFrlz`:;o^:\XR+gda+\Lr5qhYqbd]O!aom/g8''ViT`PrKa11o]isI`Np)fO!ao-!!"
|
|
||||||
jtG1VZ-#;c4tpqJ]jqM4W*ScAcTGX(^=g35FKRu'=Lr:""K`tJFQ!!$1K0d19%hcL+[R1/B
|
|
||||||
Fq!e8ehM2dF+GEb7me*ql_YlBeO"=L[JG8R:!!!"L[L)R:*RGg"/LZf(*UJh.]YjW.!WYV"
|
|
||||||
+.p'onMp9TLMem$g,UVq.nTmD!!#8:[r4CLCmGE?\_Y)hkW%Eh'`^M^;c(D3>BfKo%Gdg]V
|
|
||||||
kpS(#4OgVzcj<o8?/RoZd8S$pF*[NR,O_B7!"e/SU\E>f<cPl[kUEEih;`o_!<<*"TH=d[P
|
|
||||||
@dSD`dNN8VtBBAE94rHh?Oern.c@djJ)tKoWY^cI\Y7gQJ3G@I:*'U!!&ZNJj4[lmZ!hR'[
|
|
||||||
?o\;t4i6]T4WEi;XB1(:@iL*ptrlSRq.aQY=%rz!#9a#ruG-:<BN/a2W3h,!)/%N?>kVl>J
|
|
||||||
pEJTX3R!;ucmu!3"&3*S7e3Gk@=d?'_$GI@p8="X$I%R#n[to*$WPHkE9(cCX[fI<Ybm!!&
|
|
||||||
[)$jOVd=WZA=4M$KHrLrF'/C4@s#Q-f>:9es%IM:(><\6JOqsXXe!!#:a6q51T*U:LijJ0o
|
|
||||||
r20ds+a7"9q@0!SKQd.bZf@>HLjfcjd)mqCY-D'rD"onW'5aK4SI;j\:jkRm@\r;o.h'V;@
|
|
||||||
#mlI$%l+.]-TX;+e^>\tYBmlo@#l'%+$t5pA,lT0!+[8@gjFYh\CA]tZ**QQ"n=dt!9fgu%
|
|
||||||
t-nX=i^JMf5#\SY^bU(QM3ZL!!!!aQ=KAYbbV%DH?WP=o\^aB_8,q-"/%S^A)]GL4,r^^<6
|
|
||||||
_[8GBk9CzA4;;=/RNmeqcHDHR5TMPYKnTQLDg0knDp:h(i*dPQaXW7g>OIKisYnf!._.D>[
|
|
||||||
5.AZ*)kP7/BZ^:.l+Bgdk&SO/`3$,!%2sPOf[iKW93mNSb?jO#QA*!!!#7P<f/p5s67!O,J
|
|
||||||
+PC#e"+j%!)LV"4!1f-:JZEPITXTAfb#KSDnc52#u:!!!#@O7'dKBt8ookXbI4eT&_!D--3
|
|
||||||
O"TY9QN/UoGr##1o2_1\JVkl&=qt!#0z!<:+8dgrr!OKqFV*kqXDK6Os=2uq[jp5S7QqQ8n
|
|
||||||
/fk,q?=kI#pns&kL#64`(!;IXZ\mOG\9ZeQaZ<4bOq6>bFB\pcL!7SpE04`IH&+3M7f#b`k
|
|
||||||
2gHKdzJFjZeaXc]gE??W@SIFqoo%^5A=K2RUFMu2;Dg/hGX!:q<0OC8NTAY.M!<<*"!5;2p
|
|
||||||
6K7>\41L?<Z;`01Fa`u5O8"bA^f7gbo>RXoCUmf>=XjekmS6GLidKkgz1*n,,HL+HEm\?X1
|
|
||||||
'e>3]X-Oe5$]X.on,_I(T5QF2-19Ap<f?@d%8i7m]FR1+zKb&VU=I[>*);&H<YsW^K'C^na
|
|
||||||
aDs[=`O`09f>H%.qdl/F19BB%:I,T*O$<UE!!!!4:EKAjV(aM>43Zg3bnn$R56+0i?nbhFo
|
|
||||||
3c6=bi6ehIChPQIMoru'EA+5!!!SHod`hM\$tB]NlmfY1Nga-<u=(%STFPVbAj:8EkgD8Ap
|
|
||||||
RS5s*OJtmo'2d!!!!a1oHAij$&^MZE^^>>I460d)U+^B)r"Tj8Ho?k+lkLYHf\uEdP?EiA'
|
|
||||||
f-z!'ha?[p@rVTZYFABt;0-eVVZ"8DY]q!6X6co4cmP"'-380<VCH,PuEN4qRbp!!!"0Z/4
|
|
||||||
^ZpG#Y`:VX%B]=2(&NfN.J/c[#bTTA&IQ64"k"Pg?>m3;"?!<<*"!'i.@K>D!D!U_0_A8n`
|
|
||||||
;L\BP]NK*+L7K=QkM"#*P%Hi%[>0?df6In1=2]-e3&-)\1!!#WQOH;GGqG-J=.thG(n!/\%
|
|
||||||
hMdGFWr`_A()jU:ojY[RbILt>#`8MmI7["L;ucmu!9f4%kd\`a]5f!)+XquC!YZsFA,)pDV
|
|
||||||
u(RB`r0@4;Y&/pmI>0&][$rczKaA9JZ5KouqcF4tc/;nYp[#C*q)O3(W<'g7_s`$CRcVS9=
|
|
||||||
P@i25`jJhrnB:[17%[6!<<*"!2'ZB_4SbM4*)K`+_fE/X+U;(F2=ImGb6!!X7Q1!^mFkD0g
|
|
||||||
Ch8A]!Y*T-Ni2('"=7!;&t3a7)rYf5VmV+mIG(ElhM*j1[^LGb6*$/+W>[qh;@=YeH&&`b*
|
|
||||||
/DYg=fT-O9\P!!%Q7"T!n6(uW>\oS$fad=_]'m.S$b#1Ieu,ES"KGicg&C#c[A5P(#@ArO-
|
|
||||||
=8FU9KV[3>'!!%P3nFm;.eo*G?0c6'V`X[,OHLME1XT9m`)A7>2j2UTfCUg#%87i_o^aUr[
|
|
||||||
N;&_Az?rZ!t$Q@f9-23N=,*5)R*OiRc#kSYhIBikOnDp:(_kI7#*6H,T]`/mTp](9o!6CVA
|
|
||||||
Gni<C`sV7p0gn!%(3U'uH/,t+!_Xg@ai)3=T/lH1K[H:!T?dd#6i4%[o*si1aoDDA!!$uuj
|
|
||||||
`CG&h'&fPaG9jlHZrf6Cqr:M^-81E2k7csY*BPeI?.O\zOQCcd113pS8+'kCKJD<;gF`25p
|
|
||||||
[u^*j5UeuT0'i1q&BufieZbs>BauJl@8S9/=OcOrbM!R.KBGK!'gm0?O%)*NH\>ZQ9dYS2`
|
|
||||||
[LUrA&otklXV8KS7:u2kD[j^TXQs'(2YG+t=fA3;J'>];P]0!!!$!%ptr)R.XOUYo19)pU2
|
|
||||||
Ror'GY#7"?XKDhGK9^4<DV1n'O/f*5Wo,QIfE!.YLQ]al18%kCRl2-(KNViBSSr:&OHcm[b
|
|
||||||
K&hkAX!FbkLhln!'Jbp=@8BtmakFdmp]MBgRz'8;Bi7h&eFIE[GeM3WeNN!W^L*kW0akqhc
|
|
||||||
A$E/[)gRnWi2opQYZJ^5T+`]>]W!fIj!rr<$!"]@/Wgiof=!qlKEo8j)VU5VQK>IGAYPZ?2
|
|
||||||
UPIb7eOaRHC^:K,jF(V@zBE056Ih,o4IJegJQjKNHmr6&6gtRmW%e&usLa+&dn_^s^SQDGf
|
|
||||||
m^%fJM1d:E.5l&UiR,<a0)ttP!!(8/`_L%I`I/GU.%VTq=0>\Tm)E&oaN,4TB,M7)cp.0h8
|
|
||||||
M>if#PqXVkC2,-MJ(5AS^Gi)][&>5zNBp$1A/rR:/;L0gmd9D=NSh$WlfG%*h^9`tnNPdEI
|
|
||||||
u+Gl^4,mWoBI!6VH;YXZ=#oJ3sGZb!!&)b)+Q8_G_#[I%T,=d\h1C\]D'BtgTOrg,UME3@&
|
|
||||||
">NQf*#Tc.:,U-B3/UZEWA<1*C=EXlFD+AH2]1!!%$^UFGA+-b,6'&>Q):eac/8pDht0o=;
|
|
||||||
>;@KM!g<J?7uke"<1mb2u4cI<lJ3\BHBck3$al_Y&72&lSr!!#8JA5'Dem3;;P*Fes=m^.)
|
|
||||||
UKWXY]c<\3UoMZ;:bE*5(r>4<4NZG^CEp;O;f$<'3/7SNZ=Y)b@k6CB2&HDe2!'jU*3H,of
|
|
||||||
1THW<n1K5O_tpL?T=<-Vqpdbe?U.eK0c9mOrR'.g:L)MDSN_K1IPB%+l!\:Urq(WqB-dNX!
|
|
||||||
!%NZ\T6YKYDu8cO7s2!al$JUkKVYeFjl&&B-4j8mN3A]che.4`daO9+O'HNbCb.ZY$$3qMN
|
|
||||||
(itXq'4t&7QjJf@Aj;]<?LPU]:Ap!!'UlnO&q"4]ZMDocYY!.uVBA#-V5jb@A_mo4Lhrqsa
|
|
||||||
U>TTA'C>b3f-+Xt2ko\Q-??_$a*S.lRVY^WY1]F*SFc2mtG!!)4&^\>Qo%E:.@#ZH%l>[fK
|
|
||||||
uKAG=rS"7kFhLFkFjepFrp]c6EX9j65NfN^V)g(i*b7dB.[r/pa_Z%o@$!W2X>D&>g&]TbK
|
|
||||||
\M<;X3:@Luz+A37])DuB%480=0U>>IGZl_$<M4@"mkNl@;G^P;DV5":a>e0A!rk17o?MODI
|
|
||||||
#`T+N<n1`UULF<-_T90um_-/WnHna44ZfgWY!9PPi@$-h_WX\r]&T1Z6rrGDgDL_DX55iFz
|
|
||||||
!7DGqQ`t#:IdZ5]7,R7\D)ma3^PB"b1tHg3Uht1Nmp*G3s)P`(cDs^9`dQnCXd^u>`bk[be
|
|
||||||
GmX)`Na!4%bT+^7m9I-:)^AT^4&WAPs%1\F71$An#T]9,U"=npO*q[!!!!Ab@*(AL_4SJ%3
|
|
||||||
c(0Qqj_6(@Tt'=UU:t!rr<$!9f^^7m-=bPk!4fG6%u$A5)Ge9<VZL_Y^JEz!0Zg.H\70)&H
|
|
||||||
p58):i`NbNJl;n&GD.!!!#Ws7$%"C--G<pJE,d+:+<-[<2udrlk77$ig8-!!*"Rkib"<\U1
|
|
||||||
lJ'bLR7N1<m@O2T'bn@f,0zJ?N?7(q.%^['JUSBLEC70g_rmljiBm_>Ddkz!%;*coV>:GA_
|
|
||||||
]e:889j/&q['EIbg=I^%IQ_*>\\U!!!!Qn`ki.L]L9+a,gRY+=^sXaGkY__7]6Ez!'g\G@8
|
|
||||||
ZWnn)QZq6kBJu4HB,j@UnDChdlfg!!!"LBTeMe41AJ'ZEW@QUdPas;'\:Um>i:!bPUE/z!+
|
|
||||||
^*<cDs5o*P%4_&HkC1Aluf*hG8NEhbsOU!!!"L!dkCbRpt^'I>!G"#U2:8VJHbPNT>LH"TS
|
|
||||||
N&!!%lg+.p("knNl3-6b[A0c8#IZ*IKEA^gIn`$F46;#gRr!!&ZSQS1JhgXUlPQkMasKJA+
|
|
||||||
*3b#W;z!.Enno4c)*c.kg\#_F2Kbau*bpsWm4G>/&;!!!"l3q;`sS"7l-=n!Mb+p^&N_DuD
|
|
||||||
/7gJoS40BG0#2])Iz!+7oODnd:?HR8Ek."WR4\r7Kao^pOXhY0P@z^k'joaEc6YEZ^Df#_J
|
|
||||||
klIbqfb&M^reNW9%Z!!%Ng#".st4Z@^k0&\uN71^`&VbcJe-]WHB^*s*`zPMkPDs"W*MgrH
|
|
||||||
?!Jn3P.Z$#Yb+3aUg#QXZ"g:R*W.-j$Hj8WG<Bd[-R7O<=O1UE9jVL+Ls\ThCJn-0V@W>uR
|
|
||||||
J;+a,*2&-Or2FGEgK^qGR/hH@0cCT$Q1T+qB%Jdm3HHl=G7hL0@msI=*m'?[GK(Sa0D^mg/
|
|
||||||
O\1dk\]KopmAN#,j%oaVpg)-=m;oUlJkrM3`^o]n.?8i<5tM%Vr/pcF^63/(nC^f>Af&QmO
|
|
||||||
ZmOVHM^(%GlRi'%]<+2k"Lg?T490YA94>Is(,,Uk]746J5N2AVq6j,P(pD9er"-,[Ek9B!8
|
|
||||||
rEVh@Q/6D-cYQ<`0./?rlgnk0'Go2#mVG]t5qtHMjtB#;21)Rm';fj,).G)#sZ)j4r>]"ga
|
|
||||||
)=cao9oWenXdKbi"hde_5=ct=0q!#[2I(t_]*Cs)PNi7#*0;:4IpH0(lFrVajbV\]=5RB4*
|
|
||||||
(F32;)i7"m*&`+I"._`ZF/bFl'!5Ot`8e(4ErPeEL<sBb!-&o]P9j:^!l1r03cpnfN!+X6\
|
|
||||||
T5Uk0B4^RX=OP8>P*NXnrP>)[5%k-#J7-Y]?[d"Ok2<SNUu8raI-H@;O.jlF!!)e<EZhc&f
|
|
||||||
?"mD<t4Idr(-UN>ghH6,AV%o)cJ1MisPk&#]esOpR8api7#!-i@L.W]4()XY-+AC-P-7Xr4
|
|
||||||
\KZmhX7(&q"_c1^q(.FPEXMSY8h"!!'NaA27/3i,$^2B^cU;dR.beG#A49k<g=L!!$s[ick
|
|
||||||
7-Q.8ZWX<@9t/SPK[q8DR@>poLGPG-;>!!%6Tf<9=`6u+-/b7-X=9DXQ8Z>u]DeQk,I"Vh#
|
|
||||||
f;6R+0j3=FT6B0P06dPI(#.3CW?/Jre3V6GU!!#CNe;8)[cJBCcfTpVd^%QJlm&MY1cOU!U
|
|
||||||
GUS`seDWd>o:FYII.3GDcPFj]Er'<^k[O\p!$8_&JRhJtj0LNKK+Hq(I^aSuD5d?mgu.*uk
|
|
||||||
gKS5!/=9V?[pVH-_I!92Y]Nil.9sQ8#n.9H%[gN!+T%lT%LILZg>c%i5<)^`d;ku@<t.4,R
|
|
||||||
-T-$31&;?I/#qD=?$$Ht%6f6!YC]c(8(JJ'Vj+.0'AG7Qd9p\*%kYoP!`f>oFsL9T)s>4CL
|
|
||||||
GX!.[;\fA"&apD:/KHFB"/&=].p<)_W:rMKVqn0b&fkC`Z#SpT1(ejr0`id"bn4unrL8;4e
|
|
||||||
$!<?O"8Is86EVbALRt;1E;?ld5P);&&>kIPA!!)L)%1Wl>q4dQLIr#WZj@c8Q860X-ZJ?=+
|
|
||||||
5DHn;!<=7k[($!5\8'pN$2MEXIVDcG^0-?Febo3[NR7DP!!$Q8?b5[lW&XMCPdS>/!,9B;1
|
|
||||||
HeoJ>'K"QGNeo=!!(#r6t2h_^tD05Z7>g&Y:lk7h@N=,4WFb.!5`Dbm>)NW:EH,EHomDk2K
|
|
||||||
_@cb2noFHjTiR,K.hG[s)]hCi4Dnn7CQBH6i,i5T.sj:N*2eH(t1:4S2nb!!)rJi8A!a;u=
|
|
||||||
`!Q'95L#2^GsLYA!_q9.[LFhAl`9)3-<!!!l#3]jpq9C$Vq7>%cVdZCqWp;X+n:]Adb-hMf
|
|
||||||
k!!(fH<9h4OX[W\uV`e&lI'\q6@X$^TR_GR&]lj__!2EfnXn[I\B3okW/GPs5i@)%hn/KJQ
|
|
||||||
n`iahe5SC#o^mmPP5kT5+nklrCEI@Uo'D=Pi2_WTcPFg_\81tSSK2"0mi)6,i8I;)#+JAs7
|
|
||||||
9<MS)-Iu-'9R`BcEq8!aX=2,Y(jYf!!%Q.et3d=FlM.5GuZXIXpVn4BT2[rAG*Nc]hN.nP0
|
|
||||||
$\e3s,H_#V<ZlSj(gG/Z?+\C7*29ZmL4[V(]U_rab6i!!!!9EI-Z%@s)/?0AAYgnWgrb(M.
|
|
||||||
R39O1^4Xnf9m;KBQ'VZ6_4^%E`W)GaWi.BJq#e"`3cABi@Og0Aa`I.QH!b/_U(!!!PnqodS
|
|
||||||
@GFj'Hn)]\5n8"%R?'25D,n%n><#f[hmI3uN!!'eGqPj(QrDdKr]tS"Qhu#U@ma4ssf<!)p
|
|
||||||
C8h$0qc5iOPm[QlA@VWW^q$f=je[)Q5@5>Napl&rBnS<W>jg#VhqM14+)AFHB6jRYJ0;FA`
|
|
||||||
K)sr8tn1aZ\sER8IEoDB8Y.S5l*7Gh;'%HH3=3Jpn'(o>s#:bbj#pi4EDt3S"!]jIeCFMLK
|
|
||||||
eZQ\/kFW!rr>2[uRLp7r$AP?bQL8S<De\Q2Z)n`oXokJ*Wu+6g;kfViIq,f,"De^k:saflO
|
|
||||||
eL[^EVgl([pLN6`$KE9U.VA)aM4?N'AgnqOJ`0#d;OKt`QI!!%c1^d,3u_UX;9Rb"\!^\G>
|
|
||||||
kPK%nCdKjU1q#"3"-n?aJq5!.hHX!Bq+9;HB@ng<KJ#qa(p$Paoo;Z,aZYB!*H,2GI1"Fb[
|
|
||||||
q+DO;\$>F1H7`uLm77__6=1<)!!"67It.%;`Qn=tkKC?c/ULu_k6;H6Of[=A3@26)I(ZS_^
|
|
||||||
>VUUHX!DU'EA-k^@_'i``fMbg>B8K6g_LhJ$`TaZ.E4[A<Y'sh;(XQb3G!.DJ<nR80eC+s*
|
|
||||||
k(M!+_PZ5cV/cX1>4Cp;#APd^k^e/!he<S,-5Qn?"BP;^^YPJ#<"3=$J6mel;'"EP*IgrT.
|
|
||||||
h:Ut80=!!'l,De.J'Fas#U&"bf!Wct'bg\>K/H[YR`&*?!b5%@oG9lK#!Aei(pUge1Iebbg
|
|
||||||
Hn(VnE]oAo(jfY(9U&Xoh!!)f#;Q7JOf=P6?>\uOX<e'mlFlfUimiO-<f&XUCYOoiDB^Y"c
|
|
||||||
e(-sn!^CFEl@f)g1Y9AuJ*U<3\#8ud:$W==q#8\5*d[Ht9DYjj?2Mt(\)O+]+TVQC(d@J7U
|
|
||||||
8t>mZ_OS'[3O7CjibY:`uAJXC7B"=)_6-(fN)$[?<VQ^NJ.Vd9CCWek#J7Eb$SAB^\?>e.O
|
|
||||||
hIpos]<JhN7_(CA4@&s7H6ZA$P0np2@\EiR5]joTr4#dGB*loQLfGzzzzzzz&Dhm:o`9!?~>
|
|
||||||
|
|
||||||
Q
|
|
||||||
Q Q
|
|
||||||
showpage
|
|
||||||
%%Trailer
|
|
||||||
end restore
|
|
||||||
%%EOF
|
|
|
@ -1,585 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="104.75715mm"
|
|
||||||
height="57.028595mm"
|
|
||||||
viewBox="0 0 371.18675 202.06983"
|
|
||||||
id="svg2"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.92.1 r15371"
|
|
||||||
sodipodi:docname="Logo-PCLL.svg"
|
|
||||||
inkscape:export-filename="/home/yohann/Documents/stage/Logos/Pôle Logiciel Libre/LogoPLLGrand.png"
|
|
||||||
inkscape:export-xdpi="200.87115"
|
|
||||||
inkscape:export-ydpi="200.87115">
|
|
||||||
<defs
|
|
||||||
id="defs4">
|
|
||||||
<marker
|
|
||||||
style="overflow:visible"
|
|
||||||
id="Arrow1Lend"
|
|
||||||
refX="0"
|
|
||||||
refY="0"
|
|
||||||
orient="auto"
|
|
||||||
inkscape:stockid="Arrow1Lend">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
|
||||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
|
|
||||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
|
||||||
id="path4626" />
|
|
||||||
</marker>
|
|
||||||
<linearGradient
|
|
||||||
osb:paint="solid"
|
|
||||||
id="linearGradient4664">
|
|
||||||
<stop
|
|
||||||
id="stop4666"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
<clipPath
|
|
||||||
id="clipPath3132"
|
|
||||||
clipPathUnits="userSpaceOnUse">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3134"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
id="clipPath3248"
|
|
||||||
clipPathUnits="userSpaceOnUse">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3250"
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
id="clipPath3260"
|
|
||||||
clipPathUnits="userSpaceOnUse">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3262"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
id="clipPath3288"
|
|
||||||
clipPathUnits="userSpaceOnUse">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3290"
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
id="clipPath3304"
|
|
||||||
clipPathUnits="userSpaceOnUse">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3306"
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z" />
|
|
||||||
</clipPath>
|
|
||||||
<linearGradient
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
id="linearGradient4668"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient3315"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
|
|
||||||
y2="926.69495"
|
|
||||||
x2="1341.036"
|
|
||||||
y1="926.69495"
|
|
||||||
x1="1114.8962"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient3440"
|
|
||||||
xlink:href="#linearGradient4664"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<marker
|
|
||||||
inkscape:stockid="Arrow1Lend"
|
|
||||||
orient="auto"
|
|
||||||
refY="0"
|
|
||||||
refX="0"
|
|
||||||
id="Arrow1Lend-7"
|
|
||||||
style="overflow:visible">
|
|
||||||
<path
|
|
||||||
id="path4626-5"
|
|
||||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
|
||||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
|
|
||||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</marker>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3132-0">
|
|
||||||
<path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3134-4"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3248-3">
|
|
||||||
<path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3250-5"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3260-7">
|
|
||||||
<path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3262-3"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3288-4">
|
|
||||||
<path
|
|
||||||
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
|
|
||||||
id="path3290-0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath3304-6">
|
|
||||||
<path
|
|
||||||
d="M 0,600 H 800 V 0 H 0 Z"
|
|
||||||
id="path3306-1"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</clipPath>
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.87885425"
|
|
||||||
inkscape:cx="-47.520975"
|
|
||||||
inkscape:cy="52.746356"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="flowRoot7052-4-9"
|
|
||||||
showgrid="false"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:window-width="1678"
|
|
||||||
inkscape:window-height="1028"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="20"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:snap-global="false"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid4138"
|
|
||||||
originx="-168.73733"
|
|
||||||
originy="-76.130441" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer2"
|
|
||||||
inkscape:label="Calque 2"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-168.73733,-774.16196)" />
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="Calque 4"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-168.73733,-774.16196)" />
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="Calque 3"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-168.73733,-774.16196)" />
|
|
||||||
<g
|
|
||||||
inkscape:label="Calque 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-168.73733,-774.16196)">
|
|
||||||
<g
|
|
||||||
id="g4172"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4174"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4176"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4178"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4180"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4182"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4184"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4186"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4188"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4190"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4192"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4194"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4196"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4198"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<g
|
|
||||||
id="g4200"
|
|
||||||
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
|
|
||||||
<flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4381"
|
|
||||||
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
|
||||||
id="flowRegion4383"
|
|
||||||
style="font-family:sans-serif"><rect
|
|
||||||
id="rect4385"
|
|
||||||
width="164.5"
|
|
||||||
height="46.75"
|
|
||||||
x="242.75"
|
|
||||||
y="422.36221"
|
|
||||||
style="font-family:sans-serif" /></flowRegion><flowPara
|
|
||||||
id="flowPara4387"
|
|
||||||
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g
|
|
||||||
style="display:inline"
|
|
||||||
id="g5969-5"
|
|
||||||
transform="matrix(0.74333811,0.11129858,-0.11129858,0.74333811,-1135.4668,488.39488)">
|
|
||||||
<g
|
|
||||||
transform="translate(0,1500)"
|
|
||||||
inkscape:label="bateau"
|
|
||||||
id="layer1-1-2" />
|
|
||||||
<flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4297-8"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
transform="translate(0,1500)"><flowRegion
|
|
||||||
id="flowRegion4299-4"><rect
|
|
||||||
id="rect4301-4"
|
|
||||||
width="1088"
|
|
||||||
height="416"
|
|
||||||
x="2104"
|
|
||||||
y="1948"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:144px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold'" /></flowRegion><flowPara
|
|
||||||
id="flowPara4303-8"
|
|
||||||
style="font-size:144px;line-height:1.25"> </flowPara></flowRoot> <flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot3677-8"
|
|
||||||
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
|
|
||||||
id="flowRegion3679-2"
|
|
||||||
style="font-family:sans-serif"><rect
|
|
||||||
id="rect3681-7"
|
|
||||||
width="772.16058"
|
|
||||||
height="100.40916"
|
|
||||||
x="2815.6992"
|
|
||||||
y="1956.3104"
|
|
||||||
style="font-family:sans-serif" /></flowRegion><flowPara
|
|
||||||
id="flowPara3683-1"
|
|
||||||
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <flowRoot
|
|
||||||
xml:space="preserve"
|
|
||||||
id="flowRoot4653-7"
|
|
||||||
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
transform="translate(0,1500)"><flowRegion
|
|
||||||
id="flowRegion4655-2"
|
|
||||||
style="font-family:sans-serif"><rect
|
|
||||||
id="rect4657-8"
|
|
||||||
width="408"
|
|
||||||
height="352"
|
|
||||||
x="1732"
|
|
||||||
y="1580"
|
|
||||||
style="font-family:sans-serif" /></flowRegion><flowPara
|
|
||||||
id="flowPara4659-8"
|
|
||||||
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g
|
|
||||||
transform="matrix(3.7418697,0,0,3.7418697,-7038.9947,-4368.125)"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none"
|
|
||||||
id="flowRoot3442-6" />
|
|
||||||
<g
|
|
||||||
id="g3550-3-3-6-3-7-9-3-2-5-0-9"
|
|
||||||
transform="matrix(0.9986786,0,0,0.9986786,450.44451,-1197.2567)"
|
|
||||||
style="display:inline" />
|
|
||||||
</g>
|
|
||||||
<rect
|
|
||||||
style="opacity:1;fill:#000000;fill-opacity:0.94117647;stroke:#483e7e;stroke-width:2.5999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0.30000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94117647"
|
|
||||||
id="rect8980"
|
|
||||||
width="0"
|
|
||||||
height="0"
|
|
||||||
x="0"
|
|
||||||
y="0" />
|
|
||||||
<rect
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.95999995;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#534986;stroke-width:1.83099997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:0.30000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.61711713;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
id="rect4682"
|
|
||||||
width="0"
|
|
||||||
height="0"
|
|
||||||
x="0"
|
|
||||||
y="0" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer5"
|
|
||||||
inkscape:label="Calque 5"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-168.73733,-774.16196)">
|
|
||||||
<g
|
|
||||||
transform="translate(5927.9137,-1112.2775)"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:118.38638306px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.96078431"
|
|
||||||
id="flowRoot4401-3-7-5-3-0-8-5">
|
|
||||||
<g
|
|
||||||
transform="translate(-11640.668,-327.21498)"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
id="flowRoot7052-4-9">
|
|
||||||
<g
|
|
||||||
id="g4868"
|
|
||||||
transform="translate(-10.35097,6.2783949)">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4648-68-3-6-1-9-9"
|
|
||||||
d="m 424.11349,770.54724 c -32.4719,0 -61.2945,15.8724 -79.223,40.2273 h 25.1918 c 14.1484,-13.1505 33.1176,-21.1917 54.0312,-21.1917 20.722,0 39.5416,7.8864 53.6495,20.8217 h 25.3536 c -17.9453,-24.1609 -46.6833,-39.8573 -79.0031,-39.8573 z m -80.7259,154.34754 c 17.7878,25.5659 47.3097,42.3949 80.7259,42.3949 32.244,0 60.8846,-15.6536 78.8356,-39.7185 h -25.3596 c -14.0868,12.8507 -32.8325,20.6887 -53.476,20.6887 -22.0376,0 -41.8989,-8.9359 -56.2509,-23.3651 z"
|
|
||||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:5.32738733;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
transform="translate(5712.7543,1439.4925)" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="rect4696-6-3-6-7-6-2-4"
|
|
||||||
d="m 479.57959,820.58324 v 96.62434 l 68.2492,0.021 v -23.1886 h -41.3604 v -73.45704 z"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:4.89254045;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:50;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
transform="translate(5712.7543,1439.4925)" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="rect4696-6-3-4-3-0-3-6-4"
|
|
||||||
d="m 384.46959,820.53914 v 96.62444 l 68.2493,0.021 v -23.1886 h -41.3605 v -73.45704 z"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:4.89254045;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:50;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
transform="translate(5712.7543,1439.4925)" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8859"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5997.4772,2262.256 q 4.1525,0 6.3525,1.5125 2.2275,1.5125 2.2275,4.73 0,1.6775 -0.605,2.8875 -0.5775,1.1825 -1.705,1.9525 -1.1275,0.7425 -2.75,1.1 -1.6225,0.3575 -3.7125,0.3575 h -1.7325 v 6.71 h -3.465 v -18.7825 q 1.21,-0.275 2.6675,-0.3575 1.485,-0.11 2.7225,-0.11 z m 0.2475,2.9975 q -1.32,0 -2.1725,0.082 v 6.49 h 1.6775 q 2.5025,0 3.85,-0.6875 1.3475,-0.715 1.3475,-2.6675 0,-0.935 -0.3575,-1.5675 -0.3575,-0.6325 -0.99,-0.99 -0.6325,-0.3575 -1.5125,-0.495 -0.8525,-0.165 -1.8425,-0.165 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8861"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6021.5801,2274.301 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z m 0.495,-10.2575 -1.2925,1.4575 -2.7225,-2.2275 -2.695,2.2275 -1.32,-1.4575 4.015,-3.85 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8863"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6030.0131,2281.781 q -1.485,-0.028 -2.475,-0.33 -0.9625,-0.3025 -1.54,-0.8525 -0.5775,-0.5775 -0.825,-1.4025 -0.22,-0.8525 -0.22,-1.925 v -16.555 l 3.3275,-0.55 v 16.4725 q 0,0.605 0.082,1.0175 0.11,0.4125 0.3575,0.715 0.2475,0.275 0.66,0.44 0.44,0.1375 1.1,0.22 l -0.4675,2.75 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8865"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6032.3747,2274.3835 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8867"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6057.8599,2274.2735 q 0,2.2 1.045,3.465 1.045,1.2375 2.8875,1.2375 0.7975,0 1.3475,-0.055 0.5775,-0.082 0.935,-0.165 v -8.25 q -0.44,-0.3025 -1.1825,-0.55 -0.715,-0.275 -1.54,-0.275 -1.815,0 -2.6675,1.2375 -0.825,1.2375 -0.825,3.355 z m 9.5425,6.7925 q -0.99,0.3025 -2.5025,0.55 -1.485,0.2475 -3.135,0.2475 -1.705,0 -3.0525,-0.5225 -1.3475,-0.5225 -2.31,-1.485 -0.935,-0.99 -1.4575,-2.365 -0.495,-1.4025 -0.495,-3.135 0,-1.705 0.4125,-3.08 0.44,-1.4025 1.265,-2.3925 0.825,-0.99 2.0075,-1.5125 1.1825,-0.55 2.7225,-0.55 1.045,0 1.8425,0.2475 0.7975,0.2475 1.375,0.55 v -6.9025 l 3.3275,-0.55 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8869"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6070.8317,2274.3835 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8871"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5921.6147,2316.2935 q -2.145,0 -3.85,-0.66 -1.705,-0.66 -2.8875,-1.925 -1.1825,-1.2925 -1.815,-3.135 -0.6325,-1.8425 -0.6325,-4.235 0,-2.3925 0.715,-4.235 0.7425,-1.8425 2.0075,-3.1075 1.265,-1.2925 2.97,-1.9525 1.705,-0.66 3.6575,-0.66 1.1825,0 2.145,0.1925 0.9625,0.165 1.6775,0.385 0.715,0.22 1.1825,0.4675 0.4675,0.2475 0.66,0.3575 l -1.0175,2.8325 q -0.66,-0.4125 -1.8975,-0.77 -1.21,-0.385 -2.64,-0.385 -1.2375,0 -2.31,0.44 -1.0725,0.4125 -1.87,1.265 -0.77,0.8525 -1.21,2.145 -0.44,1.2925 -0.44,2.9975 0,1.5125 0.33,2.7775 0.3575,1.265 1.0725,2.2 0.715,0.9075 1.815,1.43 1.1,0.495 2.64,0.495 1.8425,0 2.9975,-0.3575 1.155,-0.385 1.7875,-0.715 l 0.935,2.8325 q -0.33,0.22 -0.9075,0.44 -0.55,0.22 -1.32,0.44 -0.77,0.1925 -1.7325,0.3025 -0.9625,0.1375 -2.0625,0.1375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8873"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5943.1747,2308.676 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8875"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5954.7977,2308.3185 q 0,-2.255 -0.5775,-3.245 -0.55,-1.0175 -2.09,-1.0175 -0.55,0 -1.21,0.082 -0.66,0.082 -0.99,0.1375 v 11.605 h -3.3275 v -13.915 q 0.9625,-0.275 2.5025,-0.5225 1.5675,-0.2475 3.3,-0.2475 1.485,0 2.42,0.385 0.9625,0.385 1.595,1.0175 0.3025,-0.22 0.77,-0.4675 0.4675,-0.2475 1.045,-0.44 0.5775,-0.22 1.21,-0.3575 0.66,-0.1375 1.32,-0.1375 1.6775,0 2.75,0.495 1.1,0.4675 1.705,1.3475 0.6325,0.8525 0.8525,2.09 0.2475,1.21 0.2475,2.6675 v 8.085 h -3.3275 v -7.5625 q 0,-2.255 -0.55,-3.245 -0.55,-1.0175 -2.1175,-1.0175 -0.7975,0 -1.5125,0.275 -0.715,0.2475 -1.0725,0.495 0.22,0.6875 0.3025,1.4575 0.083,0.77 0.083,1.65 v 7.9475 h -3.3275 v -7.5625 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8877"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5979.9392,2308.7585 q 0,-2.2275 -1.0175,-3.465 -0.99,-1.2375 -3.2175,-1.2375 -0.4675,0 -0.99,0.055 -0.495,0.028 -0.99,0.165 v 8.2225 q 0.44,0.3025 1.155,0.5775 0.7425,0.2475 1.5675,0.2475 1.815,0 2.64,-1.2375 0.8525,-1.2375 0.8525,-3.3275 z m 3.41,-0.055 q 0,1.65 -0.44,3.025 -0.4125,1.375 -1.21,2.365 -0.7975,0.99 -2.0075,1.54 -1.1825,0.55 -2.695,0.55 -1.0175,0 -1.87,-0.2475 -0.8525,-0.2475 -1.4025,-0.55 v 5.5825 h -3.3275 v -19.0025 q 1.0175,-0.275 2.5025,-0.5225 1.485,-0.2475 3.135,-0.2475 1.705,0 3.0525,0.5225 1.3475,0.5225 2.2825,1.5125 0.9625,0.9625 1.4575,2.365 0.5225,1.375 0.5225,3.1075 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8879"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5985.981,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z m 0.5775,-11.66 -4.4825,4.345 -1.65,-1.485 4.0425,-4.8125 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8881"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6002.2971,2297.7035 3.3275,-0.55 v 4.345 h 5.115 v 2.7775 h -5.115 v 5.8575 q 0,1.7325 0.55,2.475 0.55,0.7425 1.87,0.7425 0.9075,0 1.595,-0.1925 0.715,-0.1925 1.1275,-0.3575 l 0.55,2.64 q -0.5775,0.2475 -1.5125,0.495 -0.935,0.275 -2.2,0.275 -1.54,0 -2.585,-0.4125 -1.0175,-0.4125 -1.6225,-1.1825 -0.605,-0.7975 -0.8525,-1.8975 -0.2475,-1.1275 -0.2475,-2.5575 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8883"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6012.8902,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8885"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6029.3713,2301.966 q 0.9625,-0.275 2.5025,-0.5225 1.54,-0.2475 3.41,-0.2475 1.76,0 2.9425,0.495 1.1825,0.4675 1.87,1.3475 0.715,0.8525 0.99,2.09 0.3025,1.21 0.3025,2.6675 v 8.085 h -3.3275 v -7.5625 q 0,-1.155 -0.165,-1.9525 -0.1375,-0.825 -0.495,-1.32 -0.33,-0.5225 -0.935,-0.7425 -0.5775,-0.2475 -1.43,-0.2475 -0.6325,0 -1.32,0.082 -0.6875,0.082 -1.0175,0.1375 v 11.605 h -3.3275 v -13.915 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8887"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6044.6871,2308.7035 q 0,-1.595 0.495,-2.97 0.495,-1.4025 1.4025,-2.42 0.935,-1.0175 2.255,-1.595 1.32,-0.5775 2.97,-0.5775 2.035,0 3.85,0.7425 l -0.715,2.7225 q -0.5775,-0.2475 -1.32,-0.4125 -0.715,-0.165 -1.54,-0.165 -1.9525,0 -2.97,1.2375 -1.0175,1.21 -1.0175,3.4375 0,2.145 0.9625,3.41 0.9625,1.2375 3.245,1.2375 0.8525,0 1.6775,-0.165 0.825,-0.165 1.43,-0.4125 l 0.4675,2.75 q -0.55,0.275 -1.6775,0.495 -1.1,0.22 -2.2825,0.22 -1.8425,0 -3.2175,-0.55 -1.3475,-0.5775 -2.255,-1.5675 -0.88,-1.0175 -1.32,-2.3925 -0.44,-1.4025 -0.44,-3.025 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8889"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6057.6851,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8891"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5903.8876,2347.2585 v 2.9975 h -12.045 v -19.0575 h 3.465 v 16.06 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8893"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5919.0796,2343.051 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8895"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5925.1201,2342.6935 q 0,2.1175 0.9075,3.1075 0.935,0.9625 2.3925,0.9625 0.7975,0 1.485,-0.22 0.715,-0.22 1.155,-0.5225 v -7.4525 q -0.3575,-0.082 -0.88,-0.1375 -0.5225,-0.082 -1.32,-0.082 -1.815,0 -2.7775,1.21 -0.9625,1.1825 -0.9625,3.135 z m 9.2675,6.105 q 0,3.4375 -1.76,5.0325 -1.7325,1.595 -5.335,1.595 -1.32,0 -2.585,-0.22 -1.2375,-0.22 -2.255,-0.5775 l 0.605,-2.8325 q 0.8525,0.3575 1.925,0.5775 1.1,0.22 2.365,0.22 2.0075,0 2.86,-0.825 0.8525,-0.825 0.8525,-2.4475 v -0.55 q -0.495,0.2475 -1.32,0.495 -0.7975,0.2475 -1.8425,0.2475 -1.375,0 -2.53,-0.44 -1.1275,-0.44 -1.9525,-1.2925 -0.7975,-0.8525 -1.265,-2.1175 -0.44,-1.2925 -0.44,-2.97 0,-1.5675 0.4675,-2.8875 0.495,-1.32 1.4025,-2.255 0.935,-0.935 2.255,-1.4575 1.32,-0.5225 2.9975,-0.5225 1.6225,0 3.08,0.2475 1.4575,0.2475 2.475,0.5225 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8897"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5941.9759,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8899"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5945.3967,2343.0785 q 0,-1.595 0.495,-2.97 0.495,-1.4025 1.4025,-2.42 0.935,-1.0175 2.255,-1.595 1.32,-0.5775 2.97,-0.5775 2.035,0 3.85,0.7425 l -0.715,2.7225 q -0.5775,-0.2475 -1.32,-0.4125 -0.715,-0.165 -1.54,-0.165 -1.9525,0 -2.97,1.2375 -1.0175,1.21 -1.0175,3.4375 0,2.145 0.9625,3.41 0.9625,1.2375 3.245,1.2375 0.8525,0 1.6775,-0.165 0.825,-0.165 1.43,-0.4125 l 0.4675,2.75 q -0.55,0.275 -1.6775,0.495 -1.1,0.22 -2.2825,0.22 -1.8425,0 -3.2175,-0.55 -1.3475,-0.5775 -2.255,-1.5675 -0.88,-1.0175 -1.32,-2.3925 -0.44,-1.4025 -0.44,-3.025 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8901"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5962.5472,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8903"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5965.9679,2343.1335 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8905"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 5987.454,2350.531 q -1.485,-0.028 -2.475,-0.33 -0.9625,-0.3025 -1.54,-0.8525 -0.5775,-0.5775 -0.825,-1.4025 -0.22,-0.8525 -0.22,-1.925 v -16.555 l 3.3275,-0.55 v 16.4725 q 0,0.605 0.082,1.0175 0.11,0.4125 0.3575,0.715 0.2475,0.275 0.66,0.44 0.44,0.1375 1.1,0.22 l -0.4675,2.75 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8907"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6021.6857,2347.2585 v 2.9975 h -12.045 v -19.0575 h 3.465 v 16.06 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8909"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6027.4938,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8911"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6041.2545,2343.0235 q 0,-2.1175 -0.8525,-3.355 -0.825,-1.2375 -2.64,-1.2375 -0.825,0 -1.5675,0.2475 -0.715,0.2475 -1.155,0.55 v 8.2775 q 0.3575,0.082 0.9075,0.165 0.5775,0.055 1.375,0.055 1.8425,0 2.8875,-1.2375 1.045,-1.265 1.045,-3.465 z m 3.41,0.055 q 0,1.7325 -0.5225,3.135 -0.495,1.375 -1.4575,2.365 -0.935,0.99 -2.2825,1.5125 -1.3475,0.5225 -3.0525,0.5225 -1.65,0 -3.1625,-0.2475 -1.485,-0.2475 -2.475,-0.55 v -20.35 l 3.3275,-0.55 v 7.4525 q 0.5775,-0.3025 1.4025,-0.55 0.8525,-0.2475 1.87,-0.2475 1.5125,0 2.695,0.55 1.21,0.5225 2.0075,1.5125 0.7975,0.99 1.21,2.3925 0.44,1.375 0.44,3.0525 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8913"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6056.2889,2338.871 q -0.4125,-0.1375 -1.155,-0.275 -0.715,-0.165 -1.6775,-0.165 -0.55,0 -1.1825,0.11 -0.605,0.11 -0.8525,0.1925 v 11.5225 h -3.3275 v -13.695 q 0.9625,-0.3575 2.3925,-0.66 1.4575,-0.33 3.2175,-0.33 0.33,0 0.77,0.055 0.44,0.027 0.88,0.11 0.44,0.055 0.8525,0.165 0.4125,0.082 0.66,0.165 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path8915"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
|
|
||||||
d="m 6058.3608,2343.1335 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
|
|
||||||
<g
|
|
||||||
transform="matrix(0.68174389,0,0,0.68174389,2141.0659,772.88352)"
|
|
||||||
id="text6302"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
|
||||||
<path
|
|
||||||
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path6307"
|
|
||||||
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="matrix(0.68174389,0,0,0.68174389,2057.4567,807.42681)"
|
|
||||||
id="text6302-8"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
|
||||||
<path
|
|
||||||
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path6307-7"
|
|
||||||
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="matrix(0.67616411,0,0,0.67616411,2173.1135,820.26245)"
|
|
||||||
id="text6302-8-5"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
|
||||||
<path
|
|
||||||
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path6307-7-4"
|
|
||||||
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 46 KiB |
|
@ -1,318 +0,0 @@
|
||||||
%!PS-Adobe-3.0 EPSF-3.0
|
|
||||||
%%BoundingBox: 262 316 372 461
|
|
||||||
%................................
|
|
||||||
%%Creator: GNU Ghostscript 510 (epswrite)
|
|
||||||
%%CreationDate: 1999/12/10 21:20:34
|
|
||||||
%%DocumentData: Clean7Bit
|
|
||||||
%%LanguageLevel: 2
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
% This copyright applies to everything between here and the %%EndProlog:
|
|
||||||
% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
|
|
||||||
%%BeginResource: procset GS_pswrite_ProcSet
|
|
||||||
/GS_pswrite_ProcSet 40 dict dup begin
|
|
||||||
/!{bind def}bind def/X{load def}!
|
|
||||||
/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
|
|
||||||
/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
|
|
||||||
/m/moveto X/l/lineto X/c/curveto X/h/closepath X
|
|
||||||
/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
|
|
||||||
/re{4 -2 roll m exch dup lx exch ly neg lx h}!
|
|
||||||
/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
|
|
||||||
/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
|
|
||||||
/@/currentfile X/|{string readstring pop}!
|
|
||||||
/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
|
|
||||||
/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
|
|
||||||
/Ic{Ix false 1 colorimage}!
|
|
||||||
/@85{@/ASCII85Decode filter}!
|
|
||||||
end def
|
|
||||||
%%EndResource
|
|
||||||
%%EndProlog
|
|
||||||
%%Page: 1 1
|
|
||||||
%%BeginPageSetup
|
|
||||||
save GS_pswrite_ProcSet begin 0.1 0.1 scale
|
|
||||||
%%EndPageSetup
|
|
||||||
0.843137 0.027451 0.317647 rg
|
|
||||||
0 0 m
|
|
||||||
6120 0 l
|
|
||||||
6120 7920 l
|
|
||||||
0 7920 l
|
|
||||||
Y
|
|
||||||
3233.33 4125.86 m
|
|
||||||
3218.39 4125.66 3236.15 4118.18 3255.66 4115.17 c
|
|
||||||
3261.06 4119.39 3265.94 4123.63 3270.29 4127.77 c
|
|
||||||
3258.15 4124.8 3245.79 4124.73 3233.33 4125.86 c
|
|
||||||
f
|
|
||||||
3313.52 4145.85 m
|
|
||||||
3322.43 4158.14 3328.92 4171.58 3331.2 4185.48 c
|
|
||||||
3329.19 4175.58 3323.84 4167.03 3318.76 4157.99 c
|
|
||||||
3290.83 4140.4 3316.12 4168.43 3318.74 4179.1 c
|
|
||||||
3288.72 4141.27 3314.61 4156.42 3313.52 4145.85 c
|
|
||||||
f
|
|
||||||
3343.14 4222.89 m
|
|
||||||
3344.95 4249.8 3337.84 4241.28 3335.46 4231.03 c
|
|
||||||
3338.23 4229.57 3340.44 4212.05 3343.14 4222.89 c
|
|
||||||
f
|
|
||||||
3176.66 4590.68 m
|
|
||||||
3184.64 4589.26 3193.91 4588.16 3192.58 4586.25 c
|
|
||||||
3201.32 4588.18 3203.3 4589.92 3176.66 4590.68 c
|
|
||||||
f
|
|
||||||
3192.58 4586.25 m
|
|
||||||
3186.96 4585.08 l
|
|
||||||
3192.21 4585.56 l
|
|
||||||
3192.58 4586.25 l
|
|
||||||
f
|
|
||||||
3441.26 4212.69 m
|
|
||||||
3442.16 4188.53 3434.21 4176.79 3427.02 4156.03 c
|
|
||||||
3414.1 4149.6 l
|
|
||||||
3403.54 4129.06 3415.15 4136.56 3407.57 4120.23 c
|
|
||||||
3391.05 4105.56 3357.51 4074.34 3346.77 4071.48 c
|
|
||||||
3338.92 4071.65 3352.08 4080.74 3353.8 4084.29 c
|
|
||||||
3331.71 4069.13 3336.06 4061.53 3302.29 4052.3 c
|
|
||||||
3301.3 4054.51 l
|
|
||||||
3218 4015.31 3102.28 4092.98 3103.8 4198.94 c
|
|
||||||
3102.92 4192.22 3101.27 4193.9 3099.43 4191.2 c
|
|
||||||
3095.13 4245.71 3124.61 4300.46 3174.33 4322.85 c
|
|
||||||
3222.96 4346.91 3279.97 4337.05 3314.79 4304.56 c
|
|
||||||
3295.66 4329.62 3257.58 4356.19 3212.45 4353.73 c
|
|
||||||
3168.24 4353.01 3126.88 4324.92 3113.07 4294.41 c
|
|
||||||
3090.43 4280.16 3087.79 4239.45 3077.93 4231.99 c
|
|
||||||
3064.64 4134.39 3102.9 4092.24 3167.63 4042.63 c
|
|
||||||
3177.79 4035.77 3170.49 4034.72 3171.85 4029.5 c
|
|
||||||
3150.35 4039.56 3130.67 4054.76 3114.47 4073.37 c
|
|
||||||
3123.07 4060.8 3132.34 4048.58 3144.33 4038.98 c
|
|
||||||
3124.04 4045.83 3096.95 4088.11 3089.06 4089.83 c
|
|
||||||
3124.01 4027.25 3230.84 3980.08 3286.81 4003.49 c
|
|
||||||
3260.92 4002.53 3228.03 4002.96 3198.94 4013.71 c
|
|
||||||
3186.7 4020 3170.1 4033.01 3173.07 4035.44 c
|
|
||||||
3249.42 4006.93 3328.29 4013.86 3394.36 4066.81 c
|
|
||||||
3411.16 4079.91 3429.52 4102.18 3434.83 4102.48 c
|
|
||||||
3426.85 4090.46 3436.2 4096.7 3430.07 4086.09 c
|
|
||||||
3446.8 4113.1 3422.78 4097.09 3447.37 4132.73 c
|
|
||||||
3456.46 4120.23 l
|
|
||||||
3453.07 4142.67 3484.31 4169.89 3481.12 4205.35 c
|
|
||||||
3488.29 4216.19 3489.11 4193.67 3481.51 4168.73 c
|
|
||||||
3492.06 4196.4 3484.31 4200.85 3487 4223.69 c
|
|
||||||
3489.92 4216.01 3493.78 4207.86 3495.75 4199.75 c
|
|
||||||
3488.88 4226.5 3502.78 4244.78 3506.24 4260.33 c
|
|
||||||
3502.82 4261.83 3495.64 4248.51 3493.98 4280.09 c
|
|
||||||
3494.23 4293.81 3497.8 4287.28 3499.17 4290.66 c
|
|
||||||
3496.49 4292.21 3489.42 4302.73 3485.13 4322.9 c
|
|
||||||
3488.22 4327.65 3493.45 4310.61 3497.69 4309.92 c
|
|
||||||
3494.96 4325.95 3490.26 4338.18 3490.07 4350.49 c
|
|
||||||
3477.67 4376.39 3485.67 4347.03 3475.64 4361.61 c
|
|
||||||
3462.44 4402.75 3486.57 4371.16 3488.21 4389.84 c
|
|
||||||
3508.19 4360.89 3519.59 4315.99 3524.83 4297.4 c
|
|
||||||
3520.83 4320.07 3514.39 4342.04 3506.49 4363.29 c
|
|
||||||
3512.59 4360.72 3496.72 4409.92 3514.4 4377.34 c
|
|
||||||
3495.52 4446.79 3433.62 4511.69 3376.67 4542.13 c
|
|
||||||
3383.62 4535.76 3392.42 4527.76 3389.27 4526.5 c
|
|
||||||
3360.94 4543.35 3365.92 4544.68 3361.85 4551.8 c
|
|
||||||
3338.8 4561.19 3337.27 4551.03 3322 4551.78 c
|
|
||||||
3278.52 4574.86 3270.13 4572.4 3230.1 4586.85 c
|
|
||||||
3231.91 4578.33 l
|
|
||||||
3203.1 4587.93 3198.34 4574.71 3167.21 4578.31 c
|
|
||||||
3165.32 4579.78 3177.19 4583.67 3186.96 4585.08 c
|
|
||||||
3159.11 4581.4 3160.41 4590.58 3133.15 4584.07 c
|
|
||||||
3139.86 4588.78 3146.98 4591.91 3154.14 4595.91 c
|
|
||||||
3131.43 4594.53 3099.9 4582.69 3109.63 4593.47 c
|
|
||||||
3072.58 4576.93 3006.77 4553.72 2969.84 4519.09 c
|
|
||||||
2968.68 4526.85 l
|
|
||||||
2951.76 4506.54 2894.89 4466.19 2890.36 4439.86 c
|
|
||||||
2885.83 4438.81 l
|
|
||||||
2877.04 4423.9 2871.33 4407.01 2864.35 4391.68 c
|
|
||||||
2852.84 4372.05 2847.47 4384.12 2849.11 4381.04 c
|
|
||||||
2826.46 4335.12 2815.19 4296.54 2805.48 4264.88 c
|
|
||||||
2812.4 4254.53 2805.65 4202.56 2808.26 4160.97 c
|
|
||||||
2796.9 3955.53 2952.44 3756.07 3122.46 3710.04 c
|
|
||||||
3147.38 3701.11 3184.43 3701.44 3215.96 3700.55 c
|
|
||||||
3178.77 3711.19 3173.97 3706.17 3137.73 3718.81 c
|
|
||||||
3111.6 3731.13 3105.88 3745.18 3087.36 3761.25 c
|
|
||||||
3094.69 3748.3 l
|
|
||||||
3058.39 3761.15 3073.58 3764.2 3044.04 3773.55 c
|
|
||||||
3051.87 3783.77 l
|
|
||||||
3040.1 3784.67 3020.7 3803.59 3015.4 3814.1 c
|
|
||||||
3002.52 3813.59 l
|
|
||||||
2987.06 3832.66 2978.81 3846.43 2979.42 3857.09 c
|
|
||||||
2975.26 3849.67 l
|
|
||||||
2970.55 3857.75 2918.35 3921.25 2945.43 3906.47 c
|
|
||||||
2940.4 3911.05 2933.71 3913.94 2926.46 3927.13 c
|
|
||||||
2931.97 3933.42 l
|
|
||||||
2918.96 3950.19 2907.99 3971.68 2908.83 3978.84 c
|
|
||||||
2915.78 3969.46 2920.6 3967.7 2925.38 3966.09 c
|
|
||||||
2892.47 4047.73 2890.62 3970.58 2865.71 4049.19 c
|
|
||||||
2870.97 4049.61 l
|
|
||||||
2866.94 4055.72 2864.47 4062.31 2861.23 4068.8 c
|
|
||||||
2863.53 4091.65 l
|
|
||||||
2839.85 4119.01 2856.91 4208.1 2860.34 4256.95 c
|
|
||||||
2862.69 4276.81 2880.11 4297.96 2893.34 4331.13 c
|
|
||||||
2885.28 4332.51 l
|
|
||||||
2900.7 4359.39 2973.3 4440.5 3006.94 4436.34 c
|
|
||||||
3023.23 4456.8 3003.7 4436.42 3000.51 4441.56 c
|
|
||||||
3036.3 4478.59 3047.55 4467.72 3071.7 4474.39 c
|
|
||||||
3097.73 4489.84 3049.35 4468.35 3061.69 4480.28 c
|
|
||||||
3106.72 4491.77 3093.59 4506.42 3152.32 4512.25 c
|
|
||||||
3158.52 4508.73 3137.95 4506.81 3132.79 4502.24 c
|
|
||||||
3170.29 4520.6 3251.48 4516.41 3304.23 4492.06 c
|
|
||||||
3365.41 4463.45 3434.17 4378.92 3436.89 4299.39 c
|
|
||||||
3439.97 4298.56 l
|
|
||||||
3438.41 4266.94 3444.81 4230.37 3433.71 4196.79 c
|
|
||||||
3441.26 4212.69 l
|
|
||||||
f
|
|
||||||
3070.23 4105.36 m
|
|
||||||
3068.12 4094.89 l
|
|
||||||
3077.95 4081.54 3085.75 4067.08 3098.28 4056.68 c
|
|
||||||
3089.26 4074.27 3082.57 4081.54 3070.23 4105.36 c
|
|
||||||
f
|
|
||||||
3093.44 4106.26 m
|
|
||||||
3088.24 4112.02 3085.18 4118.94 3081.72 4125.82 c
|
|
||||||
3085.02 4113.71 3091.78 4103.3 3098.05 4092.7 c
|
|
||||||
3093.44 4106.26 l
|
|
||||||
f
|
|
||||||
3504.27 4195.56 m
|
|
||||||
3502.08 4190.04 l
|
|
||||||
3498.06 4161.46 3489.36 4133.18 3476.03 4106.95 c
|
|
||||||
3490.75 4134.62 3500.25 4164.89 3504.27 4195.56 c
|
|
||||||
f
|
|
||||||
3179.63 4597.85 m
|
|
||||||
3189.73 4601.54 3204.45 4599.88 3215.19 4602.31 c
|
|
||||||
3201.21 4601.14 3187.3 4600.44 3173.57 4598.69 c
|
|
||||||
3179.63 4597.85 l
|
|
||||||
f
|
|
||||||
2824.92 4409.23 m
|
|
||||||
2827.25 4387.69 2808.72 4379.32 2829.02 4393.54 c
|
|
||||||
2839.92 4418.08 2824.78 4400.31 2824.92 4409.23 c
|
|
||||||
f
|
|
||||||
2801.04 4309.49 m
|
|
||||||
2805.73 4323.86 2806.57 4332.48 2808.36 4340.81 c
|
|
||||||
2795.43 4324.27 2802.4 4320.74 2801.04 4309.49 c
|
|
||||||
f
|
|
||||||
0 g
|
|
||||||
2758.02 3347.25 m
|
|
||||||
2757.57 3346.78 2757.57 3272.19 2756.64 3252.72 c
|
|
||||||
2755.72 3236.97 2754.32 3203.15 2720.96 3203.15 c
|
|
||||||
2686.67 3203.15 2678.33 3242.54 2675.55 3259.67 c
|
|
||||||
2672.31 3278.67 2672.31 3294.43 2672.31 3301.37 c
|
|
||||||
2672.31 3323.61 2673.7 3385.72 2726.06 3385.72 c
|
|
||||||
2741.82 3385.72 2750.62 3381.07 2757.57 3377.38 c
|
|
||||||
2758.02 3347.25 l
|
|
||||||
h
|
|
||||||
2623.65 3292.56 m
|
|
||||||
2623.65 3161.9 2693.16 3161.9 2703.35 3161.9 c
|
|
||||||
2732.08 3161.9 2750.62 3177.66 2758.49 3204.98 c
|
|
||||||
2759.42 3163.75 l
|
|
||||||
2768.23 3164.22 2777.03 3165.14 2791.39 3165.14 c
|
|
||||||
2796.49 3165.14 2800.65 3165.14 2804.37 3164.67 c
|
|
||||||
2808.08 3164.67 2811.78 3164.22 2815.95 3163.75 c
|
|
||||||
2808.54 3178.57 2802.98 3211.93 2802.98 3284.24 c
|
|
||||||
2802.98 3354.67 2802.98 3473.75 2809 3509.9 c
|
|
||||||
2792.33 3502.01 2777.95 3496.91 2746.44 3494.14 c
|
|
||||||
2758.95 3480.7 2758.95 3473.75 2758.95 3412.6 c
|
|
||||||
2750.16 3415.37 2739.03 3418.61 2720.03 3418.61 c
|
|
||||||
2637.09 3418.61 2623.65 3346.33 2623.65 3292.56 c
|
|
||||||
f
|
|
||||||
2874.95 3316.21 m
|
|
||||||
2875.42 3354.67 2883.3 3388.97 2916.19 3388.97 c
|
|
||||||
2952.34 3388.97 2955.1 3349.12 2954.18 3316.21 c
|
|
||||||
2874.95 3316.21 l
|
|
||||||
h
|
|
||||||
3000.05 3311.56 m
|
|
||||||
3000.05 3365.78 2989.4 3419.08 2920.82 3419.08 c
|
|
||||||
2826.3 3419.08 2826.3 3314.35 2826.3 3292.11 c
|
|
||||||
2826.3 3198.05 2868.46 3160.98 2939.36 3160.98 c
|
|
||||||
2970.85 3160.98 2986.16 3165.6 2994.5 3167.93 c
|
|
||||||
2994.04 3184.61 2996.35 3195.27 2999.15 3209.63 c
|
|
||||||
2989.4 3203.59 2976.89 3195.72 2949.09 3195.72 c
|
|
||||||
2876.8 3195.72 2875.87 3261.54 2875.87 3284.24 c
|
|
||||||
2999.15 3284.24 l
|
|
||||||
3000.05 3311.56 l
|
|
||||||
f
|
|
||||||
3150.8 3291.64 m
|
|
||||||
3150.8 3248.55 3142.93 3190.62 3089.18 3190.62 c
|
|
||||||
3081.76 3190.62 3072.5 3192.03 3066.48 3193.42 c
|
|
||||||
3065.55 3210.1 3065.55 3238.83 3065.55 3272.19 c
|
|
||||||
3065.55 3312.05 3069.71 3332.87 3072.97 3343.09 c
|
|
||||||
3082.69 3375.98 3104.47 3376.44 3108.63 3376.44 c
|
|
||||||
3143.85 3376.44 3150.8 3327.77 3150.8 3291.64 c
|
|
||||||
h
|
|
||||||
3017.82 3241.13 m
|
|
||||||
3017.82 3206.84 3017.82 3187.38 3012.26 3172.56 c
|
|
||||||
3031.26 3165.14 3054.88 3160.98 3083.16 3160.98 c
|
|
||||||
3101.23 3160.98 3153.59 3160.98 3181.85 3218.89 c
|
|
||||||
3195.29 3245.76 3199.92 3281.91 3199.92 3309.26 c
|
|
||||||
3199.92 3325.94 3198.07 3362.54 3184.63 3385.72 c
|
|
||||||
3171.66 3407.48 3150.8 3418.61 3128.57 3418.61 c
|
|
||||||
3084.08 3418.61 3071.11 3381.54 3064.17 3362.54 c
|
|
||||||
3064.17 3386.17 3064.62 3468.65 3068.32 3510.82 c
|
|
||||||
3038.21 3496.91 3019.66 3494.61 2999.75 3492.75 c
|
|
||||||
3017.82 3485.35 3017.82 3454.75 3017.82 3355.12 c
|
|
||||||
3017.82 3241.13 l
|
|
||||||
f
|
|
||||||
3288.99 3163.75 m
|
|
||||||
3279.73 3165.14 3273.22 3166.07 3259.78 3166.07 c
|
|
||||||
3244.98 3166.07 3234.77 3165.14 3224.12 3163.75 c
|
|
||||||
3228.75 3172.56 3230.6 3176.74 3231.99 3206.84 c
|
|
||||||
3233.85 3248.09 3234.32 3358.38 3231.07 3381.54 c
|
|
||||||
3228.75 3399.16 3224.59 3401.93 3218.1 3406.56 c
|
|
||||||
3256.09 3410.27 3266.76 3413.05 3284.35 3421.39 c
|
|
||||||
3280.65 3401.02 3280.18 3390.8 3280.18 3359.77 c
|
|
||||||
3279.26 3199.88 3278.79 3182.75 3288.99 3163.75 c
|
|
||||||
f
|
|
||||||
3437.37 3294.9 m
|
|
||||||
3436.46 3265.7 3435.99 3245.31 3428.1 3229.1 c
|
|
||||||
3418.37 3208.24 3402.16 3202.23 3390.11 3202.23 c
|
|
||||||
3362.29 3202.23 3356.28 3225.39 3356.28 3248.09 c
|
|
||||||
3356.28 3291.64 3395.21 3294.9 3412.8 3294.9 c
|
|
||||||
3437.37 3294.9 l
|
|
||||||
h
|
|
||||||
3309.93 3237.89 m
|
|
||||||
3309.93 3208.69 3318.74 3179.51 3344.7 3166.99 c
|
|
||||||
3356.28 3161.9 3367.86 3161.9 3371.57 3161.9 c
|
|
||||||
3414.21 3161.9 3428.56 3193.42 3437.37 3212.87 c
|
|
||||||
3436.9 3192.48 3437.37 3179.98 3438.76 3163.75 c
|
|
||||||
3447.1 3164.22 3455.44 3165.14 3469.35 3165.14 c
|
|
||||||
3477.22 3165.14 3484.64 3164.22 3492.51 3163.75 c
|
|
||||||
3487.41 3171.62 3484.64 3176.27 3483.23 3194.34 c
|
|
||||||
3482.31 3211.93 3482.31 3229.55 3482.31 3254.1 c
|
|
||||||
3482.78 3348.63 l
|
|
||||||
3482.78 3383.87 3473.51 3418.61 3403.99 3418.61 c
|
|
||||||
3358.14 3418.61 3331.26 3404.71 3317.82 3397.75 c
|
|
||||||
3323.39 3387.56 3328.02 3378.77 3332.18 3358.83 c
|
|
||||||
3350.26 3374.59 3373.9 3382.93 3397.98 3382.93 c
|
|
||||||
3436.46 3382.93 3436.46 3357.44 3436.46 3321.31 c
|
|
||||||
3427.65 3321.76 3420.22 3322.68 3407.71 3322.68 c
|
|
||||||
3348.86 3322.68 3309.93 3300 3309.93 3237.89 c
|
|
||||||
f
|
|
||||||
3704.27 3209.63 m
|
|
||||||
3704.74 3193.87 3704.74 3177.19 3711.22 3163.75 c
|
|
||||||
3701.02 3164.67 3694.99 3166.07 3676.01 3166.07 c
|
|
||||||
3664.87 3166.07 3658.86 3165.14 3650.05 3163.75 c
|
|
||||||
3651.89 3169.77 3652.84 3172.09 3653.76 3179.98 c
|
|
||||||
3655.15 3190.62 3656.08 3226.31 3656.08 3238.83 c
|
|
||||||
3656.08 3288.87 l
|
|
||||||
3656.08 3310.65 3656.08 3342.17 3654.68 3353.28 c
|
|
||||||
3653.76 3361.15 3651.46 3382.46 3624.56 3382.46 c
|
|
||||||
3598.15 3382.46 3589.36 3363.01 3586.1 3347.25 c
|
|
||||||
3582.41 3331.03 3582.41 3313.42 3582.41 3244.84 c
|
|
||||||
3582.86 3185.53 3582.86 3179.98 3587.49 3163.75 c
|
|
||||||
3579.62 3164.67 3569.89 3165.6 3555.99 3165.6 c
|
|
||||||
3544.85 3165.6 3537.45 3165.14 3528.19 3163.75 c
|
|
||||||
3531.44 3171.17 3533.29 3174.88 3534.21 3200.82 c
|
|
||||||
3535.15 3226.31 3537 3351.43 3532.8 3381.07 c
|
|
||||||
3530.5 3399.16 3525.85 3403.32 3520.77 3407.95 c
|
|
||||||
3558.31 3409.8 3570.34 3415.84 3581.94 3421.85 c
|
|
||||||
3581.94 3372.73 l
|
|
||||||
3587.49 3387.11 3599.07 3419.08 3645.42 3419.08 c
|
|
||||||
3703.35 3419.08 3703.8 3376.91 3704.27 3349.12 c
|
|
||||||
3704.27 3209.63 l
|
|
||||||
f
|
|
||||||
0.843137 0.027451 0.317647 rg
|
|
||||||
3292.9 3486.97 m
|
|
||||||
3254.53 3448.61 l
|
|
||||||
3216.17 3486.97 l
|
|
||||||
3254.53 3525.33 l
|
|
||||||
3292.9 3486.97 l
|
|
||||||
f
|
|
||||||
end showpage restore
|
|
||||||
%%PageTrailer
|
|
||||||
%%Trailer
|
|
||||||
%%Pages: 1
|
|
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 18 KiB |
|
@ -1,56 +0,0 @@
|
||||||
Machine learning
|
|
||||||
=================
|
|
||||||
|
|
||||||
Data science (not big data yet)
|
|
||||||
|
|
||||||
|
|
||||||
some links
|
|
||||||
------------
|
|
||||||
|
|
||||||
numpy, scipy, matplotlib... and scikit
|
|
||||||
|
|
||||||
https://www.scipy.org/install.html
|
|
||||||
https://matplotlib.org/
|
|
||||||
http://scikit-learn.org/stable/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
installation
|
|
||||||
--------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
|
|
||||||
[GCC 7.3.0] on linux
|
|
||||||
Type "help", "copyright", "credits" or "license" for more information.
|
|
||||||
>>> import sys
|
|
||||||
>>> print('Python: {}'.format(sys.version))
|
|
||||||
Python: 3.6.5 (default, Apr 1 2018, 05:46:30)
|
|
||||||
[GCC 7.3.0]
|
|
||||||
>>> import scipy
|
|
||||||
>>> print('scipy: {}'.format(scipy.__version__))
|
|
||||||
scipy: 0.19.1
|
|
||||||
>>> import numpy
|
|
||||||
>>> print('numpy: {}'.format(numpy.__version__))
|
|
||||||
numpy: 1.13.3
|
|
||||||
>>> import matplotlib
|
|
||||||
>>> print('matplotlib: {}'.format(matplotlib.__version__))
|
|
||||||
matplotlib: 2.1.1
|
|
||||||
>>> # pandas
|
|
||||||
...
|
|
||||||
>>> import pandas
|
|
||||||
>>> print('pandas: {}'.format(pandas.__version__))
|
|
||||||
pandas: 0.22.0
|
|
||||||
>>> # scikit-learn
|
|
||||||
... import sklearn
|
|
||||||
|
|
||||||
>>> print('sklearn: {}'.format(sklearn.__version__))
|
|
||||||
sklearn
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
usage
|
|
||||||
-------
|
|
||||||
|
|
||||||
https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
|
|
|
@ -1,20 +0,0 @@
|
||||||
# Minimal makefile for Sphinx documentation
|
|
||||||
#
|
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
|
||||||
SPHINXOPTS =
|
|
||||||
SPHINXBUILD = sphinx-build
|
|
||||||
SPHINXPROJ = pyfun
|
|
||||||
SOURCEDIR = .
|
|
||||||
BUILDDIR = _build
|
|
||||||
|
|
||||||
# Put it first so that "make" without argument is like "make help".
|
|
||||||
help:
|
|
||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
||||||
|
|
||||||
.PHONY: help Makefile
|
|
||||||
|
|
||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
|
||||||
%: Makefile
|
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
|
@ -1,18 +0,0 @@
|
||||||
Algo Fun Doc
|
|
||||||
==============
|
|
||||||
|
|
||||||
|
|
||||||
- install sphinx
|
|
||||||
|
|
||||||
- install the nbsphinx extension
|
|
||||||
|
|
||||||
|
|
||||||
nbsphinx is a Sphinx extension that provides a source parser for *.ipynb files. Custom Sphinx directives are used to show Jupyter Notebook code cells (and of course their results) in both HTML and LaTeX output.
|
|
||||||
Un-evaluated notebooks – i.e. notebooks without stored output cells – will be automatically executed during the Sphinx build process.
|
|
||||||
|
|
||||||
Quick Start::
|
|
||||||
|
|
||||||
Install nbsphinx
|
|
||||||
Edit your conf.py and add 'nbsphinx' to extensions.
|
|
||||||
Edit your index.rst and add the names of your *.ipynb files to the toctree.
|
|
||||||
Run Sphinx!
|
|
|
@ -1,4 +0,0 @@
|
||||||
# Sphinx build info version 1
|
|
||||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
|
||||||
config: ce4136e2523a6d07c59857a39ef0e4cf
|
|
||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
|
|
@ -1,125 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Machine learning — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="pandas" href="pandas.html" />
|
|
||||||
<link rel="prev" title="Liens utiles" href="liens.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="pandas.html" title="pandas"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="liens.html" title="Liens utiles"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="machine-learning">
|
|
||||||
<h1>Machine learning<a class="headerlink" href="#machine-learning" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<p>Data science (not big data yet)</p>
|
|
||||||
<div class="section" id="some-links">
|
|
||||||
<h2>some links<a class="headerlink" href="#some-links" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<p>numpy, scipy, matplotlib… and scikit</p>
|
|
||||||
<p><a class="reference external" href="https://www.scipy.org/install.html">https://www.scipy.org/install.html</a>
|
|
||||||
<a class="reference external" href="https://matplotlib.org/">https://matplotlib.org/</a>
|
|
||||||
<a class="reference external" href="http://scikit-learn.org/stable/">http://scikit-learn.org/stable/</a></p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="installation">
|
|
||||||
<h2>installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">Python</span> <span class="mf">3.6</span><span class="o">.</span><span class="mi">5</span> <span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">Apr</span> <span class="mi">1</span> <span class="mi">2018</span><span class="p">,</span> <span class="mo">05</span><span class="p">:</span><span class="mi">46</span><span class="p">:</span><span class="mi">30</span><span class="p">)</span>
|
|
||||||
<span class="p">[</span><span class="n">GCC</span> <span class="mf">7.3</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span> <span class="n">on</span> <span class="n">linux</span>
|
|
||||||
<span class="n">Type</span> <span class="s2">"help"</span><span class="p">,</span> <span class="s2">"copyright"</span><span class="p">,</span> <span class="s2">"credits"</span> <span class="ow">or</span> <span class="s2">"license"</span> <span class="k">for</span> <span class="n">more</span> <span class="n">information</span><span class="o">.</span>
|
|
||||||
<span class="o">>>></span> <span class="kn">import</span> <span class="nn">sys</span>
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'Python: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version</span><span class="p">))</span>
|
|
||||||
<span class="n">Python</span><span class="p">:</span> <span class="mf">3.6</span><span class="o">.</span><span class="mi">5</span> <span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">Apr</span> <span class="mi">1</span> <span class="mi">2018</span><span class="p">,</span> <span class="mo">05</span><span class="p">:</span><span class="mi">46</span><span class="p">:</span><span class="mi">30</span><span class="p">)</span>
|
|
||||||
<span class="p">[</span><span class="n">GCC</span> <span class="mf">7.3</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span>
|
|
||||||
<span class="o">>>></span> <span class="kn">import</span> <span class="nn">scipy</span>
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'scipy: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
|
|
||||||
<span class="n">scipy</span><span class="p">:</span> <span class="mf">0.19</span><span class="o">.</span><span class="mi">1</span>
|
|
||||||
<span class="o">>>></span> <span class="kn">import</span> <span class="nn">numpy</span>
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'numpy: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
|
|
||||||
<span class="n">numpy</span><span class="p">:</span> <span class="mf">1.13</span><span class="o">.</span><span class="mi">3</span>
|
|
||||||
<span class="o">>>></span> <span class="kn">import</span> <span class="nn">matplotlib</span>
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'matplotlib: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">matplotlib</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
|
|
||||||
<span class="n">matplotlib</span><span class="p">:</span> <span class="mf">2.1</span><span class="o">.</span><span class="mi">1</span>
|
|
||||||
<span class="o">>>></span> <span class="c1"># pandas</span>
|
|
||||||
<span class="o">...</span>
|
|
||||||
<span class="o">>>></span> <span class="kn">import</span> <span class="nn">pandas</span>
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'pandas: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pandas</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
|
|
||||||
<span class="n">pandas</span><span class="p">:</span> <span class="mf">0.22</span><span class="o">.</span><span class="mi">0</span>
|
|
||||||
<span class="o">>>></span> <span class="c1"># scikit-learn</span>
|
|
||||||
<span class="o">...</span> <span class="kn">import</span> <span class="nn">sklearn</span>
|
|
||||||
|
|
||||||
<span class="o">>>></span> <span class="k">print</span><span class="p">(</span><span class="s1">'sklearn: {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sklearn</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
|
|
||||||
<span class="n">sklearn</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="usage">
|
|
||||||
<h2>usage<a class="headerlink" href="#usage" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<p><a class="reference external" href="https://machinelearningmastery.com/machine-learning-in-python-step-by-step/">https://machinelearningmastery.com/machine-learning-in-python-step-by-step/</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="pandas.html" title="pandas"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="liens.html" title="Liens utiles"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 22 KiB |
|
@ -1,56 +0,0 @@
|
||||||
Machine learning
|
|
||||||
=================
|
|
||||||
|
|
||||||
Data science (not big data yet)
|
|
||||||
|
|
||||||
|
|
||||||
some links
|
|
||||||
------------
|
|
||||||
|
|
||||||
numpy, scipy, matplotlib... and scikit
|
|
||||||
|
|
||||||
https://www.scipy.org/install.html
|
|
||||||
https://matplotlib.org/
|
|
||||||
http://scikit-learn.org/stable/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
installation
|
|
||||||
--------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
|
|
||||||
[GCC 7.3.0] on linux
|
|
||||||
Type "help", "copyright", "credits" or "license" for more information.
|
|
||||||
>>> import sys
|
|
||||||
>>> print('Python: {}'.format(sys.version))
|
|
||||||
Python: 3.6.5 (default, Apr 1 2018, 05:46:30)
|
|
||||||
[GCC 7.3.0]
|
|
||||||
>>> import scipy
|
|
||||||
>>> print('scipy: {}'.format(scipy.__version__))
|
|
||||||
scipy: 0.19.1
|
|
||||||
>>> import numpy
|
|
||||||
>>> print('numpy: {}'.format(numpy.__version__))
|
|
||||||
numpy: 1.13.3
|
|
||||||
>>> import matplotlib
|
|
||||||
>>> print('matplotlib: {}'.format(matplotlib.__version__))
|
|
||||||
matplotlib: 2.1.1
|
|
||||||
>>> # pandas
|
|
||||||
...
|
|
||||||
>>> import pandas
|
|
||||||
>>> print('pandas: {}'.format(pandas.__version__))
|
|
||||||
pandas: 0.22.0
|
|
||||||
>>> # scikit-learn
|
|
||||||
... import sklearn
|
|
||||||
|
|
||||||
>>> print('sklearn: {}'.format(sklearn.__version__))
|
|
||||||
sklearn
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
usage
|
|
||||||
-------
|
|
||||||
|
|
||||||
https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
|
|
|
@ -1,34 +0,0 @@
|
||||||
Fil conducteur : 1er tour des élections présidentielles 2017
|
|
||||||
=============================================================
|
|
||||||
|
|
||||||
Le fil conducteur sera l’exploitation de données issues du 1er tour des élections présidentielles qui ont eu lieu en France le 23 avril 2017.
|
|
||||||
|
|
||||||
Les données dont on dispose sont les résultats par canton (plus de 2000 cantons). Pour chaque canton sont donnés
|
|
||||||
|
|
||||||
- le nombre d’inscrits
|
|
||||||
- le nombre de votants
|
|
||||||
- le nombre de bulletins nuls
|
|
||||||
- le nombre de bulletins blancs
|
|
||||||
- le nombre de voix obtenus par chacun des candidats.
|
|
||||||
|
|
||||||
L’objectif est d’établir
|
|
||||||
|
|
||||||
- les résultats au niveau national
|
|
||||||
- la participation
|
|
||||||
|
|
||||||
.. figure:: images/participation_globale.png
|
|
||||||
:width: 650
|
|
||||||
:alt: Participation globale
|
|
||||||
|
|
||||||
- le scores des candidats
|
|
||||||
|
|
||||||
.. figure:: images/scores_1er_tour.png
|
|
||||||
:width: 650
|
|
||||||
:alt: Score des candidats
|
|
||||||
|
|
||||||
|
|
||||||
Ce sera l'occasion de découvrir :
|
|
||||||
|
|
||||||
* les structures itérables, en particulier les tuples et dictionnaires
|
|
||||||
* la lecture et l'écriture de données dans des fichiers
|
|
||||||
* des algorithmes de tris et de recherche.
|
|
|
@ -1,36 +0,0 @@
|
||||||
.. default-role:: literal
|
|
||||||
|
|
||||||
.. meta::
|
|
||||||
|
|
||||||
:description: algo tutorial
|
|
||||||
:keywords: algorithm, python, tutorial
|
|
||||||
|
|
||||||
.. title:: algofundoc
|
|
||||||
|
|
||||||
Algo Fun
|
|
||||||
==========
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
programmation
|
|
||||||
liens
|
|
||||||
MachineLearning
|
|
||||||
pandas
|
|
||||||
|
|
||||||
Indices and tables
|
|
||||||
==================
|
|
||||||
|
|
||||||
* `All modules for which code is available <_modules/index.html>`_
|
|
||||||
* :ref:`genindex`
|
|
||||||
* :ref:`modindex`
|
|
||||||
* :ref:`search`
|
|
||||||
|
|
||||||
.. note:: The pyfun code is licensed under the `LGPL licence`_
|
|
||||||
and this documentation is licensed under the `Creative Commons
|
|
||||||
Attribution-ShareAlike 3.0 Unported License`_\ .
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Creative Commons Attribution-ShareAlike 3.0 Unported License`: http://creativecommons.org/licenses/by-sa/3.0/deed.en_US
|
|
||||||
|
|
||||||
.. _`LGPL licence`: http://www.gnu.org/licenses/lgpl.html
|
|
|
@ -1,16 +0,0 @@
|
||||||
Liens utiles
|
|
||||||
=============
|
|
||||||
|
|
||||||
- random_ datas
|
|
||||||
- pandas_
|
|
||||||
- ploting_
|
|
||||||
- machine_ learning
|
|
||||||
- making_ a machine learning
|
|
||||||
- data_ science
|
|
||||||
|
|
||||||
.. _making: https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
|
|
||||||
.. _data: https://realpython.com/tutorials/data-science/
|
|
||||||
.. _machine: https://realpython.com/tutorials/machine-learning/
|
|
||||||
.. _ploting: https://realpython.com/python-histograms/?__s=o2w1az6ypdj7ogdsnqwf
|
|
||||||
.. _random: https://realpython.com/python-random/?__s=o2w1az6ypdj7ogdsnqwf
|
|
||||||
.. _pandas: https://realpython.com/fast-flexible-pandas/?__s=o2w1az6ypdj7ogdsnqwf
|
|
|
@ -1,229 +0,0 @@
|
||||||
{
|
|
||||||
"cells": [
|
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"The **import** keyword is used to import a library"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 2,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"6.123233995736766e-17\n"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"import math\n",
|
|
||||||
"print(math.cos(math.pi / 2))\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"Pandas\n",
|
|
||||||
"======="
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 1,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/html": [
|
|
||||||
"<div>\n",
|
|
||||||
"<table border=\"1\" class=\"dataframe\">\n",
|
|
||||||
" <thead>\n",
|
|
||||||
" <tr style=\"text-align: right;\">\n",
|
|
||||||
" <th></th>\n",
|
|
||||||
" <th>col1</th>\n",
|
|
||||||
" <th>col2</th>\n",
|
|
||||||
" <th>col3</th>\n",
|
|
||||||
" <th>col4</th>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" </thead>\n",
|
|
||||||
" <tbody>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>line1</th>\n",
|
|
||||||
" <td>-0.882125</td>\n",
|
|
||||||
" <td>2.176452</td>\n",
|
|
||||||
" <td>0.163955</td>\n",
|
|
||||||
" <td>-0.618232</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>line2</th>\n",
|
|
||||||
" <td>-0.721538</td>\n",
|
|
||||||
" <td>0.035578</td>\n",
|
|
||||||
" <td>0.180072</td>\n",
|
|
||||||
" <td>1.015987</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>line3</th>\n",
|
|
||||||
" <td>-1.162355</td>\n",
|
|
||||||
" <td>0.384632</td>\n",
|
|
||||||
" <td>-0.674092</td>\n",
|
|
||||||
" <td>0.162693</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>line4</th>\n",
|
|
||||||
" <td>-1.399455</td>\n",
|
|
||||||
" <td>-0.698512</td>\n",
|
|
||||||
" <td>0.039420</td>\n",
|
|
||||||
" <td>0.898408</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>line5</th>\n",
|
|
||||||
" <td>1.755342</td>\n",
|
|
||||||
" <td>-0.073242</td>\n",
|
|
||||||
" <td>-1.502503</td>\n",
|
|
||||||
" <td>-0.586194</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" </tbody>\n",
|
|
||||||
"</table>\n",
|
|
||||||
"</div>"
|
|
||||||
],
|
|
||||||
"text/plain": [
|
|
||||||
" col1 col2 col3 col4\n",
|
|
||||||
"line1 -0.882125 2.176452 0.163955 -0.618232\n",
|
|
||||||
"line2 -0.721538 0.035578 0.180072 1.015987\n",
|
|
||||||
"line3 -1.162355 0.384632 -0.674092 0.162693\n",
|
|
||||||
"line4 -1.399455 -0.698512 0.039420 0.898408\n",
|
|
||||||
"line5 1.755342 -0.073242 -1.502503 -0.586194"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "display_data"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"import numpy\n",
|
|
||||||
"import pandas\n",
|
|
||||||
"rows = ['line1', 'line2', 'line3', 'line4', 'line5']\n",
|
|
||||||
"cols = ['col1', 'col2', 'col3', 'col4']\n",
|
|
||||||
"from IPython.display import display\n",
|
|
||||||
"dataframe = pandas.DataFrame(numpy.random.randn(5,4), index=rows, columns=cols)\n",
|
|
||||||
"display(dataframe)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"reorganise a **dataframe** from datas as a dictionary with tuples as keys\n",
|
|
||||||
"-----------------------------------------------------------------------------------------------------"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 2,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/html": [
|
|
||||||
"<div>\n",
|
|
||||||
"<style scoped>\n",
|
|
||||||
" .dataframe tbody tr th:only-of-type {\n",
|
|
||||||
" vertical-align: middle;\n",
|
|
||||||
" }\n",
|
|
||||||
"\n",
|
|
||||||
" .dataframe tbody tr th {\n",
|
|
||||||
" vertical-align: top;\n",
|
|
||||||
" }\n",
|
|
||||||
"\n",
|
|
||||||
" .dataframe thead th {\n",
|
|
||||||
" text-align: right;\n",
|
|
||||||
" }\n",
|
|
||||||
"</style>\n",
|
|
||||||
"<table border=\"1\" class=\"dataframe\">\n",
|
|
||||||
" <thead>\n",
|
|
||||||
" <tr style=\"text-align: right;\">\n",
|
|
||||||
" <th></th>\n",
|
|
||||||
" <th>Column 1</th>\n",
|
|
||||||
" <th>Column 2</th>\n",
|
|
||||||
" <th>Column 3</th>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" </thead>\n",
|
|
||||||
" <tbody>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>0</th>\n",
|
|
||||||
" <td>Cerise</td>\n",
|
|
||||||
" <td>Lanister</td>\n",
|
|
||||||
" <td>14</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>1</th>\n",
|
|
||||||
" <td>Paul</td>\n",
|
|
||||||
" <td>Durand</td>\n",
|
|
||||||
" <td>13</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>2</th>\n",
|
|
||||||
" <td>Pierre</td>\n",
|
|
||||||
" <td>Dupont</td>\n",
|
|
||||||
" <td>16</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>3</th>\n",
|
|
||||||
" <td>john</td>\n",
|
|
||||||
" <td>Snow</td>\n",
|
|
||||||
" <td>12</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" </tbody>\n",
|
|
||||||
"</table>\n",
|
|
||||||
"</div>"
|
|
||||||
],
|
|
||||||
"text/plain": [
|
|
||||||
" Column 1 Column 2 Column 3\n",
|
|
||||||
"0 Cerise Lanister 14\n",
|
|
||||||
"1 Paul Durand 13\n",
|
|
||||||
"2 Pierre Dupont 16\n",
|
|
||||||
"3 john Snow 12"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "display_data"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"dico = {('john', 'Snow') : 12, ('Paul', 'Durand') : 13, (\"Pierre\", \"Dupont\") : 16, (\"Cerise\", \"Lanister\") : 14}\n",
|
|
||||||
"import pandas\n",
|
|
||||||
"df = pandas.Series(dico).reset_index()\n",
|
|
||||||
"df.columns = ['Column 1', 'Column 2', 'Column 3']\n",
|
|
||||||
"from IPython.display import display\n",
|
|
||||||
"display(df)"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"metadata": {
|
|
||||||
"kernelspec": {
|
|
||||||
"display_name": "Python 3",
|
|
||||||
"language": "python",
|
|
||||||
"name": "python3"
|
|
||||||
},
|
|
||||||
"language_info": {
|
|
||||||
"codemirror_mode": {
|
|
||||||
"name": "ipython",
|
|
||||||
"version": 3
|
|
||||||
},
|
|
||||||
"file_extension": ".py",
|
|
||||||
"mimetype": "text/x-python",
|
|
||||||
"name": "python",
|
|
||||||
"nbconvert_exporter": "python",
|
|
||||||
"pygments_lexer": "ipython3",
|
|
||||||
"version": "3.6.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nbformat": 4,
|
|
||||||
"nbformat_minor": 2
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
pandas
|
|
||||||
==========
|
|
||||||
|
|
||||||
**examples** in the jupyter_ notebooks
|
|
||||||
|
|
||||||
.. _jupyter: http://jupyter.org/
|
|
||||||
|
|
||||||
ipython and pandas::
|
|
||||||
|
|
||||||
jupyter notebook Pandas.ipynb
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
|
|
||||||
notebooks/Pandas.ipynb
|
|
|
@ -1,61 +0,0 @@
|
||||||
==============================
|
|
||||||
Algorithmes et Programmation
|
|
||||||
==============================
|
|
||||||
|
|
||||||
-----
|
|
||||||
Cours
|
|
||||||
-----
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
fil_conducteur
|
|
||||||
|
|
||||||
|
|
||||||
- Structures de données séquentielles
|
|
||||||
- Ensembles et dictionnaires
|
|
||||||
- Algorithmes de recherche
|
|
||||||
- Les fichiers
|
|
||||||
- Algorithmes de tri
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
----
|
|
||||||
TP
|
|
||||||
----
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- Tester avec doctest
|
|
||||||
- Listes
|
|
||||||
- Gestion d’une promotion d’étudiants
|
|
||||||
- Anagrammes
|
|
||||||
- Analyse d’un fichier texte
|
|
||||||
- Évaluation empirique des tris
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
Documents annexes
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
|
|
||||||
Bibliographie
|
|
||||||
-------------
|
|
||||||
|
|
||||||
* Apprendre à programmer avec Python 3, Gérard Swinnen, editions Eyrolles (Chapitres 1 à 7, et chapitre 10 en partie). `Version électronique téléchargeable <http://inforef.be/swi/python.htm>`_.
|
|
||||||
|
|
||||||
* `Site officiel du langage Python <https://www.python.org/>`_.
|
|
||||||
|
|
||||||
* `Documentation officielle de la version 3.5 de Python <https://docs.python.org/3.5/>`_.
|
|
||||||
|
|
||||||
* `Site officiel de Thonny <http://www.thonny.org/>`_.
|
|
Before Width: | Height: | Size: 673 B |
Before Width: | Height: | Size: 78 B |
|
@ -1,648 +0,0 @@
|
||||||
/*
|
|
||||||
* basic.css
|
|
||||||
* ~~~~~~~~~
|
|
||||||
*
|
|
||||||
* Sphinx stylesheet -- basic theme.
|
|
||||||
*
|
|
||||||
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
||||||
* :license: BSD, see LICENSE for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- main layout ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.clearer {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- relbar ---------------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.related {
|
|
||||||
width: 100%;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related h3 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 0 0 10px;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related li.right {
|
|
||||||
float: right;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- sidebar --------------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper {
|
|
||||||
padding: 10px 5px 0 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
float: left;
|
|
||||||
width: 230px;
|
|
||||||
margin-left: -100%;
|
|
||||||
font-size: 90%;
|
|
||||||
word-wrap: break-word;
|
|
||||||
overflow-wrap : break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul ul,
|
|
||||||
div.sphinxsidebar ul.want-points {
|
|
||||||
margin-left: 20px;
|
|
||||||
list-style: square;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul ul {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar form {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar input {
|
|
||||||
border: 1px solid #98dbcc;
|
|
||||||
font-family: sans-serif;
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar #searchbox input[type="text"] {
|
|
||||||
width: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
border: 0;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- search page ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
ul.search {
|
|
||||||
margin: 10px 0 0 20px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.search li {
|
|
||||||
padding: 5px 0 5px 20px;
|
|
||||||
background-image: url(file.png);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 0 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.search li a {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.search li div.context {
|
|
||||||
color: #888;
|
|
||||||
margin: 2px 0 0 30px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.keywordmatches li.goodmatch a {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- index page ------------------------------------------------------------ */
|
|
||||||
|
|
||||||
table.contentstable {
|
|
||||||
width: 90%;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.contentstable p.biglink {
|
|
||||||
line-height: 150%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.biglink {
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.linkdescr {
|
|
||||||
font-style: italic;
|
|
||||||
padding-top: 5px;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- general index --------------------------------------------------------- */
|
|
||||||
|
|
||||||
table.indextable {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.indextable td {
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.indextable ul {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.indextable > tbody > tr > td > ul {
|
|
||||||
padding-left: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.indextable tr.pcap {
|
|
||||||
height: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.indextable tr.cap {
|
|
||||||
margin-top: 10px;
|
|
||||||
background-color: #f2f2f2;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.toggler {
|
|
||||||
margin-right: 3px;
|
|
||||||
margin-top: 3px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.modindex-jumpbox {
|
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
margin: 1em 0 1em 0;
|
|
||||||
padding: 0.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.genindex-jumpbox {
|
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
margin: 1em 0 1em 0;
|
|
||||||
padding: 0.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- domain module index --------------------------------------------------- */
|
|
||||||
|
|
||||||
table.modindextable td {
|
|
||||||
padding: 2px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- general body styles --------------------------------------------------- */
|
|
||||||
|
|
||||||
div.body p, div.body dd, div.body li, div.body blockquote {
|
|
||||||
-moz-hyphens: auto;
|
|
||||||
-ms-hyphens: auto;
|
|
||||||
-webkit-hyphens: auto;
|
|
||||||
hyphens: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.headerlink {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1:hover > a.headerlink,
|
|
||||||
h2:hover > a.headerlink,
|
|
||||||
h3:hover > a.headerlink,
|
|
||||||
h4:hover > a.headerlink,
|
|
||||||
h5:hover > a.headerlink,
|
|
||||||
h6:hover > a.headerlink,
|
|
||||||
dt:hover > a.headerlink,
|
|
||||||
caption:hover > a.headerlink,
|
|
||||||
p.caption:hover > a.headerlink,
|
|
||||||
div.code-block-caption:hover > a.headerlink {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body p.caption {
|
|
||||||
text-align: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body td {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.first {
|
|
||||||
margin-top: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
margin-top: 30px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left {
|
|
||||||
clear: left;
|
|
||||||
float: left;
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right {
|
|
||||||
clear: right;
|
|
||||||
float: right;
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-left {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- sidebars -------------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin: 0 0 0.5em 1em;
|
|
||||||
border: 1px solid #ddb;
|
|
||||||
padding: 7px 7px 0 7px;
|
|
||||||
background-color: #ffe;
|
|
||||||
width: 40%;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- topics ---------------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
padding: 7px 7px 0 7px;
|
|
||||||
margin: 10px 0 10px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-size: 1.1em;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- admonitions ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.admonition {
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
padding: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition dt {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition dl {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.admonition-title {
|
|
||||||
margin: 0px 10px 5px 0px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body p.centered {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- tables ---------------------------------------------------------------- */
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
border: 0;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.align-center {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table caption span.caption-number {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
table caption span.caption-text {
|
|
||||||
}
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th {
|
|
||||||
padding: 1px 8px 1px 5px;
|
|
||||||
border-top: 0;
|
|
||||||
border-left: 0;
|
|
||||||
border-right: 0;
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote td, table.footnote th {
|
|
||||||
border: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: left;
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.citation td {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- figures --------------------------------------------------------------- */
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin: 0.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.figure p.caption {
|
|
||||||
padding: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.figure p.caption span.caption-number {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.figure p.caption span.caption-text {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- field list styles ----------------------------------------------------- */
|
|
||||||
|
|
||||||
table.field-list td, table.field-list th {
|
|
||||||
border: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.field-list ul {
|
|
||||||
margin: 0;
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.field-list p {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.field-name {
|
|
||||||
-moz-hyphens: manual;
|
|
||||||
-ms-hyphens: manual;
|
|
||||||
-webkit-hyphens: manual;
|
|
||||||
hyphens: manual;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- other body styles ----------------------------------------------------- */
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl {
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd p {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd ul, dd table {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-top: 3px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
margin-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt:target, span.highlighted {
|
|
||||||
background-color: #fbe54e;
|
|
||||||
}
|
|
||||||
|
|
||||||
rect.highlighted {
|
|
||||||
fill: #fbe54e;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.glossary dt {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.optional {
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-paren {
|
|
||||||
font-size: larger;
|
|
||||||
}
|
|
||||||
|
|
||||||
.versionmodified {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.system-message {
|
|
||||||
background-color: #fda;
|
|
||||||
padding: 5px;
|
|
||||||
border: 3px solid red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footnote:target {
|
|
||||||
background-color: #ffa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.line-block {
|
|
||||||
display: block;
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.line-block .line-block {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
margin-left: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guilabel, .menuselection {
|
|
||||||
font-family: sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.accelerator {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.classifier {
|
|
||||||
font-style: oblique;
|
|
||||||
}
|
|
||||||
|
|
||||||
abbr, acronym {
|
|
||||||
border-bottom: dotted 1px;
|
|
||||||
cursor: help;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- code displays --------------------------------------------------------- */
|
|
||||||
|
|
||||||
pre {
|
|
||||||
overflow: auto;
|
|
||||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
|
||||||
}
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
-moz-hyphens: none;
|
|
||||||
-ms-hyphens: none;
|
|
||||||
-webkit-hyphens: none;
|
|
||||||
hyphens: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.linenos pre {
|
|
||||||
padding: 5px 0px;
|
|
||||||
border: 0;
|
|
||||||
background-color: transparent;
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable {
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable td {
|
|
||||||
padding: 0 0.5em 0 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption {
|
|
||||||
padding: 2px 5px;
|
|
||||||
font-size: small;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption code {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption + div > div.highlight > pre {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption span.caption-number {
|
|
||||||
padding: 0.1em 0.3em;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption span.caption-text {
|
|
||||||
}
|
|
||||||
|
|
||||||
div.literal-block-wrapper {
|
|
||||||
padding: 1em 1em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.literal-block-wrapper div.highlight {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.descname {
|
|
||||||
background-color: transparent;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.descclassname {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.xref, a code {
|
|
||||||
background-color: transparent;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.viewcode-link {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.viewcode-back {
|
|
||||||
float: right;
|
|
||||||
font-family: sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.viewcode-block:target {
|
|
||||||
margin: -1px -10px;
|
|
||||||
padding: 0 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- math display ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
img.math {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body div.math p {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.eqno {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.eqno a.headerlink {
|
|
||||||
position: relative;
|
|
||||||
left: 0px;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.math:hover a.headerlink {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- printout stylesheet --------------------------------------------------- */
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
div.document,
|
|
||||||
div.documentwrapper,
|
|
||||||
div.bodywrapper {
|
|
||||||
margin: 0 !important;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar,
|
|
||||||
div.related,
|
|
||||||
div.footer,
|
|
||||||
#top-link {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,490 +0,0 @@
|
||||||
/*
|
|
||||||
* bizstyle.css_t
|
|
||||||
* ~~~~~~~~~~~~~~
|
|
||||||
*
|
|
||||||
* Sphinx stylesheet -- business style theme.
|
|
||||||
*
|
|
||||||
* :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS.
|
|
||||||
* :license: BSD, see LICENSE for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import url("basic.css");
|
|
||||||
|
|
||||||
/* -- page layout ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
|
|
||||||
'Verdana', sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
letter-spacing: -0.01em;
|
|
||||||
line-height: 150%;
|
|
||||||
text-align: center;
|
|
||||||
background-color: white;
|
|
||||||
background-image: url(background_b01.png);
|
|
||||||
color: black;
|
|
||||||
padding: 0;
|
|
||||||
border-right: 1px solid #336699;
|
|
||||||
border-left: 1px solid #336699;
|
|
||||||
|
|
||||||
margin: 0px 40px 0px 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
background-color: white;
|
|
||||||
text-align: left;
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
|
|
||||||
-moz-box-shadow: 2px 2px 5px #000;
|
|
||||||
-webkit-box-shadow: 2px 2px 5px #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.bodywrapper {
|
|
||||||
margin: 0 0 0 240px;
|
|
||||||
border-left: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.5em 20px 20px 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related {
|
|
||||||
font-size: 1em;
|
|
||||||
|
|
||||||
-moz-box-shadow: 2px 2px 5px #000;
|
|
||||||
-webkit-box-shadow: 2px 2px 5px #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul {
|
|
||||||
background-color: #336699;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul li {
|
|
||||||
color: white;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
height: 2em;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul li.right {
|
|
||||||
float: right;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul li a {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 5px 0 5px;
|
|
||||||
line-height: 1.75em;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.related ul li a:hover {
|
|
||||||
color: #fff;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.5em 12px 12px 12px;
|
|
||||||
width: 210px;
|
|
||||||
font-size: 1em;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h3, div.sphinxsidebar h4 {
|
|
||||||
margin: 1em 0 0.5em 0;
|
|
||||||
font-size: 1em;
|
|
||||||
padding: 0.1em 0 0.1em 0.5em;
|
|
||||||
color: white;
|
|
||||||
border: 1px solid #336699;
|
|
||||||
background-color: #336699;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h3 a {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul {
|
|
||||||
padding-left: 1.5em;
|
|
||||||
margin-top: 7px;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 130%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul ul {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar input {
|
|
||||||
border: 1px solid #336699;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.footer {
|
|
||||||
background-color: white;
|
|
||||||
color: #336699;
|
|
||||||
padding: 3px 8px 3px 0;
|
|
||||||
clear: both;
|
|
||||||
font-size: 0.8em;
|
|
||||||
text-align: right;
|
|
||||||
border-bottom: 1px solid #336699;
|
|
||||||
|
|
||||||
-moz-box-shadow: 2px 2px 5px #000;
|
|
||||||
-webkit-box-shadow: 2px 2px 5px #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.footer a {
|
|
||||||
color: #336699;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- body styles ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0.8em 0 0.5em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #336699;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #336699;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body a {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3 {
|
|
||||||
color: #336699;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.7em 0 0.3em 0;
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin: 1.3em 0 0.2em 0;
|
|
||||||
font-size: 1.35em;
|
|
||||||
padding-bottom: .5em;
|
|
||||||
border-bottom: 1px solid #336699;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin: 1em 0 -0.3em 0;
|
|
||||||
font-size: 1.2em;
|
|
||||||
padding-bottom: .3em;
|
|
||||||
border-bottom: 1px solid #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body h1 a, div.body h2 a, div.body h3 a,
|
|
||||||
div.body h4 a, div.body h5 a, div.body h6 a {
|
|
||||||
color: black!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 a.anchor, h2 a.anchor, h3 a.anchor,
|
|
||||||
h4 a.anchor, h5 a.anchor, h6 a.anchor {
|
|
||||||
display: none;
|
|
||||||
margin: 0 0 0 0.3em;
|
|
||||||
padding: 0 0.2em 0 0.2em;
|
|
||||||
color: #aaa!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
|
|
||||||
h5:hover a.anchor, h6:hover a.anchor {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
|
|
||||||
h5 a.anchor:hover, h6 a.anchor:hover {
|
|
||||||
color: #777;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.headerlink {
|
|
||||||
color: #c60f0f!important;
|
|
||||||
font-size: 1em;
|
|
||||||
margin-left: 6px;
|
|
||||||
padding: 0 4px 0 4px;
|
|
||||||
text-decoration: none!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.headerlink:hover {
|
|
||||||
background-color: #ccc;
|
|
||||||
color: white!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
cite, code, tt {
|
|
||||||
font-family: 'Consolas', 'Deja Vu Sans Mono',
|
|
||||||
'Bitstream Vera Sans Mono', monospace;
|
|
||||||
font-size: 0.95em;
|
|
||||||
letter-spacing: 0.01em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background-color: #F2F2F2;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.descname, code.descclassname, code.xref {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
border: 1px solid #abc;
|
|
||||||
margin: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a code {
|
|
||||||
border: 0;
|
|
||||||
color: #CA7900;
|
|
||||||
}
|
|
||||||
|
|
||||||
a code:hover {
|
|
||||||
color: #2491CF;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
background-color: transparent !important;
|
|
||||||
font-family: 'Consolas', 'Deja Vu Sans Mono',
|
|
||||||
'Bitstream Vera Sans Mono', monospace;
|
|
||||||
font-size: 0.95em;
|
|
||||||
letter-spacing: 0.015em;
|
|
||||||
line-height: 120%;
|
|
||||||
padding: 0.5em;
|
|
||||||
border-right: 5px solid #ccc;
|
|
||||||
border-left: 5px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.linenos pre {
|
|
||||||
padding: 0.5em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.quotebar {
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
max-width: 250px;
|
|
||||||
float: right;
|
|
||||||
padding: 2px 7px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
margin: 0 -0.5em 0 -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table td, table th {
|
|
||||||
padding: 0.2em 0.5em 0.2em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition {
|
|
||||||
font-size: 0.9em;
|
|
||||||
margin: 1em 0 1em 0;
|
|
||||||
border: 3px solid #cccccc;
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition p {
|
|
||||||
margin: 0.5em 1em 0.5em 1em;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition li p {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition pre, div.warning pre {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.highlight {
|
|
||||||
margin: 0.4em 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition p.admonition-title {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.1em 0 0.1em 0.5em;
|
|
||||||
color: white;
|
|
||||||
border-bottom: 3px solid #cccccc;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #165e83;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.danger { border: 3px solid #f0908d; background-color: #f0cfa0; }
|
|
||||||
div.error { border: 3px solid #f0908d; background-color: #ede4cd; }
|
|
||||||
div.warning { border: 3px solid #f8b862; background-color: #f0cfa0; }
|
|
||||||
div.caution { border: 3px solid #f8b862; background-color: #ede4cd; }
|
|
||||||
div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; }
|
|
||||||
div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; }
|
|
||||||
div.note { border: 3px solid #f0cfa0; background-color: #f3f3f3; }
|
|
||||||
div.hint { border: 3px solid #bed2c3; background-color: #f3f3f3; }
|
|
||||||
div.tip { border: 3px solid #bed2c3; background-color: #f3f3f3; }
|
|
||||||
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title {
|
|
||||||
background-color: #b7282e;
|
|
||||||
border-bottom: 3px solid #f0908d;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.caution p.admonition-title,
|
|
||||||
div.warning p.admonition-title,
|
|
||||||
div.attention p.admonition-title {
|
|
||||||
background-color: #f19072;
|
|
||||||
border-bottom: 3px solid #f8b862;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.note p.admonition-title, div.important p.admonition-title {
|
|
||||||
background-color: #f8b862;
|
|
||||||
border-bottom: 3px solid #f0cfa0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.hint p.admonition-title, div.tip p.admonition-title {
|
|
||||||
background-color: #7ebea5;
|
|
||||||
border-bottom: 3px solid #bed2c3;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition ul, div.admonition ol,
|
|
||||||
div.warning ul, div.warning ol {
|
|
||||||
margin: 0.1em 0.5em 0.5em 3em;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.versioninfo {
|
|
||||||
margin: 1em 0 0 0;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
background-color: #DDEAF0;
|
|
||||||
padding: 8px;
|
|
||||||
line-height: 1.3em;
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.viewcode-back {
|
|
||||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
|
|
||||||
'Verdana', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.viewcode-block:target {
|
|
||||||
background-color: #f4debf;
|
|
||||||
border-top: 1px solid #ac9;
|
|
||||||
border-bottom: 1px solid #ac9;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.versionchanged span.versionmodified {
|
|
||||||
font-size: 0.9em;
|
|
||||||
margin-right: 0.2em;
|
|
||||||
padding: 0.1em;
|
|
||||||
background-color: #DCE6A0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- table styles ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin: 1em 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 1px solid white;
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th {
|
|
||||||
padding: 1px 8px 1px 5px;
|
|
||||||
border-top: 0;
|
|
||||||
border-left: 0;
|
|
||||||
border-right: 1px solid white;
|
|
||||||
border-bottom: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.docutils td p {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.field-list td, table.field-list th {
|
|
||||||
border: 0 !important;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote td, table.footnote th {
|
|
||||||
border: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
color: white;
|
|
||||||
text-align: left;
|
|
||||||
padding-right: 5px;
|
|
||||||
background-color: #82A0BE;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.literal-block-wrapper div.code-block-caption {
|
|
||||||
background-color: #EEE;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #CCC;
|
|
||||||
border-width: 1px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WIDE DESKTOP STYLE */
|
|
||||||
@media only screen and (min-width: 1176px) {
|
|
||||||
body {
|
|
||||||
margin: 0 40px 0 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TABLET STYLE */
|
|
||||||
@media only screen and (min-width: 768px) and (max-width: 991px) {
|
|
||||||
body {
|
|
||||||
margin: 0 40px 0 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MOBILE LAYOUT (PORTRAIT/320px) */
|
|
||||||
@media only screen and (max-width: 767px) {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
div.bodywrapper {
|
|
||||||
margin: 0;
|
|
||||||
width: 100%;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
div.sphinxsidebar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MOBILE LAYOUT (LANDSCAPE/480px) */
|
|
||||||
@media only screen and (min-width: 480px) and (max-width: 767px) {
|
|
||||||
body {
|
|
||||||
margin: 0 20px 0 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* RETINA OVERRIDES */
|
|
||||||
@media
|
|
||||||
only screen and (-webkit-min-device-pixel-ratio: 2),
|
|
||||||
only screen and (min-device-pixel-ratio: 2) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- end ------------------------------------------------------------------- */
|
|
|
@ -1,41 +0,0 @@
|
||||||
//
|
|
||||||
// bizstyle.js
|
|
||||||
// ~~~~~~~~~~~
|
|
||||||
//
|
|
||||||
// Sphinx javascript -- for bizstyle theme.
|
|
||||||
//
|
|
||||||
// This theme was created by referring to 'sphinxdoc'
|
|
||||||
//
|
|
||||||
// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS.
|
|
||||||
// :license: BSD, see LICENSE for details.
|
|
||||||
//
|
|
||||||
$(document).ready(function(){
|
|
||||||
if (navigator.userAgent.indexOf('iPhone') > 0 ||
|
|
||||||
navigator.userAgent.indexOf('Android') > 0) {
|
|
||||||
$("li.nav-item-0 a").text("Top");
|
|
||||||
}
|
|
||||||
|
|
||||||
$("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){
|
|
||||||
if (item.text.length > 20) {
|
|
||||||
var tmpstr = item.text
|
|
||||||
$(item).attr("title", tmpstr);
|
|
||||||
$(item).text(tmpstr.substr(0, 17) + "...");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){
|
|
||||||
if (item.text.length > 20) {
|
|
||||||
var tmpstr = item.text
|
|
||||||
$(item).attr("title", tmpstr);
|
|
||||||
$(item).text(tmpstr.substr(0, 17) + "...");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(window).resize(function(){
|
|
||||||
if ($(window).width() <= 776) {
|
|
||||||
$("li.nav-item-0 a").text("Top");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$("li.nav-item-0 a").text("algofun documentation");
|
|
||||||
}
|
|
||||||
});
|
|
Before Width: | Height: | Size: 756 B |
Before Width: | Height: | Size: 829 B |
Before Width: | Height: | Size: 641 B |
|
@ -1,311 +0,0 @@
|
||||||
/*
|
|
||||||
* doctools.js
|
|
||||||
* ~~~~~~~~~~~
|
|
||||||
*
|
|
||||||
* Sphinx JavaScript utilities for all documentation.
|
|
||||||
*
|
|
||||||
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
||||||
* :license: BSD, see LICENSE for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* select a different prefix for underscore
|
|
||||||
*/
|
|
||||||
$u = _.noConflict();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* make the code below compatible with browsers without
|
|
||||||
* an installed firebug like debugger
|
|
||||||
if (!window.console || !console.firebug) {
|
|
||||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
|
||||||
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
|
|
||||||
"profile", "profileEnd"];
|
|
||||||
window.console = {};
|
|
||||||
for (var i = 0; i < names.length; ++i)
|
|
||||||
window.console[names[i]] = function() {};
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* small helper function to urldecode strings
|
|
||||||
*/
|
|
||||||
jQuery.urldecode = function(x) {
|
|
||||||
return decodeURIComponent(x).replace(/\+/g, ' ');
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* small helper function to urlencode strings
|
|
||||||
*/
|
|
||||||
jQuery.urlencode = encodeURIComponent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function returns the parsed url parameters of the
|
|
||||||
* current request. Multiple values per key are supported,
|
|
||||||
* it will always return arrays of strings for the value parts.
|
|
||||||
*/
|
|
||||||
jQuery.getQueryParameters = function(s) {
|
|
||||||
if (typeof s === 'undefined')
|
|
||||||
s = document.location.search;
|
|
||||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
|
||||||
var result = {};
|
|
||||||
for (var i = 0; i < parts.length; i++) {
|
|
||||||
var tmp = parts[i].split('=', 2);
|
|
||||||
var key = jQuery.urldecode(tmp[0]);
|
|
||||||
var value = jQuery.urldecode(tmp[1]);
|
|
||||||
if (key in result)
|
|
||||||
result[key].push(value);
|
|
||||||
else
|
|
||||||
result[key] = [value];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* highlight a given string on a jquery object by wrapping it in
|
|
||||||
* span elements with the given class name.
|
|
||||||
*/
|
|
||||||
jQuery.fn.highlightText = function(text, className) {
|
|
||||||
function highlight(node, addItems) {
|
|
||||||
if (node.nodeType === 3) {
|
|
||||||
var val = node.nodeValue;
|
|
||||||
var pos = val.toLowerCase().indexOf(text);
|
|
||||||
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
|
|
||||||
var span;
|
|
||||||
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
|
|
||||||
if (isInSVG) {
|
|
||||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
|
||||||
} else {
|
|
||||||
span = document.createElement("span");
|
|
||||||
span.className = className;
|
|
||||||
}
|
|
||||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
|
||||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
|
||||||
document.createTextNode(val.substr(pos + text.length)),
|
|
||||||
node.nextSibling));
|
|
||||||
node.nodeValue = val.substr(0, pos);
|
|
||||||
if (isInSVG) {
|
|
||||||
var bbox = span.getBBox();
|
|
||||||
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
|
||||||
rect.x.baseVal.value = bbox.x;
|
|
||||||
rect.y.baseVal.value = bbox.y;
|
|
||||||
rect.width.baseVal.value = bbox.width;
|
|
||||||
rect.height.baseVal.value = bbox.height;
|
|
||||||
rect.setAttribute('class', className);
|
|
||||||
var parentOfText = node.parentNode.parentNode;
|
|
||||||
addItems.push({
|
|
||||||
"parent": node.parentNode,
|
|
||||||
"target": rect});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!jQuery(node).is("button, select, textarea")) {
|
|
||||||
jQuery.each(node.childNodes, function() {
|
|
||||||
highlight(this, addItems);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var addItems = [];
|
|
||||||
var result = this.each(function() {
|
|
||||||
highlight(this, addItems);
|
|
||||||
});
|
|
||||||
for (var i = 0; i < addItems.length; ++i) {
|
|
||||||
jQuery(addItems[i].parent).before(addItems[i].target);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* backward compatibility for jQuery.browser
|
|
||||||
* This will be supported until firefox bug is fixed.
|
|
||||||
*/
|
|
||||||
if (!jQuery.browser) {
|
|
||||||
jQuery.uaMatch = function(ua) {
|
|
||||||
ua = ua.toLowerCase();
|
|
||||||
|
|
||||||
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(msie) ([\w.]+)/.exec(ua) ||
|
|
||||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
|
||||||
[];
|
|
||||||
|
|
||||||
return {
|
|
||||||
browser: match[ 1 ] || "",
|
|
||||||
version: match[ 2 ] || "0"
|
|
||||||
};
|
|
||||||
};
|
|
||||||
jQuery.browser = {};
|
|
||||||
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Small JavaScript module for the documentation.
|
|
||||||
*/
|
|
||||||
var Documentation = {
|
|
||||||
|
|
||||||
init : function() {
|
|
||||||
this.fixFirefoxAnchorBug();
|
|
||||||
this.highlightSearchWords();
|
|
||||||
this.initIndexTable();
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* i18n support
|
|
||||||
*/
|
|
||||||
TRANSLATIONS : {},
|
|
||||||
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
|
|
||||||
LOCALE : 'unknown',
|
|
||||||
|
|
||||||
// gettext and ngettext don't access this so that the functions
|
|
||||||
// can safely bound to a different name (_ = Documentation.gettext)
|
|
||||||
gettext : function(string) {
|
|
||||||
var translated = Documentation.TRANSLATIONS[string];
|
|
||||||
if (typeof translated === 'undefined')
|
|
||||||
return string;
|
|
||||||
return (typeof translated === 'string') ? translated : translated[0];
|
|
||||||
},
|
|
||||||
|
|
||||||
ngettext : function(singular, plural, n) {
|
|
||||||
var translated = Documentation.TRANSLATIONS[singular];
|
|
||||||
if (typeof translated === 'undefined')
|
|
||||||
return (n == 1) ? singular : plural;
|
|
||||||
return translated[Documentation.PLURALEXPR(n)];
|
|
||||||
},
|
|
||||||
|
|
||||||
addTranslations : function(catalog) {
|
|
||||||
for (var key in catalog.messages)
|
|
||||||
this.TRANSLATIONS[key] = catalog.messages[key];
|
|
||||||
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
|
|
||||||
this.LOCALE = catalog.locale;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add context elements like header anchor links
|
|
||||||
*/
|
|
||||||
addContextElements : function() {
|
|
||||||
$('div[id] > :header:first').each(function() {
|
|
||||||
$('<a class="headerlink">\u00B6</a>').
|
|
||||||
attr('href', '#' + this.id).
|
|
||||||
attr('title', _('Permalink to this headline')).
|
|
||||||
appendTo(this);
|
|
||||||
});
|
|
||||||
$('dt[id]').each(function() {
|
|
||||||
$('<a class="headerlink">\u00B6</a>').
|
|
||||||
attr('href', '#' + this.id).
|
|
||||||
attr('title', _('Permalink to this definition')).
|
|
||||||
appendTo(this);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* workaround a firefox stupidity
|
|
||||||
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
|
|
||||||
*/
|
|
||||||
fixFirefoxAnchorBug : function() {
|
|
||||||
if (document.location.hash && $.browser.mozilla)
|
|
||||||
window.setTimeout(function() {
|
|
||||||
document.location.href += '';
|
|
||||||
}, 10);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* highlight the search words provided in the url in the text
|
|
||||||
*/
|
|
||||||
highlightSearchWords : function() {
|
|
||||||
var params = $.getQueryParameters();
|
|
||||||
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
|
|
||||||
if (terms.length) {
|
|
||||||
var body = $('div.body');
|
|
||||||
if (!body.length) {
|
|
||||||
body = $('body');
|
|
||||||
}
|
|
||||||
window.setTimeout(function() {
|
|
||||||
$.each(terms, function() {
|
|
||||||
body.highlightText(this.toLowerCase(), 'highlighted');
|
|
||||||
});
|
|
||||||
}, 10);
|
|
||||||
$('<p class="highlight-link"><a href="javascript:Documentation.' +
|
|
||||||
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
|
|
||||||
.appendTo($('#searchbox'));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* init the domain index toggle buttons
|
|
||||||
*/
|
|
||||||
initIndexTable : function() {
|
|
||||||
var togglers = $('img.toggler').click(function() {
|
|
||||||
var src = $(this).attr('src');
|
|
||||||
var idnum = $(this).attr('id').substr(7);
|
|
||||||
$('tr.cg-' + idnum).toggle();
|
|
||||||
if (src.substr(-9) === 'minus.png')
|
|
||||||
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
|
|
||||||
else
|
|
||||||
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
|
|
||||||
}).css('display', '');
|
|
||||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
|
|
||||||
togglers.click();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* helper function to hide the search marks again
|
|
||||||
*/
|
|
||||||
hideSearchWords : function() {
|
|
||||||
$('#searchbox .highlight-link').fadeOut(300);
|
|
||||||
$('span.highlighted').removeClass('highlighted');
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* make the url absolute
|
|
||||||
*/
|
|
||||||
makeURL : function(relativeURL) {
|
|
||||||
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the current relative url
|
|
||||||
*/
|
|
||||||
getCurrentURL : function() {
|
|
||||||
var path = document.location.pathname;
|
|
||||||
var parts = path.split(/\//);
|
|
||||||
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
|
|
||||||
if (this === '..')
|
|
||||||
parts.pop();
|
|
||||||
});
|
|
||||||
var url = parts.join('/');
|
|
||||||
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
initOnKeyListeners: function() {
|
|
||||||
$(document).keyup(function(event) {
|
|
||||||
var activeElementType = document.activeElement.tagName;
|
|
||||||
// don't navigate when in search box or textarea
|
|
||||||
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
|
|
||||||
switch (event.keyCode) {
|
|
||||||
case 37: // left
|
|
||||||
var prevHref = $('link[rel="prev"]').prop('href');
|
|
||||||
if (prevHref) {
|
|
||||||
window.location.href = prevHref;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 39: // right
|
|
||||||
var nextHref = $('link[rel="next"]').prop('href');
|
|
||||||
if (nextHref) {
|
|
||||||
window.location.href = nextHref;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// quick alias for translations
|
|
||||||
_ = Documentation.gettext;
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
Documentation.init();
|
|
||||||
});
|
|
Before Width: | Height: | Size: 222 B |
Before Width: | Height: | Size: 202 B |
Before Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 90 B |
Before Width: | Height: | Size: 90 B |
|
@ -1,39 +0,0 @@
|
||||||
.highlight .hll { background-color: #ffffcc }
|
|
||||||
.highlight { background: #ffffff; }
|
|
||||||
.highlight .c { font-style: italic } /* Comment */
|
|
||||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
|
||||||
.highlight .k { font-weight: bold } /* Keyword */
|
|
||||||
.highlight .ch { font-style: italic } /* Comment.Hashbang */
|
|
||||||
.highlight .cm { font-style: italic } /* Comment.Multiline */
|
|
||||||
.highlight .cpf { font-style: italic } /* Comment.PreprocFile */
|
|
||||||
.highlight .c1 { font-style: italic } /* Comment.Single */
|
|
||||||
.highlight .cs { font-style: italic } /* Comment.Special */
|
|
||||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
|
||||||
.highlight .gh { font-weight: bold } /* Generic.Heading */
|
|
||||||
.highlight .gp { font-weight: bold } /* Generic.Prompt */
|
|
||||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
|
||||||
.highlight .gu { font-weight: bold } /* Generic.Subheading */
|
|
||||||
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
|
||||||
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
|
||||||
.highlight .kn { font-weight: bold } /* Keyword.Namespace */
|
|
||||||
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
|
||||||
.highlight .s { font-style: italic } /* Literal.String */
|
|
||||||
.highlight .nc { font-weight: bold } /* Name.Class */
|
|
||||||
.highlight .ni { font-weight: bold } /* Name.Entity */
|
|
||||||
.highlight .ne { font-weight: bold } /* Name.Exception */
|
|
||||||
.highlight .nn { font-weight: bold } /* Name.Namespace */
|
|
||||||
.highlight .nt { font-weight: bold } /* Name.Tag */
|
|
||||||
.highlight .ow { font-weight: bold } /* Operator.Word */
|
|
||||||
.highlight .sa { font-style: italic } /* Literal.String.Affix */
|
|
||||||
.highlight .sb { font-style: italic } /* Literal.String.Backtick */
|
|
||||||
.highlight .sc { font-style: italic } /* Literal.String.Char */
|
|
||||||
.highlight .dl { font-style: italic } /* Literal.String.Delimiter */
|
|
||||||
.highlight .sd { font-style: italic } /* Literal.String.Doc */
|
|
||||||
.highlight .s2 { font-style: italic } /* Literal.String.Double */
|
|
||||||
.highlight .se { font-weight: bold; font-style: italic } /* Literal.String.Escape */
|
|
||||||
.highlight .sh { font-style: italic } /* Literal.String.Heredoc */
|
|
||||||
.highlight .si { font-weight: bold; font-style: italic } /* Literal.String.Interpol */
|
|
||||||
.highlight .sx { font-style: italic } /* Literal.String.Other */
|
|
||||||
.highlight .sr { font-style: italic } /* Literal.String.Regex */
|
|
||||||
.highlight .s1 { font-style: italic } /* Literal.String.Single */
|
|
||||||
.highlight .ss { font-style: italic } /* Literal.String.Symbol */
|
|
Before Width: | Height: | Size: 13 KiB |
|
@ -1,761 +0,0 @@
|
||||||
/*
|
|
||||||
* searchtools.js_t
|
|
||||||
* ~~~~~~~~~~~~~~~~
|
|
||||||
*
|
|
||||||
* Sphinx JavaScript utilities for the full-text search.
|
|
||||||
*
|
|
||||||
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
||||||
* :license: BSD, see LICENSE for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Non-minified version JS is _stemmer.js if file is provided */
|
|
||||||
/**
|
|
||||||
* Porter Stemmer
|
|
||||||
*/
|
|
||||||
var Stemmer = function() {
|
|
||||||
|
|
||||||
var step2list = {
|
|
||||||
ational: 'ate',
|
|
||||||
tional: 'tion',
|
|
||||||
enci: 'ence',
|
|
||||||
anci: 'ance',
|
|
||||||
izer: 'ize',
|
|
||||||
bli: 'ble',
|
|
||||||
alli: 'al',
|
|
||||||
entli: 'ent',
|
|
||||||
eli: 'e',
|
|
||||||
ousli: 'ous',
|
|
||||||
ization: 'ize',
|
|
||||||
ation: 'ate',
|
|
||||||
ator: 'ate',
|
|
||||||
alism: 'al',
|
|
||||||
iveness: 'ive',
|
|
||||||
fulness: 'ful',
|
|
||||||
ousness: 'ous',
|
|
||||||
aliti: 'al',
|
|
||||||
iviti: 'ive',
|
|
||||||
biliti: 'ble',
|
|
||||||
logi: 'log'
|
|
||||||
};
|
|
||||||
|
|
||||||
var step3list = {
|
|
||||||
icate: 'ic',
|
|
||||||
ative: '',
|
|
||||||
alize: 'al',
|
|
||||||
iciti: 'ic',
|
|
||||||
ical: 'ic',
|
|
||||||
ful: '',
|
|
||||||
ness: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
var c = "[^aeiou]"; // consonant
|
|
||||||
var v = "[aeiouy]"; // vowel
|
|
||||||
var C = c + "[^aeiouy]*"; // consonant sequence
|
|
||||||
var V = v + "[aeiou]*"; // vowel sequence
|
|
||||||
|
|
||||||
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
|
||||||
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
|
||||||
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
|
||||||
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
|
||||||
|
|
||||||
this.stemWord = function (w) {
|
|
||||||
var stem;
|
|
||||||
var suffix;
|
|
||||||
var firstch;
|
|
||||||
var origword = w;
|
|
||||||
|
|
||||||
if (w.length < 3)
|
|
||||||
return w;
|
|
||||||
|
|
||||||
var re;
|
|
||||||
var re2;
|
|
||||||
var re3;
|
|
||||||
var re4;
|
|
||||||
|
|
||||||
firstch = w.substr(0,1);
|
|
||||||
if (firstch == "y")
|
|
||||||
w = firstch.toUpperCase() + w.substr(1);
|
|
||||||
|
|
||||||
// Step 1a
|
|
||||||
re = /^(.+?)(ss|i)es$/;
|
|
||||||
re2 = /^(.+?)([^s])s$/;
|
|
||||||
|
|
||||||
if (re.test(w))
|
|
||||||
w = w.replace(re,"$1$2");
|
|
||||||
else if (re2.test(w))
|
|
||||||
w = w.replace(re2,"$1$2");
|
|
||||||
|
|
||||||
// Step 1b
|
|
||||||
re = /^(.+?)eed$/;
|
|
||||||
re2 = /^(.+?)(ed|ing)$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
re = new RegExp(mgr0);
|
|
||||||
if (re.test(fp[1])) {
|
|
||||||
re = /.$/;
|
|
||||||
w = w.replace(re,"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (re2.test(w)) {
|
|
||||||
var fp = re2.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
re2 = new RegExp(s_v);
|
|
||||||
if (re2.test(stem)) {
|
|
||||||
w = stem;
|
|
||||||
re2 = /(at|bl|iz)$/;
|
|
||||||
re3 = new RegExp("([^aeiouylsz])\\1$");
|
|
||||||
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
|
||||||
if (re2.test(w))
|
|
||||||
w = w + "e";
|
|
||||||
else if (re3.test(w)) {
|
|
||||||
re = /.$/;
|
|
||||||
w = w.replace(re,"");
|
|
||||||
}
|
|
||||||
else if (re4.test(w))
|
|
||||||
w = w + "e";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 1c
|
|
||||||
re = /^(.+?)y$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
re = new RegExp(s_v);
|
|
||||||
if (re.test(stem))
|
|
||||||
w = stem + "i";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 2
|
|
||||||
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
suffix = fp[2];
|
|
||||||
re = new RegExp(mgr0);
|
|
||||||
if (re.test(stem))
|
|
||||||
w = stem + step2list[suffix];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 3
|
|
||||||
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
suffix = fp[2];
|
|
||||||
re = new RegExp(mgr0);
|
|
||||||
if (re.test(stem))
|
|
||||||
w = stem + step3list[suffix];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 4
|
|
||||||
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
|
||||||
re2 = /^(.+?)(s|t)(ion)$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
re = new RegExp(mgr1);
|
|
||||||
if (re.test(stem))
|
|
||||||
w = stem;
|
|
||||||
}
|
|
||||||
else if (re2.test(w)) {
|
|
||||||
var fp = re2.exec(w);
|
|
||||||
stem = fp[1] + fp[2];
|
|
||||||
re2 = new RegExp(mgr1);
|
|
||||||
if (re2.test(stem))
|
|
||||||
w = stem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 5
|
|
||||||
re = /^(.+?)e$/;
|
|
||||||
if (re.test(w)) {
|
|
||||||
var fp = re.exec(w);
|
|
||||||
stem = fp[1];
|
|
||||||
re = new RegExp(mgr1);
|
|
||||||
re2 = new RegExp(meq1);
|
|
||||||
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
|
||||||
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
|
||||||
w = stem;
|
|
||||||
}
|
|
||||||
re = /ll$/;
|
|
||||||
re2 = new RegExp(mgr1);
|
|
||||||
if (re.test(w) && re2.test(w)) {
|
|
||||||
re = /.$/;
|
|
||||||
w = w.replace(re,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
// and turn initial Y back to y
|
|
||||||
if (firstch == "y")
|
|
||||||
w = firstch.toLowerCase() + w.substr(1);
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Simple result scoring code.
|
|
||||||
*/
|
|
||||||
var Scorer = {
|
|
||||||
// Implement the following function to further tweak the score for each result
|
|
||||||
// The function takes a result array [filename, title, anchor, descr, score]
|
|
||||||
// and returns the new score.
|
|
||||||
/*
|
|
||||||
score: function(result) {
|
|
||||||
return result[4];
|
|
||||||
},
|
|
||||||
*/
|
|
||||||
|
|
||||||
// query matches the full name of an object
|
|
||||||
objNameMatch: 11,
|
|
||||||
// or matches in the last dotted part of the object name
|
|
||||||
objPartialMatch: 6,
|
|
||||||
// Additive scores depending on the priority of the object
|
|
||||||
objPrio: {0: 15, // used to be importantResults
|
|
||||||
1: 5, // used to be objectResults
|
|
||||||
2: -5}, // used to be unimportantResults
|
|
||||||
// Used when the priority is not in the mapping.
|
|
||||||
objPrioDefault: 0,
|
|
||||||
|
|
||||||
// query found in title
|
|
||||||
title: 15,
|
|
||||||
// query found in terms
|
|
||||||
term: 5
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var splitChars = (function() {
|
|
||||||
var result = {};
|
|
||||||
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
|
|
||||||
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
|
|
||||||
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
|
|
||||||
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
|
|
||||||
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
|
|
||||||
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
|
|
||||||
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
|
|
||||||
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
|
|
||||||
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
|
|
||||||
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
|
|
||||||
var i, j, start, end;
|
|
||||||
for (i = 0; i < singles.length; i++) {
|
|
||||||
result[singles[i]] = true;
|
|
||||||
}
|
|
||||||
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
|
|
||||||
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
|
|
||||||
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
|
|
||||||
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
|
|
||||||
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
|
|
||||||
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
|
|
||||||
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
|
|
||||||
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
|
|
||||||
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
|
|
||||||
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
|
|
||||||
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
|
|
||||||
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
|
|
||||||
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
|
|
||||||
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
|
|
||||||
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
|
|
||||||
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
|
|
||||||
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
|
|
||||||
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
|
|
||||||
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
|
|
||||||
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
|
|
||||||
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
|
|
||||||
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
|
|
||||||
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
|
|
||||||
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
|
|
||||||
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
|
|
||||||
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
|
|
||||||
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
|
|
||||||
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
|
|
||||||
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
|
|
||||||
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
|
|
||||||
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
|
|
||||||
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
|
|
||||||
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
|
|
||||||
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
|
|
||||||
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
|
|
||||||
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
|
|
||||||
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
|
|
||||||
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
|
|
||||||
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
|
|
||||||
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
|
|
||||||
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
|
|
||||||
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
|
|
||||||
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
|
|
||||||
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
|
|
||||||
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
|
|
||||||
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
|
|
||||||
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
|
|
||||||
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
|
|
||||||
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
|
|
||||||
for (i = 0; i < ranges.length; i++) {
|
|
||||||
start = ranges[i][0];
|
|
||||||
end = ranges[i][1];
|
|
||||||
for (j = start; j <= end; j++) {
|
|
||||||
result[j] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
})();
|
|
||||||
|
|
||||||
function splitQuery(query) {
|
|
||||||
var result = [];
|
|
||||||
var start = -1;
|
|
||||||
for (var i = 0; i < query.length; i++) {
|
|
||||||
if (splitChars[query.charCodeAt(i)]) {
|
|
||||||
if (start !== -1) {
|
|
||||||
result.push(query.slice(start, i));
|
|
||||||
start = -1;
|
|
||||||
}
|
|
||||||
} else if (start === -1) {
|
|
||||||
start = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (start !== -1) {
|
|
||||||
result.push(query.slice(start));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search Module
|
|
||||||
*/
|
|
||||||
var Search = {
|
|
||||||
|
|
||||||
_index : null,
|
|
||||||
_queued_query : null,
|
|
||||||
_pulse_status : -1,
|
|
||||||
|
|
||||||
init : function() {
|
|
||||||
var params = $.getQueryParameters();
|
|
||||||
if (params.q) {
|
|
||||||
var query = params.q[0];
|
|
||||||
$('input[name="q"]')[0].value = query;
|
|
||||||
this.performSearch(query);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
loadIndex : function(url) {
|
|
||||||
$.ajax({type: "GET", url: url, data: null,
|
|
||||||
dataType: "script", cache: true,
|
|
||||||
complete: function(jqxhr, textstatus) {
|
|
||||||
if (textstatus != "success") {
|
|
||||||
document.getElementById("searchindexloader").src = url;
|
|
||||||
}
|
|
||||||
}});
|
|
||||||
},
|
|
||||||
|
|
||||||
setIndex : function(index) {
|
|
||||||
var q;
|
|
||||||
this._index = index;
|
|
||||||
if ((q = this._queued_query) !== null) {
|
|
||||||
this._queued_query = null;
|
|
||||||
Search.query(q);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
hasIndex : function() {
|
|
||||||
return this._index !== null;
|
|
||||||
},
|
|
||||||
|
|
||||||
deferQuery : function(query) {
|
|
||||||
this._queued_query = query;
|
|
||||||
},
|
|
||||||
|
|
||||||
stopPulse : function() {
|
|
||||||
this._pulse_status = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
startPulse : function() {
|
|
||||||
if (this._pulse_status >= 0)
|
|
||||||
return;
|
|
||||||
function pulse() {
|
|
||||||
var i;
|
|
||||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
|
||||||
var dotString = '';
|
|
||||||
for (i = 0; i < Search._pulse_status; i++)
|
|
||||||
dotString += '.';
|
|
||||||
Search.dots.text(dotString);
|
|
||||||
if (Search._pulse_status > -1)
|
|
||||||
window.setTimeout(pulse, 500);
|
|
||||||
}
|
|
||||||
pulse();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* perform a search for something (or wait until index is loaded)
|
|
||||||
*/
|
|
||||||
performSearch : function(query) {
|
|
||||||
// create the required interface elements
|
|
||||||
this.out = $('#search-results');
|
|
||||||
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
|
|
||||||
this.dots = $('<span></span>').appendTo(this.title);
|
|
||||||
this.status = $('<p style="display: none"></p>').appendTo(this.out);
|
|
||||||
this.output = $('<ul class="search"/>').appendTo(this.out);
|
|
||||||
|
|
||||||
$('#search-progress').text(_('Preparing search...'));
|
|
||||||
this.startPulse();
|
|
||||||
|
|
||||||
// index already loaded, the browser was quick!
|
|
||||||
if (this.hasIndex())
|
|
||||||
this.query(query);
|
|
||||||
else
|
|
||||||
this.deferQuery(query);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* execute search (requires search index to be loaded)
|
|
||||||
*/
|
|
||||||
query : function(query) {
|
|
||||||
var i;
|
|
||||||
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
|
|
||||||
|
|
||||||
// stem the searchterms and add them to the correct list
|
|
||||||
var stemmer = new Stemmer();
|
|
||||||
var searchterms = [];
|
|
||||||
var excluded = [];
|
|
||||||
var hlterms = [];
|
|
||||||
var tmp = splitQuery(query);
|
|
||||||
var objectterms = [];
|
|
||||||
for (i = 0; i < tmp.length; i++) {
|
|
||||||
if (tmp[i] !== "") {
|
|
||||||
objectterms.push(tmp[i].toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
|
|
||||||
tmp[i] === "") {
|
|
||||||
// skip this "word"
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// stem the word
|
|
||||||
var word = stemmer.stemWord(tmp[i].toLowerCase());
|
|
||||||
// prevent stemmer from cutting word smaller than two chars
|
|
||||||
if(word.length < 3 && tmp[i].length >= 3) {
|
|
||||||
word = tmp[i];
|
|
||||||
}
|
|
||||||
var toAppend;
|
|
||||||
// select the correct list
|
|
||||||
if (word[0] == '-') {
|
|
||||||
toAppend = excluded;
|
|
||||||
word = word.substr(1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
toAppend = searchterms;
|
|
||||||
hlterms.push(tmp[i].toLowerCase());
|
|
||||||
}
|
|
||||||
// only add if not already in the list
|
|
||||||
if (!$u.contains(toAppend, word))
|
|
||||||
toAppend.push(word);
|
|
||||||
}
|
|
||||||
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
|
|
||||||
|
|
||||||
// console.debug('SEARCH: searching for:');
|
|
||||||
// console.info('required: ', searchterms);
|
|
||||||
// console.info('excluded: ', excluded);
|
|
||||||
|
|
||||||
// prepare search
|
|
||||||
var terms = this._index.terms;
|
|
||||||
var titleterms = this._index.titleterms;
|
|
||||||
|
|
||||||
// array of [filename, title, anchor, descr, score]
|
|
||||||
var results = [];
|
|
||||||
$('#search-progress').empty();
|
|
||||||
|
|
||||||
// lookup as object
|
|
||||||
for (i = 0; i < objectterms.length; i++) {
|
|
||||||
var others = [].concat(objectterms.slice(0, i),
|
|
||||||
objectterms.slice(i+1, objectterms.length));
|
|
||||||
results = results.concat(this.performObjectSearch(objectterms[i], others));
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup as search terms in fulltext
|
|
||||||
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
|
|
||||||
|
|
||||||
// let the scorer override scores with a custom scoring function
|
|
||||||
if (Scorer.score) {
|
|
||||||
for (i = 0; i < results.length; i++)
|
|
||||||
results[i][4] = Scorer.score(results[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// now sort the results by score (in opposite order of appearance, since the
|
|
||||||
// display function below uses pop() to retrieve items) and then
|
|
||||||
// alphabetically
|
|
||||||
results.sort(function(a, b) {
|
|
||||||
var left = a[4];
|
|
||||||
var right = b[4];
|
|
||||||
if (left > right) {
|
|
||||||
return 1;
|
|
||||||
} else if (left < right) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
// same score: sort alphabetically
|
|
||||||
left = a[1].toLowerCase();
|
|
||||||
right = b[1].toLowerCase();
|
|
||||||
return (left > right) ? -1 : ((left < right) ? 1 : 0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// for debugging
|
|
||||||
//Search.lastresults = results.slice(); // a copy
|
|
||||||
//console.info('search results:', Search.lastresults);
|
|
||||||
|
|
||||||
// print the results
|
|
||||||
var resultCount = results.length;
|
|
||||||
function displayNextItem() {
|
|
||||||
// results left, load the summary and display it
|
|
||||||
if (results.length) {
|
|
||||||
var item = results.pop();
|
|
||||||
var listItem = $('<li style="display:none"></li>');
|
|
||||||
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
|
|
||||||
// dirhtml builder
|
|
||||||
var dirname = item[0] + '/';
|
|
||||||
if (dirname.match(/\/index\/$/)) {
|
|
||||||
dirname = dirname.substring(0, dirname.length-6);
|
|
||||||
} else if (dirname == 'index/') {
|
|
||||||
dirname = '';
|
|
||||||
}
|
|
||||||
listItem.append($('<a/>').attr('href',
|
|
||||||
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
|
|
||||||
highlightstring + item[2]).html(item[1]));
|
|
||||||
} else {
|
|
||||||
// normal html builders
|
|
||||||
listItem.append($('<a/>').attr('href',
|
|
||||||
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
|
|
||||||
highlightstring + item[2]).html(item[1]));
|
|
||||||
}
|
|
||||||
if (item[3]) {
|
|
||||||
listItem.append($('<span> (' + item[3] + ')</span>'));
|
|
||||||
Search.output.append(listItem);
|
|
||||||
listItem.slideDown(5, function() {
|
|
||||||
displayNextItem();
|
|
||||||
});
|
|
||||||
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
|
|
||||||
var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
|
|
||||||
if (suffix === undefined) {
|
|
||||||
suffix = '.txt';
|
|
||||||
}
|
|
||||||
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
|
|
||||||
dataType: "text",
|
|
||||||
complete: function(jqxhr, textstatus) {
|
|
||||||
var data = jqxhr.responseText;
|
|
||||||
if (data !== '' && data !== undefined) {
|
|
||||||
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
|
|
||||||
}
|
|
||||||
Search.output.append(listItem);
|
|
||||||
listItem.slideDown(5, function() {
|
|
||||||
displayNextItem();
|
|
||||||
});
|
|
||||||
}});
|
|
||||||
} else {
|
|
||||||
// no source available, just display title
|
|
||||||
Search.output.append(listItem);
|
|
||||||
listItem.slideDown(5, function() {
|
|
||||||
displayNextItem();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// search finished, update title and status message
|
|
||||||
else {
|
|
||||||
Search.stopPulse();
|
|
||||||
Search.title.text(_('Search Results'));
|
|
||||||
if (!resultCount)
|
|
||||||
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
|
|
||||||
else
|
|
||||||
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
|
|
||||||
Search.status.fadeIn(500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
displayNextItem();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* search for object names
|
|
||||||
*/
|
|
||||||
performObjectSearch : function(object, otherterms) {
|
|
||||||
var filenames = this._index.filenames;
|
|
||||||
var docnames = this._index.docnames;
|
|
||||||
var objects = this._index.objects;
|
|
||||||
var objnames = this._index.objnames;
|
|
||||||
var titles = this._index.titles;
|
|
||||||
|
|
||||||
var i;
|
|
||||||
var results = [];
|
|
||||||
|
|
||||||
for (var prefix in objects) {
|
|
||||||
for (var name in objects[prefix]) {
|
|
||||||
var fullname = (prefix ? prefix + '.' : '') + name;
|
|
||||||
if (fullname.toLowerCase().indexOf(object) > -1) {
|
|
||||||
var score = 0;
|
|
||||||
var parts = fullname.split('.');
|
|
||||||
// check for different match types: exact matches of full name or
|
|
||||||
// "last name" (i.e. last dotted part)
|
|
||||||
if (fullname == object || parts[parts.length - 1] == object) {
|
|
||||||
score += Scorer.objNameMatch;
|
|
||||||
// matches in last name
|
|
||||||
} else if (parts[parts.length - 1].indexOf(object) > -1) {
|
|
||||||
score += Scorer.objPartialMatch;
|
|
||||||
}
|
|
||||||
var match = objects[prefix][name];
|
|
||||||
var objname = objnames[match[1]][2];
|
|
||||||
var title = titles[match[0]];
|
|
||||||
// If more than one term searched for, we require other words to be
|
|
||||||
// found in the name/title/description
|
|
||||||
if (otherterms.length > 0) {
|
|
||||||
var haystack = (prefix + ' ' + name + ' ' +
|
|
||||||
objname + ' ' + title).toLowerCase();
|
|
||||||
var allfound = true;
|
|
||||||
for (i = 0; i < otherterms.length; i++) {
|
|
||||||
if (haystack.indexOf(otherterms[i]) == -1) {
|
|
||||||
allfound = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!allfound) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var descr = objname + _(', in ') + title;
|
|
||||||
|
|
||||||
var anchor = match[3];
|
|
||||||
if (anchor === '')
|
|
||||||
anchor = fullname;
|
|
||||||
else if (anchor == '-')
|
|
||||||
anchor = objnames[match[1]][1] + '-' + fullname;
|
|
||||||
// add custom score for some objects according to scorer
|
|
||||||
if (Scorer.objPrio.hasOwnProperty(match[2])) {
|
|
||||||
score += Scorer.objPrio[match[2]];
|
|
||||||
} else {
|
|
||||||
score += Scorer.objPrioDefault;
|
|
||||||
}
|
|
||||||
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* search for full-text terms in the index
|
|
||||||
*/
|
|
||||||
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
|
|
||||||
var docnames = this._index.docnames;
|
|
||||||
var filenames = this._index.filenames;
|
|
||||||
var titles = this._index.titles;
|
|
||||||
|
|
||||||
var i, j, file;
|
|
||||||
var fileMap = {};
|
|
||||||
var scoreMap = {};
|
|
||||||
var results = [];
|
|
||||||
|
|
||||||
// perform the search on the required terms
|
|
||||||
for (i = 0; i < searchterms.length; i++) {
|
|
||||||
var word = searchterms[i];
|
|
||||||
var files = [];
|
|
||||||
var _o = [
|
|
||||||
{files: terms[word], score: Scorer.term},
|
|
||||||
{files: titleterms[word], score: Scorer.title}
|
|
||||||
];
|
|
||||||
|
|
||||||
// no match but word was a required one
|
|
||||||
if ($u.every(_o, function(o){return o.files === undefined;})) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// found search word in contents
|
|
||||||
$u.each(_o, function(o) {
|
|
||||||
var _files = o.files;
|
|
||||||
if (_files === undefined)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (_files.length === undefined)
|
|
||||||
_files = [_files];
|
|
||||||
files = files.concat(_files);
|
|
||||||
|
|
||||||
// set score for the word in each file to Scorer.term
|
|
||||||
for (j = 0; j < _files.length; j++) {
|
|
||||||
file = _files[j];
|
|
||||||
if (!(file in scoreMap))
|
|
||||||
scoreMap[file] = {}
|
|
||||||
scoreMap[file][word] = o.score;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// create the mapping
|
|
||||||
for (j = 0; j < files.length; j++) {
|
|
||||||
file = files[j];
|
|
||||||
if (file in fileMap)
|
|
||||||
fileMap[file].push(word);
|
|
||||||
else
|
|
||||||
fileMap[file] = [word];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now check if the files don't contain excluded terms
|
|
||||||
for (file in fileMap) {
|
|
||||||
var valid = true;
|
|
||||||
|
|
||||||
// check if all requirements are matched
|
|
||||||
if (fileMap[file].length != searchterms.length)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// ensure that none of the excluded terms is in the search result
|
|
||||||
for (i = 0; i < excluded.length; i++) {
|
|
||||||
if (terms[excluded[i]] == file ||
|
|
||||||
titleterms[excluded[i]] == file ||
|
|
||||||
$u.contains(terms[excluded[i]] || [], file) ||
|
|
||||||
$u.contains(titleterms[excluded[i]] || [], file)) {
|
|
||||||
valid = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we have still a valid result we can add it to the result list
|
|
||||||
if (valid) {
|
|
||||||
// select one (max) score for the file.
|
|
||||||
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
|
|
||||||
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
|
|
||||||
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* helper function to return a node containing the
|
|
||||||
* search summary for a given text. keywords is a list
|
|
||||||
* of stemmed words, hlwords is the list of normal, unstemmed
|
|
||||||
* words. the first one is used to find the occurrence, the
|
|
||||||
* latter for highlighting it.
|
|
||||||
*/
|
|
||||||
makeSearchSummary : function(text, keywords, hlwords) {
|
|
||||||
var textLower = text.toLowerCase();
|
|
||||||
var start = 0;
|
|
||||||
$.each(keywords, function() {
|
|
||||||
var i = textLower.indexOf(this.toLowerCase());
|
|
||||||
if (i > -1)
|
|
||||||
start = i;
|
|
||||||
});
|
|
||||||
start = Math.max(start - 120, 0);
|
|
||||||
var excerpt = ((start > 0) ? '...' : '') +
|
|
||||||
$.trim(text.substr(start, 240)) +
|
|
||||||
((start + 240 - text.length) ? '...' : '');
|
|
||||||
var rv = $('<div class="context"></div>').text(excerpt);
|
|
||||||
$.each(hlwords, function() {
|
|
||||||
rv = rv.highlightText(this, 'highlighted');
|
|
||||||
});
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
Search.init();
|
|
||||||
});
|
|
|
@ -1,1548 +0,0 @@
|
||||||
// Underscore.js 1.8.3
|
|
||||||
// http://underscorejs.org
|
|
||||||
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
||||||
// Underscore may be freely distributed under the MIT license.
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
// Baseline setup
|
|
||||||
// --------------
|
|
||||||
|
|
||||||
// Establish the root object, `window` in the browser, or `exports` on the server.
|
|
||||||
var root = this;
|
|
||||||
|
|
||||||
// Save the previous value of the `_` variable.
|
|
||||||
var previousUnderscore = root._;
|
|
||||||
|
|
||||||
// Save bytes in the minified (but not gzipped) version:
|
|
||||||
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
|
|
||||||
|
|
||||||
// Create quick reference variables for speed access to core prototypes.
|
|
||||||
var
|
|
||||||
push = ArrayProto.push,
|
|
||||||
slice = ArrayProto.slice,
|
|
||||||
toString = ObjProto.toString,
|
|
||||||
hasOwnProperty = ObjProto.hasOwnProperty;
|
|
||||||
|
|
||||||
// All **ECMAScript 5** native function implementations that we hope to use
|
|
||||||
// are declared here.
|
|
||||||
var
|
|
||||||
nativeIsArray = Array.isArray,
|
|
||||||
nativeKeys = Object.keys,
|
|
||||||
nativeBind = FuncProto.bind,
|
|
||||||
nativeCreate = Object.create;
|
|
||||||
|
|
||||||
// Naked function reference for surrogate-prototype-swapping.
|
|
||||||
var Ctor = function(){};
|
|
||||||
|
|
||||||
// Create a safe reference to the Underscore object for use below.
|
|
||||||
var _ = function(obj) {
|
|
||||||
if (obj instanceof _) return obj;
|
|
||||||
if (!(this instanceof _)) return new _(obj);
|
|
||||||
this._wrapped = obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Export the Underscore object for **Node.js**, with
|
|
||||||
// backwards-compatibility for the old `require()` API. If we're in
|
|
||||||
// the browser, add `_` as a global object.
|
|
||||||
if (typeof exports !== 'undefined') {
|
|
||||||
if (typeof module !== 'undefined' && module.exports) {
|
|
||||||
exports = module.exports = _;
|
|
||||||
}
|
|
||||||
exports._ = _;
|
|
||||||
} else {
|
|
||||||
root._ = _;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Current version.
|
|
||||||
_.VERSION = '1.8.3';
|
|
||||||
|
|
||||||
// Internal function that returns an efficient (for current engines) version
|
|
||||||
// of the passed-in callback, to be repeatedly applied in other Underscore
|
|
||||||
// functions.
|
|
||||||
var optimizeCb = function(func, context, argCount) {
|
|
||||||
if (context === void 0) return func;
|
|
||||||
switch (argCount == null ? 3 : argCount) {
|
|
||||||
case 1: return function(value) {
|
|
||||||
return func.call(context, value);
|
|
||||||
};
|
|
||||||
case 2: return function(value, other) {
|
|
||||||
return func.call(context, value, other);
|
|
||||||
};
|
|
||||||
case 3: return function(value, index, collection) {
|
|
||||||
return func.call(context, value, index, collection);
|
|
||||||
};
|
|
||||||
case 4: return function(accumulator, value, index, collection) {
|
|
||||||
return func.call(context, accumulator, value, index, collection);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return function() {
|
|
||||||
return func.apply(context, arguments);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// A mostly-internal function to generate callbacks that can be applied
|
|
||||||
// to each element in a collection, returning the desired result — either
|
|
||||||
// identity, an arbitrary callback, a property matcher, or a property accessor.
|
|
||||||
var cb = function(value, context, argCount) {
|
|
||||||
if (value == null) return _.identity;
|
|
||||||
if (_.isFunction(value)) return optimizeCb(value, context, argCount);
|
|
||||||
if (_.isObject(value)) return _.matcher(value);
|
|
||||||
return _.property(value);
|
|
||||||
};
|
|
||||||
_.iteratee = function(value, context) {
|
|
||||||
return cb(value, context, Infinity);
|
|
||||||
};
|
|
||||||
|
|
||||||
// An internal function for creating assigner functions.
|
|
||||||
var createAssigner = function(keysFunc, undefinedOnly) {
|
|
||||||
return function(obj) {
|
|
||||||
var length = arguments.length;
|
|
||||||
if (length < 2 || obj == null) return obj;
|
|
||||||
for (var index = 1; index < length; index++) {
|
|
||||||
var source = arguments[index],
|
|
||||||
keys = keysFunc(source),
|
|
||||||
l = keys.length;
|
|
||||||
for (var i = 0; i < l; i++) {
|
|
||||||
var key = keys[i];
|
|
||||||
if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// An internal function for creating a new object that inherits from another.
|
|
||||||
var baseCreate = function(prototype) {
|
|
||||||
if (!_.isObject(prototype)) return {};
|
|
||||||
if (nativeCreate) return nativeCreate(prototype);
|
|
||||||
Ctor.prototype = prototype;
|
|
||||||
var result = new Ctor;
|
|
||||||
Ctor.prototype = null;
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
var property = function(key) {
|
|
||||||
return function(obj) {
|
|
||||||
return obj == null ? void 0 : obj[key];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helper for collection methods to determine whether a collection
|
|
||||||
// should be iterated as an array or as an object
|
|
||||||
// Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
|
|
||||||
// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
|
|
||||||
var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
|
|
||||||
var getLength = property('length');
|
|
||||||
var isArrayLike = function(collection) {
|
|
||||||
var length = getLength(collection);
|
|
||||||
return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Collection Functions
|
|
||||||
// --------------------
|
|
||||||
|
|
||||||
// The cornerstone, an `each` implementation, aka `forEach`.
|
|
||||||
// Handles raw objects in addition to array-likes. Treats all
|
|
||||||
// sparse array-likes as if they were dense.
|
|
||||||
_.each = _.forEach = function(obj, iteratee, context) {
|
|
||||||
iteratee = optimizeCb(iteratee, context);
|
|
||||||
var i, length;
|
|
||||||
if (isArrayLike(obj)) {
|
|
||||||
for (i = 0, length = obj.length; i < length; i++) {
|
|
||||||
iteratee(obj[i], i, obj);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var keys = _.keys(obj);
|
|
||||||
for (i = 0, length = keys.length; i < length; i++) {
|
|
||||||
iteratee(obj[keys[i]], keys[i], obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the results of applying the iteratee to each element.
|
|
||||||
_.map = _.collect = function(obj, iteratee, context) {
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
var keys = !isArrayLike(obj) && _.keys(obj),
|
|
||||||
length = (keys || obj).length,
|
|
||||||
results = Array(length);
|
|
||||||
for (var index = 0; index < length; index++) {
|
|
||||||
var currentKey = keys ? keys[index] : index;
|
|
||||||
results[index] = iteratee(obj[currentKey], currentKey, obj);
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create a reducing function iterating left or right.
|
|
||||||
function createReduce(dir) {
|
|
||||||
// Optimized iterator function as using arguments.length
|
|
||||||
// in the main function will deoptimize the, see #1991.
|
|
||||||
function iterator(obj, iteratee, memo, keys, index, length) {
|
|
||||||
for (; index >= 0 && index < length; index += dir) {
|
|
||||||
var currentKey = keys ? keys[index] : index;
|
|
||||||
memo = iteratee(memo, obj[currentKey], currentKey, obj);
|
|
||||||
}
|
|
||||||
return memo;
|
|
||||||
}
|
|
||||||
|
|
||||||
return function(obj, iteratee, memo, context) {
|
|
||||||
iteratee = optimizeCb(iteratee, context, 4);
|
|
||||||
var keys = !isArrayLike(obj) && _.keys(obj),
|
|
||||||
length = (keys || obj).length,
|
|
||||||
index = dir > 0 ? 0 : length - 1;
|
|
||||||
// Determine the initial value if none is provided.
|
|
||||||
if (arguments.length < 3) {
|
|
||||||
memo = obj[keys ? keys[index] : index];
|
|
||||||
index += dir;
|
|
||||||
}
|
|
||||||
return iterator(obj, iteratee, memo, keys, index, length);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// **Reduce** builds up a single result from a list of values, aka `inject`,
|
|
||||||
// or `foldl`.
|
|
||||||
_.reduce = _.foldl = _.inject = createReduce(1);
|
|
||||||
|
|
||||||
// The right-associative version of reduce, also known as `foldr`.
|
|
||||||
_.reduceRight = _.foldr = createReduce(-1);
|
|
||||||
|
|
||||||
// Return the first value which passes a truth test. Aliased as `detect`.
|
|
||||||
_.find = _.detect = function(obj, predicate, context) {
|
|
||||||
var key;
|
|
||||||
if (isArrayLike(obj)) {
|
|
||||||
key = _.findIndex(obj, predicate, context);
|
|
||||||
} else {
|
|
||||||
key = _.findKey(obj, predicate, context);
|
|
||||||
}
|
|
||||||
if (key !== void 0 && key !== -1) return obj[key];
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return all the elements that pass a truth test.
|
|
||||||
// Aliased as `select`.
|
|
||||||
_.filter = _.select = function(obj, predicate, context) {
|
|
||||||
var results = [];
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
_.each(obj, function(value, index, list) {
|
|
||||||
if (predicate(value, index, list)) results.push(value);
|
|
||||||
});
|
|
||||||
return results;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return all the elements for which a truth test fails.
|
|
||||||
_.reject = function(obj, predicate, context) {
|
|
||||||
return _.filter(obj, _.negate(cb(predicate)), context);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Determine whether all of the elements match a truth test.
|
|
||||||
// Aliased as `all`.
|
|
||||||
_.every = _.all = function(obj, predicate, context) {
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
var keys = !isArrayLike(obj) && _.keys(obj),
|
|
||||||
length = (keys || obj).length;
|
|
||||||
for (var index = 0; index < length; index++) {
|
|
||||||
var currentKey = keys ? keys[index] : index;
|
|
||||||
if (!predicate(obj[currentKey], currentKey, obj)) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Determine if at least one element in the object matches a truth test.
|
|
||||||
// Aliased as `any`.
|
|
||||||
_.some = _.any = function(obj, predicate, context) {
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
var keys = !isArrayLike(obj) && _.keys(obj),
|
|
||||||
length = (keys || obj).length;
|
|
||||||
for (var index = 0; index < length; index++) {
|
|
||||||
var currentKey = keys ? keys[index] : index;
|
|
||||||
if (predicate(obj[currentKey], currentKey, obj)) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Determine if the array or object contains a given item (using `===`).
|
|
||||||
// Aliased as `includes` and `include`.
|
|
||||||
_.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
|
|
||||||
if (!isArrayLike(obj)) obj = _.values(obj);
|
|
||||||
if (typeof fromIndex != 'number' || guard) fromIndex = 0;
|
|
||||||
return _.indexOf(obj, item, fromIndex) >= 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Invoke a method (with arguments) on every item in a collection.
|
|
||||||
_.invoke = function(obj, method) {
|
|
||||||
var args = slice.call(arguments, 2);
|
|
||||||
var isFunc = _.isFunction(method);
|
|
||||||
return _.map(obj, function(value) {
|
|
||||||
var func = isFunc ? method : value[method];
|
|
||||||
return func == null ? func : func.apply(value, args);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convenience version of a common use case of `map`: fetching a property.
|
|
||||||
_.pluck = function(obj, key) {
|
|
||||||
return _.map(obj, _.property(key));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convenience version of a common use case of `filter`: selecting only objects
|
|
||||||
// containing specific `key:value` pairs.
|
|
||||||
_.where = function(obj, attrs) {
|
|
||||||
return _.filter(obj, _.matcher(attrs));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convenience version of a common use case of `find`: getting the first object
|
|
||||||
// containing specific `key:value` pairs.
|
|
||||||
_.findWhere = function(obj, attrs) {
|
|
||||||
return _.find(obj, _.matcher(attrs));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the maximum element (or element-based computation).
|
|
||||||
_.max = function(obj, iteratee, context) {
|
|
||||||
var result = -Infinity, lastComputed = -Infinity,
|
|
||||||
value, computed;
|
|
||||||
if (iteratee == null && obj != null) {
|
|
||||||
obj = isArrayLike(obj) ? obj : _.values(obj);
|
|
||||||
for (var i = 0, length = obj.length; i < length; i++) {
|
|
||||||
value = obj[i];
|
|
||||||
if (value > result) {
|
|
||||||
result = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
_.each(obj, function(value, index, list) {
|
|
||||||
computed = iteratee(value, index, list);
|
|
||||||
if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
|
|
||||||
result = value;
|
|
||||||
lastComputed = computed;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the minimum element (or element-based computation).
|
|
||||||
_.min = function(obj, iteratee, context) {
|
|
||||||
var result = Infinity, lastComputed = Infinity,
|
|
||||||
value, computed;
|
|
||||||
if (iteratee == null && obj != null) {
|
|
||||||
obj = isArrayLike(obj) ? obj : _.values(obj);
|
|
||||||
for (var i = 0, length = obj.length; i < length; i++) {
|
|
||||||
value = obj[i];
|
|
||||||
if (value < result) {
|
|
||||||
result = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
_.each(obj, function(value, index, list) {
|
|
||||||
computed = iteratee(value, index, list);
|
|
||||||
if (computed < lastComputed || computed === Infinity && result === Infinity) {
|
|
||||||
result = value;
|
|
||||||
lastComputed = computed;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Shuffle a collection, using the modern version of the
|
|
||||||
// [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
|
|
||||||
_.shuffle = function(obj) {
|
|
||||||
var set = isArrayLike(obj) ? obj : _.values(obj);
|
|
||||||
var length = set.length;
|
|
||||||
var shuffled = Array(length);
|
|
||||||
for (var index = 0, rand; index < length; index++) {
|
|
||||||
rand = _.random(0, index);
|
|
||||||
if (rand !== index) shuffled[index] = shuffled[rand];
|
|
||||||
shuffled[rand] = set[index];
|
|
||||||
}
|
|
||||||
return shuffled;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sample **n** random values from a collection.
|
|
||||||
// If **n** is not specified, returns a single random element.
|
|
||||||
// The internal `guard` argument allows it to work with `map`.
|
|
||||||
_.sample = function(obj, n, guard) {
|
|
||||||
if (n == null || guard) {
|
|
||||||
if (!isArrayLike(obj)) obj = _.values(obj);
|
|
||||||
return obj[_.random(obj.length - 1)];
|
|
||||||
}
|
|
||||||
return _.shuffle(obj).slice(0, Math.max(0, n));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sort the object's values by a criterion produced by an iteratee.
|
|
||||||
_.sortBy = function(obj, iteratee, context) {
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
return _.pluck(_.map(obj, function(value, index, list) {
|
|
||||||
return {
|
|
||||||
value: value,
|
|
||||||
index: index,
|
|
||||||
criteria: iteratee(value, index, list)
|
|
||||||
};
|
|
||||||
}).sort(function(left, right) {
|
|
||||||
var a = left.criteria;
|
|
||||||
var b = right.criteria;
|
|
||||||
if (a !== b) {
|
|
||||||
if (a > b || a === void 0) return 1;
|
|
||||||
if (a < b || b === void 0) return -1;
|
|
||||||
}
|
|
||||||
return left.index - right.index;
|
|
||||||
}), 'value');
|
|
||||||
};
|
|
||||||
|
|
||||||
// An internal function used for aggregate "group by" operations.
|
|
||||||
var group = function(behavior) {
|
|
||||||
return function(obj, iteratee, context) {
|
|
||||||
var result = {};
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
_.each(obj, function(value, index) {
|
|
||||||
var key = iteratee(value, index, obj);
|
|
||||||
behavior(result, value, key);
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Groups the object's values by a criterion. Pass either a string attribute
|
|
||||||
// to group by, or a function that returns the criterion.
|
|
||||||
_.groupBy = group(function(result, value, key) {
|
|
||||||
if (_.has(result, key)) result[key].push(value); else result[key] = [value];
|
|
||||||
});
|
|
||||||
|
|
||||||
// Indexes the object's values by a criterion, similar to `groupBy`, but for
|
|
||||||
// when you know that your index values will be unique.
|
|
||||||
_.indexBy = group(function(result, value, key) {
|
|
||||||
result[key] = value;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Counts instances of an object that group by a certain criterion. Pass
|
|
||||||
// either a string attribute to count by, or a function that returns the
|
|
||||||
// criterion.
|
|
||||||
_.countBy = group(function(result, value, key) {
|
|
||||||
if (_.has(result, key)) result[key]++; else result[key] = 1;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Safely create a real, live array from anything iterable.
|
|
||||||
_.toArray = function(obj) {
|
|
||||||
if (!obj) return [];
|
|
||||||
if (_.isArray(obj)) return slice.call(obj);
|
|
||||||
if (isArrayLike(obj)) return _.map(obj, _.identity);
|
|
||||||
return _.values(obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the number of elements in an object.
|
|
||||||
_.size = function(obj) {
|
|
||||||
if (obj == null) return 0;
|
|
||||||
return isArrayLike(obj) ? obj.length : _.keys(obj).length;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Split a collection into two arrays: one whose elements all satisfy the given
|
|
||||||
// predicate, and one whose elements all do not satisfy the predicate.
|
|
||||||
_.partition = function(obj, predicate, context) {
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
var pass = [], fail = [];
|
|
||||||
_.each(obj, function(value, key, obj) {
|
|
||||||
(predicate(value, key, obj) ? pass : fail).push(value);
|
|
||||||
});
|
|
||||||
return [pass, fail];
|
|
||||||
};
|
|
||||||
|
|
||||||
// Array Functions
|
|
||||||
// ---------------
|
|
||||||
|
|
||||||
// Get the first element of an array. Passing **n** will return the first N
|
|
||||||
// values in the array. Aliased as `head` and `take`. The **guard** check
|
|
||||||
// allows it to work with `_.map`.
|
|
||||||
_.first = _.head = _.take = function(array, n, guard) {
|
|
||||||
if (array == null) return void 0;
|
|
||||||
if (n == null || guard) return array[0];
|
|
||||||
return _.initial(array, array.length - n);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns everything but the last entry of the array. Especially useful on
|
|
||||||
// the arguments object. Passing **n** will return all the values in
|
|
||||||
// the array, excluding the last N.
|
|
||||||
_.initial = function(array, n, guard) {
|
|
||||||
return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the last element of an array. Passing **n** will return the last N
|
|
||||||
// values in the array.
|
|
||||||
_.last = function(array, n, guard) {
|
|
||||||
if (array == null) return void 0;
|
|
||||||
if (n == null || guard) return array[array.length - 1];
|
|
||||||
return _.rest(array, Math.max(0, array.length - n));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
|
|
||||||
// Especially useful on the arguments object. Passing an **n** will return
|
|
||||||
// the rest N values in the array.
|
|
||||||
_.rest = _.tail = _.drop = function(array, n, guard) {
|
|
||||||
return slice.call(array, n == null || guard ? 1 : n);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Trim out all falsy values from an array.
|
|
||||||
_.compact = function(array) {
|
|
||||||
return _.filter(array, _.identity);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Internal implementation of a recursive `flatten` function.
|
|
||||||
var flatten = function(input, shallow, strict, startIndex) {
|
|
||||||
var output = [], idx = 0;
|
|
||||||
for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
|
|
||||||
var value = input[i];
|
|
||||||
if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
|
|
||||||
//flatten current level of array or arguments object
|
|
||||||
if (!shallow) value = flatten(value, shallow, strict);
|
|
||||||
var j = 0, len = value.length;
|
|
||||||
output.length += len;
|
|
||||||
while (j < len) {
|
|
||||||
output[idx++] = value[j++];
|
|
||||||
}
|
|
||||||
} else if (!strict) {
|
|
||||||
output[idx++] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Flatten out an array, either recursively (by default), or just one level.
|
|
||||||
_.flatten = function(array, shallow) {
|
|
||||||
return flatten(array, shallow, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return a version of the array that does not contain the specified value(s).
|
|
||||||
_.without = function(array) {
|
|
||||||
return _.difference(array, slice.call(arguments, 1));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Produce a duplicate-free version of the array. If the array has already
|
|
||||||
// been sorted, you have the option of using a faster algorithm.
|
|
||||||
// Aliased as `unique`.
|
|
||||||
_.uniq = _.unique = function(array, isSorted, iteratee, context) {
|
|
||||||
if (!_.isBoolean(isSorted)) {
|
|
||||||
context = iteratee;
|
|
||||||
iteratee = isSorted;
|
|
||||||
isSorted = false;
|
|
||||||
}
|
|
||||||
if (iteratee != null) iteratee = cb(iteratee, context);
|
|
||||||
var result = [];
|
|
||||||
var seen = [];
|
|
||||||
for (var i = 0, length = getLength(array); i < length; i++) {
|
|
||||||
var value = array[i],
|
|
||||||
computed = iteratee ? iteratee(value, i, array) : value;
|
|
||||||
if (isSorted) {
|
|
||||||
if (!i || seen !== computed) result.push(value);
|
|
||||||
seen = computed;
|
|
||||||
} else if (iteratee) {
|
|
||||||
if (!_.contains(seen, computed)) {
|
|
||||||
seen.push(computed);
|
|
||||||
result.push(value);
|
|
||||||
}
|
|
||||||
} else if (!_.contains(result, value)) {
|
|
||||||
result.push(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Produce an array that contains the union: each distinct element from all of
|
|
||||||
// the passed-in arrays.
|
|
||||||
_.union = function() {
|
|
||||||
return _.uniq(flatten(arguments, true, true));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Produce an array that contains every item shared between all the
|
|
||||||
// passed-in arrays.
|
|
||||||
_.intersection = function(array) {
|
|
||||||
var result = [];
|
|
||||||
var argsLength = arguments.length;
|
|
||||||
for (var i = 0, length = getLength(array); i < length; i++) {
|
|
||||||
var item = array[i];
|
|
||||||
if (_.contains(result, item)) continue;
|
|
||||||
for (var j = 1; j < argsLength; j++) {
|
|
||||||
if (!_.contains(arguments[j], item)) break;
|
|
||||||
}
|
|
||||||
if (j === argsLength) result.push(item);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Take the difference between one array and a number of other arrays.
|
|
||||||
// Only the elements present in just the first array will remain.
|
|
||||||
_.difference = function(array) {
|
|
||||||
var rest = flatten(arguments, true, true, 1);
|
|
||||||
return _.filter(array, function(value){
|
|
||||||
return !_.contains(rest, value);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Zip together multiple lists into a single array -- elements that share
|
|
||||||
// an index go together.
|
|
||||||
_.zip = function() {
|
|
||||||
return _.unzip(arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Complement of _.zip. Unzip accepts an array of arrays and groups
|
|
||||||
// each array's elements on shared indices
|
|
||||||
_.unzip = function(array) {
|
|
||||||
var length = array && _.max(array, getLength).length || 0;
|
|
||||||
var result = Array(length);
|
|
||||||
|
|
||||||
for (var index = 0; index < length; index++) {
|
|
||||||
result[index] = _.pluck(array, index);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Converts lists into objects. Pass either a single array of `[key, value]`
|
|
||||||
// pairs, or two parallel arrays of the same length -- one of keys, and one of
|
|
||||||
// the corresponding values.
|
|
||||||
_.object = function(list, values) {
|
|
||||||
var result = {};
|
|
||||||
for (var i = 0, length = getLength(list); i < length; i++) {
|
|
||||||
if (values) {
|
|
||||||
result[list[i]] = values[i];
|
|
||||||
} else {
|
|
||||||
result[list[i][0]] = list[i][1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Generator function to create the findIndex and findLastIndex functions
|
|
||||||
function createPredicateIndexFinder(dir) {
|
|
||||||
return function(array, predicate, context) {
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
var length = getLength(array);
|
|
||||||
var index = dir > 0 ? 0 : length - 1;
|
|
||||||
for (; index >= 0 && index < length; index += dir) {
|
|
||||||
if (predicate(array[index], index, array)) return index;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the first index on an array-like that passes a predicate test
|
|
||||||
_.findIndex = createPredicateIndexFinder(1);
|
|
||||||
_.findLastIndex = createPredicateIndexFinder(-1);
|
|
||||||
|
|
||||||
// Use a comparator function to figure out the smallest index at which
|
|
||||||
// an object should be inserted so as to maintain order. Uses binary search.
|
|
||||||
_.sortedIndex = function(array, obj, iteratee, context) {
|
|
||||||
iteratee = cb(iteratee, context, 1);
|
|
||||||
var value = iteratee(obj);
|
|
||||||
var low = 0, high = getLength(array);
|
|
||||||
while (low < high) {
|
|
||||||
var mid = Math.floor((low + high) / 2);
|
|
||||||
if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
|
|
||||||
}
|
|
||||||
return low;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Generator function to create the indexOf and lastIndexOf functions
|
|
||||||
function createIndexFinder(dir, predicateFind, sortedIndex) {
|
|
||||||
return function(array, item, idx) {
|
|
||||||
var i = 0, length = getLength(array);
|
|
||||||
if (typeof idx == 'number') {
|
|
||||||
if (dir > 0) {
|
|
||||||
i = idx >= 0 ? idx : Math.max(idx + length, i);
|
|
||||||
} else {
|
|
||||||
length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
|
|
||||||
}
|
|
||||||
} else if (sortedIndex && idx && length) {
|
|
||||||
idx = sortedIndex(array, item);
|
|
||||||
return array[idx] === item ? idx : -1;
|
|
||||||
}
|
|
||||||
if (item !== item) {
|
|
||||||
idx = predicateFind(slice.call(array, i, length), _.isNaN);
|
|
||||||
return idx >= 0 ? idx + i : -1;
|
|
||||||
}
|
|
||||||
for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
|
|
||||||
if (array[idx] === item) return idx;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the position of the first occurrence of an item in an array,
|
|
||||||
// or -1 if the item is not included in the array.
|
|
||||||
// If the array is large and already in sort order, pass `true`
|
|
||||||
// for **isSorted** to use binary search.
|
|
||||||
_.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
|
|
||||||
_.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
|
|
||||||
|
|
||||||
// Generate an integer Array containing an arithmetic progression. A port of
|
|
||||||
// the native Python `range()` function. See
|
|
||||||
// [the Python documentation](http://docs.python.org/library/functions.html#range).
|
|
||||||
_.range = function(start, stop, step) {
|
|
||||||
if (stop == null) {
|
|
||||||
stop = start || 0;
|
|
||||||
start = 0;
|
|
||||||
}
|
|
||||||
step = step || 1;
|
|
||||||
|
|
||||||
var length = Math.max(Math.ceil((stop - start) / step), 0);
|
|
||||||
var range = Array(length);
|
|
||||||
|
|
||||||
for (var idx = 0; idx < length; idx++, start += step) {
|
|
||||||
range[idx] = start;
|
|
||||||
}
|
|
||||||
|
|
||||||
return range;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Function (ahem) Functions
|
|
||||||
// ------------------
|
|
||||||
|
|
||||||
// Determines whether to execute a function as a constructor
|
|
||||||
// or a normal function with the provided arguments
|
|
||||||
var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
|
|
||||||
if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
|
|
||||||
var self = baseCreate(sourceFunc.prototype);
|
|
||||||
var result = sourceFunc.apply(self, args);
|
|
||||||
if (_.isObject(result)) return result;
|
|
||||||
return self;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create a function bound to a given object (assigning `this`, and arguments,
|
|
||||||
// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
|
|
||||||
// available.
|
|
||||||
_.bind = function(func, context) {
|
|
||||||
if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
|
||||||
if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
|
|
||||||
var args = slice.call(arguments, 2);
|
|
||||||
var bound = function() {
|
|
||||||
return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
|
|
||||||
};
|
|
||||||
return bound;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Partially apply a function by creating a version that has had some of its
|
|
||||||
// arguments pre-filled, without changing its dynamic `this` context. _ acts
|
|
||||||
// as a placeholder, allowing any combination of arguments to be pre-filled.
|
|
||||||
_.partial = function(func) {
|
|
||||||
var boundArgs = slice.call(arguments, 1);
|
|
||||||
var bound = function() {
|
|
||||||
var position = 0, length = boundArgs.length;
|
|
||||||
var args = Array(length);
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
|
|
||||||
}
|
|
||||||
while (position < arguments.length) args.push(arguments[position++]);
|
|
||||||
return executeBound(func, bound, this, this, args);
|
|
||||||
};
|
|
||||||
return bound;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Bind a number of an object's methods to that object. Remaining arguments
|
|
||||||
// are the method names to be bound. Useful for ensuring that all callbacks
|
|
||||||
// defined on an object belong to it.
|
|
||||||
_.bindAll = function(obj) {
|
|
||||||
var i, length = arguments.length, key;
|
|
||||||
if (length <= 1) throw new Error('bindAll must be passed function names');
|
|
||||||
for (i = 1; i < length; i++) {
|
|
||||||
key = arguments[i];
|
|
||||||
obj[key] = _.bind(obj[key], obj);
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Memoize an expensive function by storing its results.
|
|
||||||
_.memoize = function(func, hasher) {
|
|
||||||
var memoize = function(key) {
|
|
||||||
var cache = memoize.cache;
|
|
||||||
var address = '' + (hasher ? hasher.apply(this, arguments) : key);
|
|
||||||
if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
|
|
||||||
return cache[address];
|
|
||||||
};
|
|
||||||
memoize.cache = {};
|
|
||||||
return memoize;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Delays a function for the given number of milliseconds, and then calls
|
|
||||||
// it with the arguments supplied.
|
|
||||||
_.delay = function(func, wait) {
|
|
||||||
var args = slice.call(arguments, 2);
|
|
||||||
return setTimeout(function(){
|
|
||||||
return func.apply(null, args);
|
|
||||||
}, wait);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Defers a function, scheduling it to run after the current call stack has
|
|
||||||
// cleared.
|
|
||||||
_.defer = _.partial(_.delay, _, 1);
|
|
||||||
|
|
||||||
// Returns a function, that, when invoked, will only be triggered at most once
|
|
||||||
// during a given window of time. Normally, the throttled function will run
|
|
||||||
// as much as it can, without ever going more than once per `wait` duration;
|
|
||||||
// but if you'd like to disable the execution on the leading edge, pass
|
|
||||||
// `{leading: false}`. To disable execution on the trailing edge, ditto.
|
|
||||||
_.throttle = function(func, wait, options) {
|
|
||||||
var context, args, result;
|
|
||||||
var timeout = null;
|
|
||||||
var previous = 0;
|
|
||||||
if (!options) options = {};
|
|
||||||
var later = function() {
|
|
||||||
previous = options.leading === false ? 0 : _.now();
|
|
||||||
timeout = null;
|
|
||||||
result = func.apply(context, args);
|
|
||||||
if (!timeout) context = args = null;
|
|
||||||
};
|
|
||||||
return function() {
|
|
||||||
var now = _.now();
|
|
||||||
if (!previous && options.leading === false) previous = now;
|
|
||||||
var remaining = wait - (now - previous);
|
|
||||||
context = this;
|
|
||||||
args = arguments;
|
|
||||||
if (remaining <= 0 || remaining > wait) {
|
|
||||||
if (timeout) {
|
|
||||||
clearTimeout(timeout);
|
|
||||||
timeout = null;
|
|
||||||
}
|
|
||||||
previous = now;
|
|
||||||
result = func.apply(context, args);
|
|
||||||
if (!timeout) context = args = null;
|
|
||||||
} else if (!timeout && options.trailing !== false) {
|
|
||||||
timeout = setTimeout(later, remaining);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a function, that, as long as it continues to be invoked, will not
|
|
||||||
// be triggered. The function will be called after it stops being called for
|
|
||||||
// N milliseconds. If `immediate` is passed, trigger the function on the
|
|
||||||
// leading edge, instead of the trailing.
|
|
||||||
_.debounce = function(func, wait, immediate) {
|
|
||||||
var timeout, args, context, timestamp, result;
|
|
||||||
|
|
||||||
var later = function() {
|
|
||||||
var last = _.now() - timestamp;
|
|
||||||
|
|
||||||
if (last < wait && last >= 0) {
|
|
||||||
timeout = setTimeout(later, wait - last);
|
|
||||||
} else {
|
|
||||||
timeout = null;
|
|
||||||
if (!immediate) {
|
|
||||||
result = func.apply(context, args);
|
|
||||||
if (!timeout) context = args = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return function() {
|
|
||||||
context = this;
|
|
||||||
args = arguments;
|
|
||||||
timestamp = _.now();
|
|
||||||
var callNow = immediate && !timeout;
|
|
||||||
if (!timeout) timeout = setTimeout(later, wait);
|
|
||||||
if (callNow) {
|
|
||||||
result = func.apply(context, args);
|
|
||||||
context = args = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns the first function passed as an argument to the second,
|
|
||||||
// allowing you to adjust arguments, run code before and after, and
|
|
||||||
// conditionally execute the original function.
|
|
||||||
_.wrap = function(func, wrapper) {
|
|
||||||
return _.partial(wrapper, func);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a negated version of the passed-in predicate.
|
|
||||||
_.negate = function(predicate) {
|
|
||||||
return function() {
|
|
||||||
return !predicate.apply(this, arguments);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a function that is the composition of a list of functions, each
|
|
||||||
// consuming the return value of the function that follows.
|
|
||||||
_.compose = function() {
|
|
||||||
var args = arguments;
|
|
||||||
var start = args.length - 1;
|
|
||||||
return function() {
|
|
||||||
var i = start;
|
|
||||||
var result = args[start].apply(this, arguments);
|
|
||||||
while (i--) result = args[i].call(this, result);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a function that will only be executed on and after the Nth call.
|
|
||||||
_.after = function(times, func) {
|
|
||||||
return function() {
|
|
||||||
if (--times < 1) {
|
|
||||||
return func.apply(this, arguments);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a function that will only be executed up to (but not including) the Nth call.
|
|
||||||
_.before = function(times, func) {
|
|
||||||
var memo;
|
|
||||||
return function() {
|
|
||||||
if (--times > 0) {
|
|
||||||
memo = func.apply(this, arguments);
|
|
||||||
}
|
|
||||||
if (times <= 1) func = null;
|
|
||||||
return memo;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a function that will be executed at most one time, no matter how
|
|
||||||
// often you call it. Useful for lazy initialization.
|
|
||||||
_.once = _.partial(_.before, 2);
|
|
||||||
|
|
||||||
// Object Functions
|
|
||||||
// ----------------
|
|
||||||
|
|
||||||
// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
|
|
||||||
var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
|
|
||||||
var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
|
|
||||||
'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
|
|
||||||
|
|
||||||
function collectNonEnumProps(obj, keys) {
|
|
||||||
var nonEnumIdx = nonEnumerableProps.length;
|
|
||||||
var constructor = obj.constructor;
|
|
||||||
var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
|
|
||||||
|
|
||||||
// Constructor is a special case.
|
|
||||||
var prop = 'constructor';
|
|
||||||
if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
|
|
||||||
|
|
||||||
while (nonEnumIdx--) {
|
|
||||||
prop = nonEnumerableProps[nonEnumIdx];
|
|
||||||
if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
|
|
||||||
keys.push(prop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve the names of an object's own properties.
|
|
||||||
// Delegates to **ECMAScript 5**'s native `Object.keys`
|
|
||||||
_.keys = function(obj) {
|
|
||||||
if (!_.isObject(obj)) return [];
|
|
||||||
if (nativeKeys) return nativeKeys(obj);
|
|
||||||
var keys = [];
|
|
||||||
for (var key in obj) if (_.has(obj, key)) keys.push(key);
|
|
||||||
// Ahem, IE < 9.
|
|
||||||
if (hasEnumBug) collectNonEnumProps(obj, keys);
|
|
||||||
return keys;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Retrieve all the property names of an object.
|
|
||||||
_.allKeys = function(obj) {
|
|
||||||
if (!_.isObject(obj)) return [];
|
|
||||||
var keys = [];
|
|
||||||
for (var key in obj) keys.push(key);
|
|
||||||
// Ahem, IE < 9.
|
|
||||||
if (hasEnumBug) collectNonEnumProps(obj, keys);
|
|
||||||
return keys;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Retrieve the values of an object's properties.
|
|
||||||
_.values = function(obj) {
|
|
||||||
var keys = _.keys(obj);
|
|
||||||
var length = keys.length;
|
|
||||||
var values = Array(length);
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
values[i] = obj[keys[i]];
|
|
||||||
}
|
|
||||||
return values;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns the results of applying the iteratee to each element of the object
|
|
||||||
// In contrast to _.map it returns an object
|
|
||||||
_.mapObject = function(obj, iteratee, context) {
|
|
||||||
iteratee = cb(iteratee, context);
|
|
||||||
var keys = _.keys(obj),
|
|
||||||
length = keys.length,
|
|
||||||
results = {},
|
|
||||||
currentKey;
|
|
||||||
for (var index = 0; index < length; index++) {
|
|
||||||
currentKey = keys[index];
|
|
||||||
results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert an object into a list of `[key, value]` pairs.
|
|
||||||
_.pairs = function(obj) {
|
|
||||||
var keys = _.keys(obj);
|
|
||||||
var length = keys.length;
|
|
||||||
var pairs = Array(length);
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
pairs[i] = [keys[i], obj[keys[i]]];
|
|
||||||
}
|
|
||||||
return pairs;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Invert the keys and values of an object. The values must be serializable.
|
|
||||||
_.invert = function(obj) {
|
|
||||||
var result = {};
|
|
||||||
var keys = _.keys(obj);
|
|
||||||
for (var i = 0, length = keys.length; i < length; i++) {
|
|
||||||
result[obj[keys[i]]] = keys[i];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return a sorted list of the function names available on the object.
|
|
||||||
// Aliased as `methods`
|
|
||||||
_.functions = _.methods = function(obj) {
|
|
||||||
var names = [];
|
|
||||||
for (var key in obj) {
|
|
||||||
if (_.isFunction(obj[key])) names.push(key);
|
|
||||||
}
|
|
||||||
return names.sort();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Extend a given object with all the properties in passed-in object(s).
|
|
||||||
_.extend = createAssigner(_.allKeys);
|
|
||||||
|
|
||||||
// Assigns a given object with all the own properties in the passed-in object(s)
|
|
||||||
// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
|
|
||||||
_.extendOwn = _.assign = createAssigner(_.keys);
|
|
||||||
|
|
||||||
// Returns the first key on an object that passes a predicate test
|
|
||||||
_.findKey = function(obj, predicate, context) {
|
|
||||||
predicate = cb(predicate, context);
|
|
||||||
var keys = _.keys(obj), key;
|
|
||||||
for (var i = 0, length = keys.length; i < length; i++) {
|
|
||||||
key = keys[i];
|
|
||||||
if (predicate(obj[key], key, obj)) return key;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return a copy of the object only containing the whitelisted properties.
|
|
||||||
_.pick = function(object, oiteratee, context) {
|
|
||||||
var result = {}, obj = object, iteratee, keys;
|
|
||||||
if (obj == null) return result;
|
|
||||||
if (_.isFunction(oiteratee)) {
|
|
||||||
keys = _.allKeys(obj);
|
|
||||||
iteratee = optimizeCb(oiteratee, context);
|
|
||||||
} else {
|
|
||||||
keys = flatten(arguments, false, false, 1);
|
|
||||||
iteratee = function(value, key, obj) { return key in obj; };
|
|
||||||
obj = Object(obj);
|
|
||||||
}
|
|
||||||
for (var i = 0, length = keys.length; i < length; i++) {
|
|
||||||
var key = keys[i];
|
|
||||||
var value = obj[key];
|
|
||||||
if (iteratee(value, key, obj)) result[key] = value;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return a copy of the object without the blacklisted properties.
|
|
||||||
_.omit = function(obj, iteratee, context) {
|
|
||||||
if (_.isFunction(iteratee)) {
|
|
||||||
iteratee = _.negate(iteratee);
|
|
||||||
} else {
|
|
||||||
var keys = _.map(flatten(arguments, false, false, 1), String);
|
|
||||||
iteratee = function(value, key) {
|
|
||||||
return !_.contains(keys, key);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return _.pick(obj, iteratee, context);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Fill in a given object with default properties.
|
|
||||||
_.defaults = createAssigner(_.allKeys, true);
|
|
||||||
|
|
||||||
// Creates an object that inherits from the given prototype object.
|
|
||||||
// If additional properties are provided then they will be added to the
|
|
||||||
// created object.
|
|
||||||
_.create = function(prototype, props) {
|
|
||||||
var result = baseCreate(prototype);
|
|
||||||
if (props) _.extendOwn(result, props);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create a (shallow-cloned) duplicate of an object.
|
|
||||||
_.clone = function(obj) {
|
|
||||||
if (!_.isObject(obj)) return obj;
|
|
||||||
return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Invokes interceptor with the obj, and then returns obj.
|
|
||||||
// The primary purpose of this method is to "tap into" a method chain, in
|
|
||||||
// order to perform operations on intermediate results within the chain.
|
|
||||||
_.tap = function(obj, interceptor) {
|
|
||||||
interceptor(obj);
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns whether an object has a given set of `key:value` pairs.
|
|
||||||
_.isMatch = function(object, attrs) {
|
|
||||||
var keys = _.keys(attrs), length = keys.length;
|
|
||||||
if (object == null) return !length;
|
|
||||||
var obj = Object(object);
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
var key = keys[i];
|
|
||||||
if (attrs[key] !== obj[key] || !(key in obj)) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Internal recursive comparison function for `isEqual`.
|
|
||||||
var eq = function(a, b, aStack, bStack) {
|
|
||||||
// Identical objects are equal. `0 === -0`, but they aren't identical.
|
|
||||||
// See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
|
|
||||||
if (a === b) return a !== 0 || 1 / a === 1 / b;
|
|
||||||
// A strict comparison is necessary because `null == undefined`.
|
|
||||||
if (a == null || b == null) return a === b;
|
|
||||||
// Unwrap any wrapped objects.
|
|
||||||
if (a instanceof _) a = a._wrapped;
|
|
||||||
if (b instanceof _) b = b._wrapped;
|
|
||||||
// Compare `[[Class]]` names.
|
|
||||||
var className = toString.call(a);
|
|
||||||
if (className !== toString.call(b)) return false;
|
|
||||||
switch (className) {
|
|
||||||
// Strings, numbers, regular expressions, dates, and booleans are compared by value.
|
|
||||||
case '[object RegExp]':
|
|
||||||
// RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
|
|
||||||
case '[object String]':
|
|
||||||
// Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
|
|
||||||
// equivalent to `new String("5")`.
|
|
||||||
return '' + a === '' + b;
|
|
||||||
case '[object Number]':
|
|
||||||
// `NaN`s are equivalent, but non-reflexive.
|
|
||||||
// Object(NaN) is equivalent to NaN
|
|
||||||
if (+a !== +a) return +b !== +b;
|
|
||||||
// An `egal` comparison is performed for other numeric values.
|
|
||||||
return +a === 0 ? 1 / +a === 1 / b : +a === +b;
|
|
||||||
case '[object Date]':
|
|
||||||
case '[object Boolean]':
|
|
||||||
// Coerce dates and booleans to numeric primitive values. Dates are compared by their
|
|
||||||
// millisecond representations. Note that invalid dates with millisecond representations
|
|
||||||
// of `NaN` are not equivalent.
|
|
||||||
return +a === +b;
|
|
||||||
}
|
|
||||||
|
|
||||||
var areArrays = className === '[object Array]';
|
|
||||||
if (!areArrays) {
|
|
||||||
if (typeof a != 'object' || typeof b != 'object') return false;
|
|
||||||
|
|
||||||
// Objects with different constructors are not equivalent, but `Object`s or `Array`s
|
|
||||||
// from different frames are.
|
|
||||||
var aCtor = a.constructor, bCtor = b.constructor;
|
|
||||||
if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
|
|
||||||
_.isFunction(bCtor) && bCtor instanceof bCtor)
|
|
||||||
&& ('constructor' in a && 'constructor' in b)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
|
||||||
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
|
||||||
|
|
||||||
// Initializing stack of traversed objects.
|
|
||||||
// It's done here since we only need them for objects and arrays comparison.
|
|
||||||
aStack = aStack || [];
|
|
||||||
bStack = bStack || [];
|
|
||||||
var length = aStack.length;
|
|
||||||
while (length--) {
|
|
||||||
// Linear search. Performance is inversely proportional to the number of
|
|
||||||
// unique nested structures.
|
|
||||||
if (aStack[length] === a) return bStack[length] === b;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the first object to the stack of traversed objects.
|
|
||||||
aStack.push(a);
|
|
||||||
bStack.push(b);
|
|
||||||
|
|
||||||
// Recursively compare objects and arrays.
|
|
||||||
if (areArrays) {
|
|
||||||
// Compare array lengths to determine if a deep comparison is necessary.
|
|
||||||
length = a.length;
|
|
||||||
if (length !== b.length) return false;
|
|
||||||
// Deep compare the contents, ignoring non-numeric properties.
|
|
||||||
while (length--) {
|
|
||||||
if (!eq(a[length], b[length], aStack, bStack)) return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Deep compare objects.
|
|
||||||
var keys = _.keys(a), key;
|
|
||||||
length = keys.length;
|
|
||||||
// Ensure that both objects contain the same number of properties before comparing deep equality.
|
|
||||||
if (_.keys(b).length !== length) return false;
|
|
||||||
while (length--) {
|
|
||||||
// Deep compare each member
|
|
||||||
key = keys[length];
|
|
||||||
if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Remove the first object from the stack of traversed objects.
|
|
||||||
aStack.pop();
|
|
||||||
bStack.pop();
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Perform a deep comparison to check if two objects are equal.
|
|
||||||
_.isEqual = function(a, b) {
|
|
||||||
return eq(a, b);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given array, string, or object empty?
|
|
||||||
// An "empty" object has no enumerable own-properties.
|
|
||||||
_.isEmpty = function(obj) {
|
|
||||||
if (obj == null) return true;
|
|
||||||
if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
|
|
||||||
return _.keys(obj).length === 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given value a DOM element?
|
|
||||||
_.isElement = function(obj) {
|
|
||||||
return !!(obj && obj.nodeType === 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given value an array?
|
|
||||||
// Delegates to ECMA5's native Array.isArray
|
|
||||||
_.isArray = nativeIsArray || function(obj) {
|
|
||||||
return toString.call(obj) === '[object Array]';
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given variable an object?
|
|
||||||
_.isObject = function(obj) {
|
|
||||||
var type = typeof obj;
|
|
||||||
return type === 'function' || type === 'object' && !!obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
|
|
||||||
_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
|
|
||||||
_['is' + name] = function(obj) {
|
|
||||||
return toString.call(obj) === '[object ' + name + ']';
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Define a fallback version of the method in browsers (ahem, IE < 9), where
|
|
||||||
// there isn't any inspectable "Arguments" type.
|
|
||||||
if (!_.isArguments(arguments)) {
|
|
||||||
_.isArguments = function(obj) {
|
|
||||||
return _.has(obj, 'callee');
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
|
|
||||||
// IE 11 (#1621), and in Safari 8 (#1929).
|
|
||||||
if (typeof /./ != 'function' && typeof Int8Array != 'object') {
|
|
||||||
_.isFunction = function(obj) {
|
|
||||||
return typeof obj == 'function' || false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is a given object a finite number?
|
|
||||||
_.isFinite = function(obj) {
|
|
||||||
return isFinite(obj) && !isNaN(parseFloat(obj));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is the given value `NaN`? (NaN is the only number which does not equal itself).
|
|
||||||
_.isNaN = function(obj) {
|
|
||||||
return _.isNumber(obj) && obj !== +obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given value a boolean?
|
|
||||||
_.isBoolean = function(obj) {
|
|
||||||
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given value equal to null?
|
|
||||||
_.isNull = function(obj) {
|
|
||||||
return obj === null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Is a given variable undefined?
|
|
||||||
_.isUndefined = function(obj) {
|
|
||||||
return obj === void 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Shortcut function for checking if an object has a given property directly
|
|
||||||
// on itself (in other words, not on a prototype).
|
|
||||||
_.has = function(obj, key) {
|
|
||||||
return obj != null && hasOwnProperty.call(obj, key);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility Functions
|
|
||||||
// -----------------
|
|
||||||
|
|
||||||
// Run Underscore.js in *noConflict* mode, returning the `_` variable to its
|
|
||||||
// previous owner. Returns a reference to the Underscore object.
|
|
||||||
_.noConflict = function() {
|
|
||||||
root._ = previousUnderscore;
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Keep the identity function around for default iteratees.
|
|
||||||
_.identity = function(value) {
|
|
||||||
return value;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Predicate-generating functions. Often useful outside of Underscore.
|
|
||||||
_.constant = function(value) {
|
|
||||||
return function() {
|
|
||||||
return value;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_.noop = function(){};
|
|
||||||
|
|
||||||
_.property = property;
|
|
||||||
|
|
||||||
// Generates a function for a given object that returns a given property.
|
|
||||||
_.propertyOf = function(obj) {
|
|
||||||
return obj == null ? function(){} : function(key) {
|
|
||||||
return obj[key];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns a predicate for checking whether an object has a given set of
|
|
||||||
// `key:value` pairs.
|
|
||||||
_.matcher = _.matches = function(attrs) {
|
|
||||||
attrs = _.extendOwn({}, attrs);
|
|
||||||
return function(obj) {
|
|
||||||
return _.isMatch(obj, attrs);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Run a function **n** times.
|
|
||||||
_.times = function(n, iteratee, context) {
|
|
||||||
var accum = Array(Math.max(0, n));
|
|
||||||
iteratee = optimizeCb(iteratee, context, 1);
|
|
||||||
for (var i = 0; i < n; i++) accum[i] = iteratee(i);
|
|
||||||
return accum;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return a random integer between min and max (inclusive).
|
|
||||||
_.random = function(min, max) {
|
|
||||||
if (max == null) {
|
|
||||||
max = min;
|
|
||||||
min = 0;
|
|
||||||
}
|
|
||||||
return min + Math.floor(Math.random() * (max - min + 1));
|
|
||||||
};
|
|
||||||
|
|
||||||
// A (possibly faster) way to get the current timestamp as an integer.
|
|
||||||
_.now = Date.now || function() {
|
|
||||||
return new Date().getTime();
|
|
||||||
};
|
|
||||||
|
|
||||||
// List of HTML entities for escaping.
|
|
||||||
var escapeMap = {
|
|
||||||
'&': '&',
|
|
||||||
'<': '<',
|
|
||||||
'>': '>',
|
|
||||||
'"': '"',
|
|
||||||
"'": ''',
|
|
||||||
'`': '`'
|
|
||||||
};
|
|
||||||
var unescapeMap = _.invert(escapeMap);
|
|
||||||
|
|
||||||
// Functions for escaping and unescaping strings to/from HTML interpolation.
|
|
||||||
var createEscaper = function(map) {
|
|
||||||
var escaper = function(match) {
|
|
||||||
return map[match];
|
|
||||||
};
|
|
||||||
// Regexes for identifying a key that needs to be escaped
|
|
||||||
var source = '(?:' + _.keys(map).join('|') + ')';
|
|
||||||
var testRegexp = RegExp(source);
|
|
||||||
var replaceRegexp = RegExp(source, 'g');
|
|
||||||
return function(string) {
|
|
||||||
string = string == null ? '' : '' + string;
|
|
||||||
return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
_.escape = createEscaper(escapeMap);
|
|
||||||
_.unescape = createEscaper(unescapeMap);
|
|
||||||
|
|
||||||
// If the value of the named `property` is a function then invoke it with the
|
|
||||||
// `object` as context; otherwise, return it.
|
|
||||||
_.result = function(object, property, fallback) {
|
|
||||||
var value = object == null ? void 0 : object[property];
|
|
||||||
if (value === void 0) {
|
|
||||||
value = fallback;
|
|
||||||
}
|
|
||||||
return _.isFunction(value) ? value.call(object) : value;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Generate a unique integer id (unique within the entire client session).
|
|
||||||
// Useful for temporary DOM ids.
|
|
||||||
var idCounter = 0;
|
|
||||||
_.uniqueId = function(prefix) {
|
|
||||||
var id = ++idCounter + '';
|
|
||||||
return prefix ? prefix + id : id;
|
|
||||||
};
|
|
||||||
|
|
||||||
// By default, Underscore uses ERB-style template delimiters, change the
|
|
||||||
// following template settings to use alternative delimiters.
|
|
||||||
_.templateSettings = {
|
|
||||||
evaluate : /<%([\s\S]+?)%>/g,
|
|
||||||
interpolate : /<%=([\s\S]+?)%>/g,
|
|
||||||
escape : /<%-([\s\S]+?)%>/g
|
|
||||||
};
|
|
||||||
|
|
||||||
// When customizing `templateSettings`, if you don't want to define an
|
|
||||||
// interpolation, evaluation or escaping regex, we need one that is
|
|
||||||
// guaranteed not to match.
|
|
||||||
var noMatch = /(.)^/;
|
|
||||||
|
|
||||||
// Certain characters need to be escaped so that they can be put into a
|
|
||||||
// string literal.
|
|
||||||
var escapes = {
|
|
||||||
"'": "'",
|
|
||||||
'\\': '\\',
|
|
||||||
'\r': 'r',
|
|
||||||
'\n': 'n',
|
|
||||||
'\u2028': 'u2028',
|
|
||||||
'\u2029': 'u2029'
|
|
||||||
};
|
|
||||||
|
|
||||||
var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
|
|
||||||
|
|
||||||
var escapeChar = function(match) {
|
|
||||||
return '\\' + escapes[match];
|
|
||||||
};
|
|
||||||
|
|
||||||
// JavaScript micro-templating, similar to John Resig's implementation.
|
|
||||||
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
|
||||||
// and correctly escapes quotes within interpolated code.
|
|
||||||
// NB: `oldSettings` only exists for backwards compatibility.
|
|
||||||
_.template = function(text, settings, oldSettings) {
|
|
||||||
if (!settings && oldSettings) settings = oldSettings;
|
|
||||||
settings = _.defaults({}, settings, _.templateSettings);
|
|
||||||
|
|
||||||
// Combine delimiters into one regular expression via alternation.
|
|
||||||
var matcher = RegExp([
|
|
||||||
(settings.escape || noMatch).source,
|
|
||||||
(settings.interpolate || noMatch).source,
|
|
||||||
(settings.evaluate || noMatch).source
|
|
||||||
].join('|') + '|$', 'g');
|
|
||||||
|
|
||||||
// Compile the template source, escaping string literals appropriately.
|
|
||||||
var index = 0;
|
|
||||||
var source = "__p+='";
|
|
||||||
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
|
|
||||||
source += text.slice(index, offset).replace(escaper, escapeChar);
|
|
||||||
index = offset + match.length;
|
|
||||||
|
|
||||||
if (escape) {
|
|
||||||
source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
|
|
||||||
} else if (interpolate) {
|
|
||||||
source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
|
|
||||||
} else if (evaluate) {
|
|
||||||
source += "';\n" + evaluate + "\n__p+='";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adobe VMs need the match returned to produce the correct offest.
|
|
||||||
return match;
|
|
||||||
});
|
|
||||||
source += "';\n";
|
|
||||||
|
|
||||||
// If a variable is not specified, place data values in local scope.
|
|
||||||
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
|
|
||||||
|
|
||||||
source = "var __t,__p='',__j=Array.prototype.join," +
|
|
||||||
"print=function(){__p+=__j.call(arguments,'');};\n" +
|
|
||||||
source + 'return __p;\n';
|
|
||||||
|
|
||||||
try {
|
|
||||||
var render = new Function(settings.variable || 'obj', '_', source);
|
|
||||||
} catch (e) {
|
|
||||||
e.source = source;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
var template = function(data) {
|
|
||||||
return render.call(this, data, _);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Provide the compiled source as a convenience for precompilation.
|
|
||||||
var argument = settings.variable || 'obj';
|
|
||||||
template.source = 'function(' + argument + '){\n' + source + '}';
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add a "chain" function. Start chaining a wrapped Underscore object.
|
|
||||||
_.chain = function(obj) {
|
|
||||||
var instance = _(obj);
|
|
||||||
instance._chain = true;
|
|
||||||
return instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
// OOP
|
|
||||||
// ---------------
|
|
||||||
// If Underscore is called as a function, it returns a wrapped object that
|
|
||||||
// can be used OO-style. This wrapper holds altered versions of all the
|
|
||||||
// underscore functions. Wrapped objects may be chained.
|
|
||||||
|
|
||||||
// Helper function to continue chaining intermediate results.
|
|
||||||
var result = function(instance, obj) {
|
|
||||||
return instance._chain ? _(obj).chain() : obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add your own custom functions to the Underscore object.
|
|
||||||
_.mixin = function(obj) {
|
|
||||||
_.each(_.functions(obj), function(name) {
|
|
||||||
var func = _[name] = obj[name];
|
|
||||||
_.prototype[name] = function() {
|
|
||||||
var args = [this._wrapped];
|
|
||||||
push.apply(args, arguments);
|
|
||||||
return result(this, func.apply(_, args));
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add all of the Underscore functions to the wrapper object.
|
|
||||||
_.mixin(_);
|
|
||||||
|
|
||||||
// Add all mutator Array functions to the wrapper.
|
|
||||||
_.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
|
|
||||||
var method = ArrayProto[name];
|
|
||||||
_.prototype[name] = function() {
|
|
||||||
var obj = this._wrapped;
|
|
||||||
method.apply(obj, arguments);
|
|
||||||
if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
|
|
||||||
return result(this, obj);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add all accessor Array functions to the wrapper.
|
|
||||||
_.each(['concat', 'join', 'slice'], function(name) {
|
|
||||||
var method = ArrayProto[name];
|
|
||||||
_.prototype[name] = function() {
|
|
||||||
return result(this, method.apply(this._wrapped, arguments));
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Extracts the result from a wrapped and chained object.
|
|
||||||
_.prototype.value = function() {
|
|
||||||
return this._wrapped;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Provide unwrapping proxy for some methods used in engine operations
|
|
||||||
// such as arithmetic and JSON stringification.
|
|
||||||
_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
|
|
||||||
|
|
||||||
_.prototype.toString = function() {
|
|
||||||
return '' + this._wrapped;
|
|
||||||
};
|
|
||||||
|
|
||||||
// AMD registration happens at the end for compatibility with AMD loaders
|
|
||||||
// that may not enforce next-turn semantics on modules. Even though general
|
|
||||||
// practice for AMD registration is to be anonymous, underscore registers
|
|
||||||
// as a named module because, like jQuery, it is a base library that is
|
|
||||||
// popular enough to be bundled in a third party lib, but not be part of
|
|
||||||
// an AMD load request. Those cases could generate an error when an
|
|
||||||
// anonymous define() is called outside of a loader request.
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define('underscore', [], function() {
|
|
||||||
return _;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}.call(this));
|
|
Before Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 203 B |
|
@ -1,808 +0,0 @@
|
||||||
/*
|
|
||||||
* websupport.js
|
|
||||||
* ~~~~~~~~~~~~~
|
|
||||||
*
|
|
||||||
* sphinx.websupport utilities for all documentation.
|
|
||||||
*
|
|
||||||
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
||||||
* :license: BSD, see LICENSE for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function($) {
|
|
||||||
$.fn.autogrow = function() {
|
|
||||||
return this.each(function() {
|
|
||||||
var textarea = this;
|
|
||||||
|
|
||||||
$.fn.autogrow.resize(textarea);
|
|
||||||
|
|
||||||
$(textarea)
|
|
||||||
.focus(function() {
|
|
||||||
textarea.interval = setInterval(function() {
|
|
||||||
$.fn.autogrow.resize(textarea);
|
|
||||||
}, 500);
|
|
||||||
})
|
|
||||||
.blur(function() {
|
|
||||||
clearInterval(textarea.interval);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.autogrow.resize = function(textarea) {
|
|
||||||
var lineHeight = parseInt($(textarea).css('line-height'), 10);
|
|
||||||
var lines = textarea.value.split('\n');
|
|
||||||
var columns = textarea.cols;
|
|
||||||
var lineCount = 0;
|
|
||||||
$.each(lines, function() {
|
|
||||||
lineCount += Math.ceil(this.length / columns) || 1;
|
|
||||||
});
|
|
||||||
var height = lineHeight * (lineCount + 1);
|
|
||||||
$(textarea).css('height', height);
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
(function($) {
|
|
||||||
var comp, by;
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
initEvents();
|
|
||||||
initComparator();
|
|
||||||
}
|
|
||||||
|
|
||||||
function initEvents() {
|
|
||||||
$(document).on("click", 'a.comment-close', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
hide($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.vote', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
handleVote($(this));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.reply', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
openReply($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.close-reply', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
closeReply($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.sort-option', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
handleReSort($(this));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.show-proposal', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
showProposal($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.hide-proposal', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
hideProposal($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.show-propose-change', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
showProposeChange($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.hide-propose-change', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
hideProposeChange($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.accept-comment', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
acceptComment($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.delete-comment', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
deleteComment($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
$(document).on("click", 'a.comment-markup', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
toggleCommentMarkupBox($(this).attr('id').substring(2));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set comp, which is a comparator function used for sorting and
|
|
||||||
* inserting comments into the list.
|
|
||||||
*/
|
|
||||||
function setComparator() {
|
|
||||||
// If the first three letters are "asc", sort in ascending order
|
|
||||||
// and remove the prefix.
|
|
||||||
if (by.substring(0,3) == 'asc') {
|
|
||||||
var i = by.substring(3);
|
|
||||||
comp = function(a, b) { return a[i] - b[i]; };
|
|
||||||
} else {
|
|
||||||
// Otherwise sort in descending order.
|
|
||||||
comp = function(a, b) { return b[by] - a[by]; };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset link styles and format the selected sort option.
|
|
||||||
$('a.sel').attr('href', '#').removeClass('sel');
|
|
||||||
$('a.by' + by).removeAttr('href').addClass('sel');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a comp function. If the user has preferences stored in
|
|
||||||
* the sortBy cookie, use those, otherwise use the default.
|
|
||||||
*/
|
|
||||||
function initComparator() {
|
|
||||||
by = 'rating'; // Default to sort by rating.
|
|
||||||
// If the sortBy cookie is set, use that instead.
|
|
||||||
if (document.cookie.length > 0) {
|
|
||||||
var start = document.cookie.indexOf('sortBy=');
|
|
||||||
if (start != -1) {
|
|
||||||
start = start + 7;
|
|
||||||
var end = document.cookie.indexOf(";", start);
|
|
||||||
if (end == -1) {
|
|
||||||
end = document.cookie.length;
|
|
||||||
by = unescape(document.cookie.substring(start, end));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setComparator();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show a comment div.
|
|
||||||
*/
|
|
||||||
function show(id) {
|
|
||||||
$('#ao' + id).hide();
|
|
||||||
$('#ah' + id).show();
|
|
||||||
var context = $.extend({id: id}, opts);
|
|
||||||
var popup = $(renderTemplate(popupTemplate, context)).hide();
|
|
||||||
popup.find('textarea[name="proposal"]').hide();
|
|
||||||
popup.find('a.by' + by).addClass('sel');
|
|
||||||
var form = popup.find('#cf' + id);
|
|
||||||
form.submit(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
addComment(form);
|
|
||||||
});
|
|
||||||
$('#s' + id).after(popup);
|
|
||||||
popup.slideDown('fast', function() {
|
|
||||||
getComments(id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hide a comment div.
|
|
||||||
*/
|
|
||||||
function hide(id) {
|
|
||||||
$('#ah' + id).hide();
|
|
||||||
$('#ao' + id).show();
|
|
||||||
var div = $('#sc' + id);
|
|
||||||
div.slideUp('fast', function() {
|
|
||||||
div.remove();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform an ajax request to get comments for a node
|
|
||||||
* and insert the comments into the comments tree.
|
|
||||||
*/
|
|
||||||
function getComments(id) {
|
|
||||||
$.ajax({
|
|
||||||
type: 'GET',
|
|
||||||
url: opts.getCommentsURL,
|
|
||||||
data: {node: id},
|
|
||||||
success: function(data, textStatus, request) {
|
|
||||||
var ul = $('#cl' + id);
|
|
||||||
var speed = 100;
|
|
||||||
$('#cf' + id)
|
|
||||||
.find('textarea[name="proposal"]')
|
|
||||||
.data('source', data.source);
|
|
||||||
|
|
||||||
if (data.comments.length === 0) {
|
|
||||||
ul.html('<li>No comments yet.</li>');
|
|
||||||
ul.data('empty', true);
|
|
||||||
} else {
|
|
||||||
// If there are comments, sort them and put them in the list.
|
|
||||||
var comments = sortComments(data.comments);
|
|
||||||
speed = data.comments.length * 100;
|
|
||||||
appendComments(comments, ul);
|
|
||||||
ul.data('empty', false);
|
|
||||||
}
|
|
||||||
$('#cn' + id).slideUp(speed + 200);
|
|
||||||
ul.slideDown(speed);
|
|
||||||
},
|
|
||||||
error: function(request, textStatus, error) {
|
|
||||||
showError('Oops, there was a problem retrieving the comments.');
|
|
||||||
},
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a comment via ajax and insert the comment into the comment tree.
|
|
||||||
*/
|
|
||||||
function addComment(form) {
|
|
||||||
var node_id = form.find('input[name="node"]').val();
|
|
||||||
var parent_id = form.find('input[name="parent"]').val();
|
|
||||||
var text = form.find('textarea[name="comment"]').val();
|
|
||||||
var proposal = form.find('textarea[name="proposal"]').val();
|
|
||||||
|
|
||||||
if (text == '') {
|
|
||||||
showError('Please enter a comment.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disable the form that is being submitted.
|
|
||||||
form.find('textarea,input').attr('disabled', 'disabled');
|
|
||||||
|
|
||||||
// Send the comment to the server.
|
|
||||||
$.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: opts.addCommentURL,
|
|
||||||
dataType: 'json',
|
|
||||||
data: {
|
|
||||||
node: node_id,
|
|
||||||
parent: parent_id,
|
|
||||||
text: text,
|
|
||||||
proposal: proposal
|
|
||||||
},
|
|
||||||
success: function(data, textStatus, error) {
|
|
||||||
// Reset the form.
|
|
||||||
if (node_id) {
|
|
||||||
hideProposeChange(node_id);
|
|
||||||
}
|
|
||||||
form.find('textarea')
|
|
||||||
.val('')
|
|
||||||
.add(form.find('input'))
|
|
||||||
.removeAttr('disabled');
|
|
||||||
var ul = $('#cl' + (node_id || parent_id));
|
|
||||||
if (ul.data('empty')) {
|
|
||||||
$(ul).empty();
|
|
||||||
ul.data('empty', false);
|
|
||||||
}
|
|
||||||
insertComment(data.comment);
|
|
||||||
var ao = $('#ao' + node_id);
|
|
||||||
ao.find('img').attr({'src': opts.commentBrightImage});
|
|
||||||
if (node_id) {
|
|
||||||
// if this was a "root" comment, remove the commenting box
|
|
||||||
// (the user can get it back by reopening the comment popup)
|
|
||||||
$('#ca' + node_id).slideUp();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function(request, textStatus, error) {
|
|
||||||
form.find('textarea,input').removeAttr('disabled');
|
|
||||||
showError('Oops, there was a problem adding the comment.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively append comments to the main comment list and children
|
|
||||||
* lists, creating the comment tree.
|
|
||||||
*/
|
|
||||||
function appendComments(comments, ul) {
|
|
||||||
$.each(comments, function() {
|
|
||||||
var div = createCommentDiv(this);
|
|
||||||
ul.append($(document.createElement('li')).html(div));
|
|
||||||
appendComments(this.children, div.find('ul.comment-children'));
|
|
||||||
// To avoid stagnating data, don't store the comments children in data.
|
|
||||||
this.children = null;
|
|
||||||
div.data('comment', this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* After adding a new comment, it must be inserted in the correct
|
|
||||||
* location in the comment tree.
|
|
||||||
*/
|
|
||||||
function insertComment(comment) {
|
|
||||||
var div = createCommentDiv(comment);
|
|
||||||
|
|
||||||
// To avoid stagnating data, don't store the comments children in data.
|
|
||||||
comment.children = null;
|
|
||||||
div.data('comment', comment);
|
|
||||||
|
|
||||||
var ul = $('#cl' + (comment.node || comment.parent));
|
|
||||||
var siblings = getChildren(ul);
|
|
||||||
|
|
||||||
var li = $(document.createElement('li'));
|
|
||||||
li.hide();
|
|
||||||
|
|
||||||
// Determine where in the parents children list to insert this comment.
|
|
||||||
for(i=0; i < siblings.length; i++) {
|
|
||||||
if (comp(comment, siblings[i]) <= 0) {
|
|
||||||
$('#cd' + siblings[i].id)
|
|
||||||
.parent()
|
|
||||||
.before(li.html(div));
|
|
||||||
li.slideDown('fast');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we get here, this comment rates lower than all the others,
|
|
||||||
// or it is the only comment in the list.
|
|
||||||
ul.append(li.html(div));
|
|
||||||
li.slideDown('fast');
|
|
||||||
}
|
|
||||||
|
|
||||||
function acceptComment(id) {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: opts.acceptCommentURL,
|
|
||||||
data: {id: id},
|
|
||||||
success: function(data, textStatus, request) {
|
|
||||||
$('#cm' + id).fadeOut('fast');
|
|
||||||
$('#cd' + id).removeClass('moderate');
|
|
||||||
},
|
|
||||||
error: function(request, textStatus, error) {
|
|
||||||
showError('Oops, there was a problem accepting the comment.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteComment(id) {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: opts.deleteCommentURL,
|
|
||||||
data: {id: id},
|
|
||||||
success: function(data, textStatus, request) {
|
|
||||||
var div = $('#cd' + id);
|
|
||||||
if (data == 'delete') {
|
|
||||||
// Moderator mode: remove the comment and all children immediately
|
|
||||||
div.slideUp('fast', function() {
|
|
||||||
div.remove();
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// User mode: only mark the comment as deleted
|
|
||||||
div
|
|
||||||
.find('span.user-id:first')
|
|
||||||
.text('[deleted]').end()
|
|
||||||
.find('div.comment-text:first')
|
|
||||||
.text('[deleted]').end()
|
|
||||||
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
|
|
||||||
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
|
|
||||||
.remove();
|
|
||||||
var comment = div.data('comment');
|
|
||||||
comment.username = '[deleted]';
|
|
||||||
comment.text = '[deleted]';
|
|
||||||
div.data('comment', comment);
|
|
||||||
},
|
|
||||||
error: function(request, textStatus, error) {
|
|
||||||
showError('Oops, there was a problem deleting the comment.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showProposal(id) {
|
|
||||||
$('#sp' + id).hide();
|
|
||||||
$('#hp' + id).show();
|
|
||||||
$('#pr' + id).slideDown('fast');
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideProposal(id) {
|
|
||||||
$('#hp' + id).hide();
|
|
||||||
$('#sp' + id).show();
|
|
||||||
$('#pr' + id).slideUp('fast');
|
|
||||||
}
|
|
||||||
|
|
||||||
function showProposeChange(id) {
|
|
||||||
$('#pc' + id).hide();
|
|
||||||
$('#hc' + id).show();
|
|
||||||
var textarea = $('#pt' + id);
|
|
||||||
textarea.val(textarea.data('source'));
|
|
||||||
$.fn.autogrow.resize(textarea[0]);
|
|
||||||
textarea.slideDown('fast');
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideProposeChange(id) {
|
|
||||||
$('#hc' + id).hide();
|
|
||||||
$('#pc' + id).show();
|
|
||||||
var textarea = $('#pt' + id);
|
|
||||||
textarea.val('').removeAttr('disabled');
|
|
||||||
textarea.slideUp('fast');
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleCommentMarkupBox(id) {
|
|
||||||
$('#mb' + id).toggle();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Handle when the user clicks on a sort by link. */
|
|
||||||
function handleReSort(link) {
|
|
||||||
var classes = link.attr('class').split(/\s+/);
|
|
||||||
for (var i=0; i<classes.length; i++) {
|
|
||||||
if (classes[i] != 'sort-option') {
|
|
||||||
by = classes[i].substring(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setComparator();
|
|
||||||
// Save/update the sortBy cookie.
|
|
||||||
var expiration = new Date();
|
|
||||||
expiration.setDate(expiration.getDate() + 365);
|
|
||||||
document.cookie= 'sortBy=' + escape(by) +
|
|
||||||
';expires=' + expiration.toUTCString();
|
|
||||||
$('ul.comment-ul').each(function(index, ul) {
|
|
||||||
var comments = getChildren($(ul), true);
|
|
||||||
comments = sortComments(comments);
|
|
||||||
appendComments(comments, $(ul).empty());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to process a vote when a user clicks an arrow.
|
|
||||||
*/
|
|
||||||
function handleVote(link) {
|
|
||||||
if (!opts.voting) {
|
|
||||||
showError("You'll need to login to vote.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var id = link.attr('id');
|
|
||||||
if (!id) {
|
|
||||||
// Didn't click on one of the voting arrows.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// If it is an unvote, the new vote value is 0,
|
|
||||||
// Otherwise it's 1 for an upvote, or -1 for a downvote.
|
|
||||||
var value = 0;
|
|
||||||
if (id.charAt(1) != 'u') {
|
|
||||||
value = id.charAt(0) == 'u' ? 1 : -1;
|
|
||||||
}
|
|
||||||
// The data to be sent to the server.
|
|
||||||
var d = {
|
|
||||||
comment_id: id.substring(2),
|
|
||||||
value: value
|
|
||||||
};
|
|
||||||
|
|
||||||
// Swap the vote and unvote links.
|
|
||||||
link.hide();
|
|
||||||
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
|
|
||||||
.show();
|
|
||||||
|
|
||||||
// The div the comment is displayed in.
|
|
||||||
var div = $('div#cd' + d.comment_id);
|
|
||||||
var data = div.data('comment');
|
|
||||||
|
|
||||||
// If this is not an unvote, and the other vote arrow has
|
|
||||||
// already been pressed, unpress it.
|
|
||||||
if ((d.value !== 0) && (data.vote === d.value * -1)) {
|
|
||||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
|
|
||||||
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the comments rating in the local data.
|
|
||||||
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
|
|
||||||
data.vote = d.value;
|
|
||||||
div.data('comment', data);
|
|
||||||
|
|
||||||
// Change the rating text.
|
|
||||||
div.find('.rating:first')
|
|
||||||
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
|
|
||||||
|
|
||||||
// Send the vote information to the server.
|
|
||||||
$.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: opts.processVoteURL,
|
|
||||||
data: d,
|
|
||||||
error: function(request, textStatus, error) {
|
|
||||||
showError('Oops, there was a problem casting that vote.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open a reply form used to reply to an existing comment.
|
|
||||||
*/
|
|
||||||
function openReply(id) {
|
|
||||||
// Swap out the reply link for the hide link
|
|
||||||
$('#rl' + id).hide();
|
|
||||||
$('#cr' + id).show();
|
|
||||||
|
|
||||||
// Add the reply li to the children ul.
|
|
||||||
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
|
|
||||||
$('#cl' + id)
|
|
||||||
.prepend(div)
|
|
||||||
// Setup the submit handler for the reply form.
|
|
||||||
.find('#rf' + id)
|
|
||||||
.submit(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
addComment($('#rf' + id));
|
|
||||||
closeReply(id);
|
|
||||||
})
|
|
||||||
.find('input[type=button]')
|
|
||||||
.click(function() {
|
|
||||||
closeReply(id);
|
|
||||||
});
|
|
||||||
div.slideDown('fast', function() {
|
|
||||||
$('#rf' + id).find('textarea').focus();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the reply form opened with openReply.
|
|
||||||
*/
|
|
||||||
function closeReply(id) {
|
|
||||||
// Remove the reply div from the DOM.
|
|
||||||
$('#rd' + id).slideUp('fast', function() {
|
|
||||||
$(this).remove();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Swap out the hide link for the reply link
|
|
||||||
$('#cr' + id).hide();
|
|
||||||
$('#rl' + id).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively sort a tree of comments using the comp comparator.
|
|
||||||
*/
|
|
||||||
function sortComments(comments) {
|
|
||||||
comments.sort(comp);
|
|
||||||
$.each(comments, function() {
|
|
||||||
this.children = sortComments(this.children);
|
|
||||||
});
|
|
||||||
return comments;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the children comments from a ul. If recursive is true,
|
|
||||||
* recursively include childrens' children.
|
|
||||||
*/
|
|
||||||
function getChildren(ul, recursive) {
|
|
||||||
var children = [];
|
|
||||||
ul.children().children("[id^='cd']")
|
|
||||||
.each(function() {
|
|
||||||
var comment = $(this).data('comment');
|
|
||||||
if (recursive)
|
|
||||||
comment.children = getChildren($(this).find('#cl' + comment.id), true);
|
|
||||||
children.push(comment);
|
|
||||||
});
|
|
||||||
return children;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Create a div to display a comment in. */
|
|
||||||
function createCommentDiv(comment) {
|
|
||||||
if (!comment.displayed && !opts.moderator) {
|
|
||||||
return $('<div class="moderate">Thank you! Your comment will show up '
|
|
||||||
+ 'once it is has been approved by a moderator.</div>');
|
|
||||||
}
|
|
||||||
// Prettify the comment rating.
|
|
||||||
comment.pretty_rating = comment.rating + ' point' +
|
|
||||||
(comment.rating == 1 ? '' : 's');
|
|
||||||
// Make a class (for displaying not yet moderated comments differently)
|
|
||||||
comment.css_class = comment.displayed ? '' : ' moderate';
|
|
||||||
// Create a div for this comment.
|
|
||||||
var context = $.extend({}, opts, comment);
|
|
||||||
var div = $(renderTemplate(commentTemplate, context));
|
|
||||||
|
|
||||||
// If the user has voted on this comment, highlight the correct arrow.
|
|
||||||
if (comment.vote) {
|
|
||||||
var direction = (comment.vote == 1) ? 'u' : 'd';
|
|
||||||
div.find('#' + direction + 'v' + comment.id).hide();
|
|
||||||
div.find('#' + direction + 'u' + comment.id).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.moderator || comment.text != '[deleted]') {
|
|
||||||
div.find('a.reply').show();
|
|
||||||
if (comment.proposal_diff)
|
|
||||||
div.find('#sp' + comment.id).show();
|
|
||||||
if (opts.moderator && !comment.displayed)
|
|
||||||
div.find('#cm' + comment.id).show();
|
|
||||||
if (opts.moderator || (opts.username == comment.username))
|
|
||||||
div.find('#dc' + comment.id).show();
|
|
||||||
}
|
|
||||||
return div;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A simple template renderer. Placeholders such as <%id%> are replaced
|
|
||||||
* by context['id'] with items being escaped. Placeholders such as <#id#>
|
|
||||||
* are not escaped.
|
|
||||||
*/
|
|
||||||
function renderTemplate(template, context) {
|
|
||||||
var esc = $(document.createElement('div'));
|
|
||||||
|
|
||||||
function handle(ph, escape) {
|
|
||||||
var cur = context;
|
|
||||||
$.each(ph.split('.'), function() {
|
|
||||||
cur = cur[this];
|
|
||||||
});
|
|
||||||
return escape ? esc.text(cur || "").html() : cur;
|
|
||||||
}
|
|
||||||
|
|
||||||
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
|
|
||||||
return handle(arguments[2], arguments[1] == '%' ? true : false);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Flash an error message briefly. */
|
|
||||||
function showError(message) {
|
|
||||||
$(document.createElement('div')).attr({'class': 'popup-error'})
|
|
||||||
.append($(document.createElement('div'))
|
|
||||||
.attr({'class': 'error-message'}).text(message))
|
|
||||||
.appendTo('body')
|
|
||||||
.fadeIn("slow")
|
|
||||||
.delay(2000)
|
|
||||||
.fadeOut("slow");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Add a link the user uses to open the comments popup. */
|
|
||||||
$.fn.comment = function() {
|
|
||||||
return this.each(function() {
|
|
||||||
var id = $(this).attr('id').substring(1);
|
|
||||||
var count = COMMENT_METADATA[id];
|
|
||||||
var title = count + ' comment' + (count == 1 ? '' : 's');
|
|
||||||
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
|
|
||||||
var addcls = count == 0 ? ' nocomment' : '';
|
|
||||||
$(this)
|
|
||||||
.append(
|
|
||||||
$(document.createElement('a')).attr({
|
|
||||||
href: '#',
|
|
||||||
'class': 'sphinx-comment-open' + addcls,
|
|
||||||
id: 'ao' + id
|
|
||||||
})
|
|
||||||
.append($(document.createElement('img')).attr({
|
|
||||||
src: image,
|
|
||||||
alt: 'comment',
|
|
||||||
title: title
|
|
||||||
}))
|
|
||||||
.click(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
show($(this).attr('id').substring(2));
|
|
||||||
})
|
|
||||||
)
|
|
||||||
.append(
|
|
||||||
$(document.createElement('a')).attr({
|
|
||||||
href: '#',
|
|
||||||
'class': 'sphinx-comment-close hidden',
|
|
||||||
id: 'ah' + id
|
|
||||||
})
|
|
||||||
.append($(document.createElement('img')).attr({
|
|
||||||
src: opts.closeCommentImage,
|
|
||||||
alt: 'close',
|
|
||||||
title: 'close'
|
|
||||||
}))
|
|
||||||
.click(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
hide($(this).attr('id').substring(2));
|
|
||||||
})
|
|
||||||
);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var opts = {
|
|
||||||
processVoteURL: '/_process_vote',
|
|
||||||
addCommentURL: '/_add_comment',
|
|
||||||
getCommentsURL: '/_get_comments',
|
|
||||||
acceptCommentURL: '/_accept_comment',
|
|
||||||
deleteCommentURL: '/_delete_comment',
|
|
||||||
commentImage: '/static/_static/comment.png',
|
|
||||||
closeCommentImage: '/static/_static/comment-close.png',
|
|
||||||
loadingImage: '/static/_static/ajax-loader.gif',
|
|
||||||
commentBrightImage: '/static/_static/comment-bright.png',
|
|
||||||
upArrow: '/static/_static/up.png',
|
|
||||||
downArrow: '/static/_static/down.png',
|
|
||||||
upArrowPressed: '/static/_static/up-pressed.png',
|
|
||||||
downArrowPressed: '/static/_static/down-pressed.png',
|
|
||||||
voting: false,
|
|
||||||
moderator: false
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof COMMENT_OPTIONS != "undefined") {
|
|
||||||
opts = jQuery.extend(opts, COMMENT_OPTIONS);
|
|
||||||
}
|
|
||||||
|
|
||||||
var popupTemplate = '\
|
|
||||||
<div class="sphinx-comments" id="sc<%id%>">\
|
|
||||||
<p class="sort-options">\
|
|
||||||
Sort by:\
|
|
||||||
<a href="#" class="sort-option byrating">best rated</a>\
|
|
||||||
<a href="#" class="sort-option byascage">newest</a>\
|
|
||||||
<a href="#" class="sort-option byage">oldest</a>\
|
|
||||||
</p>\
|
|
||||||
<div class="comment-header">Comments</div>\
|
|
||||||
<div class="comment-loading" id="cn<%id%>">\
|
|
||||||
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
|
|
||||||
<ul id="cl<%id%>" class="comment-ul"></ul>\
|
|
||||||
<div id="ca<%id%>">\
|
|
||||||
<p class="add-a-comment">Add a comment\
|
|
||||||
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
|
|
||||||
<div class="comment-markup-box" id="mb<%id%>">\
|
|
||||||
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
|
|
||||||
<code>``code``</code>, \
|
|
||||||
code blocks: <code>::</code> and an indented block after blank line</div>\
|
|
||||||
<form method="post" id="cf<%id%>" class="comment-form" action="">\
|
|
||||||
<textarea name="comment" cols="80"></textarea>\
|
|
||||||
<p class="propose-button">\
|
|
||||||
<a href="#" id="pc<%id%>" class="show-propose-change">\
|
|
||||||
Propose a change ▹\
|
|
||||||
</a>\
|
|
||||||
<a href="#" id="hc<%id%>" class="hide-propose-change">\
|
|
||||||
Propose a change ▿\
|
|
||||||
</a>\
|
|
||||||
</p>\
|
|
||||||
<textarea name="proposal" id="pt<%id%>" cols="80"\
|
|
||||||
spellcheck="false"></textarea>\
|
|
||||||
<input type="submit" value="Add comment" />\
|
|
||||||
<input type="hidden" name="node" value="<%id%>" />\
|
|
||||||
<input type="hidden" name="parent" value="" />\
|
|
||||||
</form>\
|
|
||||||
</div>\
|
|
||||||
</div>';
|
|
||||||
|
|
||||||
var commentTemplate = '\
|
|
||||||
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
|
|
||||||
<div class="vote">\
|
|
||||||
<div class="arrow">\
|
|
||||||
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
|
|
||||||
<img src="<%upArrow%>" />\
|
|
||||||
</a>\
|
|
||||||
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
|
|
||||||
<img src="<%upArrowPressed%>" />\
|
|
||||||
</a>\
|
|
||||||
</div>\
|
|
||||||
<div class="arrow">\
|
|
||||||
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
|
|
||||||
<img src="<%downArrow%>" id="da<%id%>" />\
|
|
||||||
</a>\
|
|
||||||
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
|
|
||||||
<img src="<%downArrowPressed%>" />\
|
|
||||||
</a>\
|
|
||||||
</div>\
|
|
||||||
</div>\
|
|
||||||
<div class="comment-content">\
|
|
||||||
<p class="tagline comment">\
|
|
||||||
<span class="user-id"><%username%></span>\
|
|
||||||
<span class="rating"><%pretty_rating%></span>\
|
|
||||||
<span class="delta"><%time.delta%></span>\
|
|
||||||
</p>\
|
|
||||||
<div class="comment-text comment"><#text#></div>\
|
|
||||||
<p class="comment-opts comment">\
|
|
||||||
<a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\
|
|
||||||
<a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\
|
|
||||||
<a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\
|
|
||||||
<a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\
|
|
||||||
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
|
|
||||||
<span id="cm<%id%>" class="moderation hidden">\
|
|
||||||
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
|
|
||||||
</span>\
|
|
||||||
</p>\
|
|
||||||
<pre class="proposal" id="pr<%id%>">\
|
|
||||||
<#proposal_diff#>\
|
|
||||||
</pre>\
|
|
||||||
<ul class="comment-children" id="cl<%id%>"></ul>\
|
|
||||||
</div>\
|
|
||||||
<div class="clearleft"></div>\
|
|
||||||
</div>\
|
|
||||||
</div>';
|
|
||||||
|
|
||||||
var replyTemplate = '\
|
|
||||||
<li>\
|
|
||||||
<div class="reply-div" id="rd<%id%>">\
|
|
||||||
<form id="rf<%id%>">\
|
|
||||||
<textarea name="comment" cols="80"></textarea>\
|
|
||||||
<input type="submit" value="Add reply" />\
|
|
||||||
<input type="button" value="Cancel" />\
|
|
||||||
<input type="hidden" name="parent" value="<%id%>" />\
|
|
||||||
<input type="hidden" name="node" value="" />\
|
|
||||||
</form>\
|
|
||||||
</div>\
|
|
||||||
</li>';
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
init();
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
// add comment anchors for all paragraphs that are commentable
|
|
||||||
$('.sphinx-has-comment').comment();
|
|
||||||
|
|
||||||
// highlight search words in search results
|
|
||||||
$("div.context").each(function() {
|
|
||||||
var params = $.getQueryParameters();
|
|
||||||
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
|
|
||||||
var result = $(this);
|
|
||||||
$.each(terms, function() {
|
|
||||||
result.highlightText(this.toLowerCase(), 'highlighted');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// directly open comment window if requested
|
|
||||||
var anchor = document.location.hash;
|
|
||||||
if (anchor.substring(0, 9) == '#comment-') {
|
|
||||||
$('#ao' + anchor.substring(9)).click();
|
|
||||||
document.location.hash = '#s' + anchor.substring(9);
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1,113 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Fil conducteur : 1er tour des élections présidentielles 2017 — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="Liens utiles" href="liens.html" />
|
|
||||||
<link rel="prev" title="Algorithmes et Programmation" href="programmation.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="liens.html" title="Liens utiles"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="programmation.html" title="Algorithmes et Programmation"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="programmation.html" accesskey="U">Algorithmes et Programmation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="fil-conducteur-1er-tour-des-elections-presidentielles-2017">
|
|
||||||
<h1>Fil conducteur : 1er tour des élections présidentielles 2017<a class="headerlink" href="#fil-conducteur-1er-tour-des-elections-presidentielles-2017" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<p>Le fil conducteur sera l’exploitation de données issues du 1er tour des élections présidentielles qui ont eu lieu en France le 23 avril 2017.</p>
|
|
||||||
<p>Les données dont on dispose sont les résultats par canton (plus de 2000 cantons). Pour chaque canton sont donnés</p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>le nombre d’inscrits</li>
|
|
||||||
<li>le nombre de votants</li>
|
|
||||||
<li>le nombre de bulletins nuls</li>
|
|
||||||
<li>le nombre de bulletins blancs</li>
|
|
||||||
<li>le nombre de voix obtenus par chacun des candidats.</li>
|
|
||||||
</ul>
|
|
||||||
<p>L’objectif est d’établir</p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>les résultats au niveau national</li>
|
|
||||||
<li>la participation</li>
|
|
||||||
</ul>
|
|
||||||
<div class="figure">
|
|
||||||
<a class="reference internal image-reference" href="_images/participation_globale.png"><img alt="Participation globale" src="_images/participation_globale.png" style="width: 650px;" /></a>
|
|
||||||
</div>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>le scores des candidats</li>
|
|
||||||
</ul>
|
|
||||||
<div class="figure">
|
|
||||||
<a class="reference internal image-reference" href="_images/scores_1er_tour.png"><img alt="Score des candidats" src="_images/scores_1er_tour.png" style="width: 650px;" /></a>
|
|
||||||
</div>
|
|
||||||
<p>Ce sera l’occasion de découvrir :</p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>les structures itérables, en particulier les tuples et dictionnaires</li>
|
|
||||||
<li>la lecture et l’écriture de données dans des fichiers</li>
|
|
||||||
<li>des algorithmes de tris et de recherche.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="liens.html" title="Liens utiles"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="programmation.html" title="Algorithmes et Programmation"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="programmation.html" >Algorithmes et Programmation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,72 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Index — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="#" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="#" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
|
|
||||||
<h1 id="index">Index</h1>
|
|
||||||
|
|
||||||
<div class="genindex-jumpbox">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="#" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,100 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta content="algo tutorial" name="description" />
|
|
||||||
<meta content="algorithm, python, tutorial" name="keywords" />
|
|
||||||
|
|
||||||
<title>algofundoc — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="Algorithmes et Programmation" href="programmation.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="programmation.html" title="Algorithmes et Programmation"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="#">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="algo-fun">
|
|
||||||
<h1>Algo Fun<a class="headerlink" href="#algo-fun" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
<ul>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="programmation.html">Algorithmes et Programmation</a></li>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="liens.html">Liens utiles</a></li>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="MachineLearning.html">Machine learning</a></li>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="pandas.html">pandas</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="indices-and-tables">
|
|
||||||
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference external" href="_modules/index.html">All modules for which code is available</a></li>
|
|
||||||
<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
|
|
||||||
<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
|
|
||||||
<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
|
|
||||||
</ul>
|
|
||||||
<div class="admonition note">
|
|
||||||
<p class="first admonition-title">Note</p>
|
|
||||||
<p class="last">The pyfun code is licensed under the <a class="reference external" href="http://www.gnu.org/licenses/lgpl.html">LGPL licence</a>
|
|
||||||
and this documentation is licensed under the <a class="reference external" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">Creative Commons
|
|
||||||
Attribution-ShareAlike 3.0 Unported License</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="programmation.html" title="Algorithmes et Programmation"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="#">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,90 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Liens utiles — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="Machine learning" href="MachineLearning.html" />
|
|
||||||
<link rel="prev" title="Fil conducteur : 1er tour des élections présidentielles 2017" href="fil_conducteur.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="MachineLearning.html" title="Machine learning"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="liens-utiles">
|
|
||||||
<h1>Liens utiles<a class="headerlink" href="#liens-utiles" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference external" href="https://realpython.com/python-random/?__s=o2w1az6ypdj7ogdsnqwf">random</a> datas</li>
|
|
||||||
<li><a class="reference external" href="https://realpython.com/fast-flexible-pandas/?__s=o2w1az6ypdj7ogdsnqwf">pandas</a></li>
|
|
||||||
<li><a class="reference external" href="https://realpython.com/python-histograms/?__s=o2w1az6ypdj7ogdsnqwf">ploting</a></li>
|
|
||||||
<li><a class="reference external" href="https://realpython.com/tutorials/machine-learning/">machine</a> learning</li>
|
|
||||||
<li><a class="reference external" href="https://machinelearningmastery.com/machine-learning-in-python-step-by-step/">making</a> a machine learning</li>
|
|
||||||
<li><a class="reference external" href="https://realpython.com/tutorials/data-science/">data</a> science</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="MachineLearning.html" title="Machine learning"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,409 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Pandas — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="../_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: '../',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="../_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="../genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="../search.html" />
|
|
||||||
<link rel="prev" title="pandas" href="../pandas.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="../genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="../pandas.html" title="pandas"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="../index.html">algofun documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="../pandas.html" accesskey="U">pandas</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
|
|
||||||
<style>
|
|
||||||
/* CSS for nbsphinx extension */
|
|
||||||
|
|
||||||
/* remove conflicting styling from Sphinx themes */
|
|
||||||
div.nbinput,
|
|
||||||
div.nbinput div.prompt,
|
|
||||||
div.nbinput div.input_area,
|
|
||||||
div.nbinput div[class*=highlight],
|
|
||||||
div.nbinput div[class*=highlight] pre,
|
|
||||||
div.nboutput,
|
|
||||||
div.nbinput div.prompt,
|
|
||||||
div.nbinput div.output_area,
|
|
||||||
div.nboutput div[class*=highlight],
|
|
||||||
div.nboutput div[class*=highlight] pre {
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
padding: 0 0;
|
|
||||||
margin: 0;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* avoid gaps between output lines */
|
|
||||||
div.nboutput div[class*=highlight] pre {
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* input/output containers */
|
|
||||||
div.nbinput,
|
|
||||||
div.nboutput {
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-start;
|
|
||||||
margin: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
@media (max-width: 540px) {
|
|
||||||
div.nbinput,
|
|
||||||
div.nboutput {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* input container */
|
|
||||||
div.nbinput {
|
|
||||||
padding-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* last container */
|
|
||||||
div.nblast {
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* input prompt */
|
|
||||||
div.nbinput div.prompt pre {
|
|
||||||
color: #303F9F;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* output prompt */
|
|
||||||
div.nboutput div.prompt pre {
|
|
||||||
color: #D84315;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* all prompts */
|
|
||||||
div.nbinput div.prompt,
|
|
||||||
div.nboutput div.prompt {
|
|
||||||
min-width: 9ex;
|
|
||||||
padding-top: 0.4em;
|
|
||||||
padding-right: 0.4em;
|
|
||||||
text-align: right;
|
|
||||||
flex: 0;
|
|
||||||
}
|
|
||||||
@media (max-width: 540px) {
|
|
||||||
div.nbinput div.prompt,
|
|
||||||
div.nboutput div.prompt {
|
|
||||||
text-align: left;
|
|
||||||
padding: 0.4em;
|
|
||||||
}
|
|
||||||
div.nboutput div.prompt.empty {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* disable scrollbars on prompts */
|
|
||||||
div.nbinput div.prompt pre,
|
|
||||||
div.nboutput div.prompt pre {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* input/output area */
|
|
||||||
div.nbinput div.input_area,
|
|
||||||
div.nboutput div.output_area {
|
|
||||||
padding: 0.4em;
|
|
||||||
-webkit-flex: 1;
|
|
||||||
flex: 1;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
@media (max-width: 540px) {
|
|
||||||
div.nbinput div.input_area,
|
|
||||||
div.nboutput div.output_area {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* input area */
|
|
||||||
div.nbinput div.input_area {
|
|
||||||
border: 1px solid #cfcfcf;
|
|
||||||
border-radius: 2px;
|
|
||||||
background: #f7f7f7;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* override MathJax center alignment in output cells */
|
|
||||||
div.nboutput div[class*=MathJax] {
|
|
||||||
text-align: left !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* override sphinx.ext.pngmath center alignment in output cells */
|
|
||||||
div.nboutput div.math p {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* standard error */
|
|
||||||
div.nboutput div.output_area.stderr {
|
|
||||||
background: #fdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ANSI colors */
|
|
||||||
.ansi-black-fg { color: #3E424D; }
|
|
||||||
.ansi-black-bg { background-color: #3E424D; }
|
|
||||||
.ansi-black-intense-fg { color: #282C36; }
|
|
||||||
.ansi-black-intense-bg { background-color: #282C36; }
|
|
||||||
.ansi-red-fg { color: #E75C58; }
|
|
||||||
.ansi-red-bg { background-color: #E75C58; }
|
|
||||||
.ansi-red-intense-fg { color: #B22B31; }
|
|
||||||
.ansi-red-intense-bg { background-color: #B22B31; }
|
|
||||||
.ansi-green-fg { color: #00A250; }
|
|
||||||
.ansi-green-bg { background-color: #00A250; }
|
|
||||||
.ansi-green-intense-fg { color: #007427; }
|
|
||||||
.ansi-green-intense-bg { background-color: #007427; }
|
|
||||||
.ansi-yellow-fg { color: #DDB62B; }
|
|
||||||
.ansi-yellow-bg { background-color: #DDB62B; }
|
|
||||||
.ansi-yellow-intense-fg { color: #B27D12; }
|
|
||||||
.ansi-yellow-intense-bg { background-color: #B27D12; }
|
|
||||||
.ansi-blue-fg { color: #208FFB; }
|
|
||||||
.ansi-blue-bg { background-color: #208FFB; }
|
|
||||||
.ansi-blue-intense-fg { color: #0065CA; }
|
|
||||||
.ansi-blue-intense-bg { background-color: #0065CA; }
|
|
||||||
.ansi-magenta-fg { color: #D160C4; }
|
|
||||||
.ansi-magenta-bg { background-color: #D160C4; }
|
|
||||||
.ansi-magenta-intense-fg { color: #A03196; }
|
|
||||||
.ansi-magenta-intense-bg { background-color: #A03196; }
|
|
||||||
.ansi-cyan-fg { color: #60C6C8; }
|
|
||||||
.ansi-cyan-bg { background-color: #60C6C8; }
|
|
||||||
.ansi-cyan-intense-fg { color: #258F8F; }
|
|
||||||
.ansi-cyan-intense-bg { background-color: #258F8F; }
|
|
||||||
.ansi-white-fg { color: #C5C1B4; }
|
|
||||||
.ansi-white-bg { background-color: #C5C1B4; }
|
|
||||||
.ansi-white-intense-fg { color: #A1A6B2; }
|
|
||||||
.ansi-white-intense-bg { background-color: #A1A6B2; }
|
|
||||||
|
|
||||||
.ansi-default-inverse-fg { color: #FFFFFF; }
|
|
||||||
.ansi-default-inverse-bg { background-color: #000000; }
|
|
||||||
|
|
||||||
.ansi-bold { font-weight: bold; }
|
|
||||||
.ansi-underline { text-decoration: underline; }
|
|
||||||
</style>
|
|
||||||
<p>The <strong>import</strong> keyword is used to import a library</p>
|
|
||||||
<div class="nbinput docutils container">
|
|
||||||
<div class="prompt highlight-none"><div class="highlight"><pre>
|
|
||||||
<span></span>In [2]:
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
|
|
||||||
<span></span><span class="kn">import</span> <span class="nn">math</span>
|
|
||||||
<span class="nb">print</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="mi">2</span><span class="p">))</span>
|
|
||||||
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="nboutput nblast docutils container">
|
|
||||||
<div class="prompt empty docutils container">
|
|
||||||
</div>
|
|
||||||
<div class="output_area docutils container">
|
|
||||||
<div class="highlight"><pre>
|
|
||||||
6.123233995736766e-17
|
|
||||||
</pre></div></div>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="Pandas">
|
|
||||||
<h1>Pandas<a class="headerlink" href="#Pandas" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<div class="nbinput docutils container">
|
|
||||||
<div class="prompt highlight-none"><div class="highlight"><pre>
|
|
||||||
<span></span>In [1]:
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
|
|
||||||
<span></span><span class="kn">import</span> <span class="nn">numpy</span>
|
|
||||||
<span class="kn">import</span> <span class="nn">pandas</span>
|
|
||||||
<span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'line1'</span><span class="p">,</span> <span class="s1">'line2'</span><span class="p">,</span> <span class="s1">'line3'</span><span class="p">,</span> <span class="s1">'line4'</span><span class="p">,</span> <span class="s1">'line5'</span><span class="p">]</span>
|
|
||||||
<span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'col1'</span><span class="p">,</span> <span class="s1">'col2'</span><span class="p">,</span> <span class="s1">'col3'</span><span class="p">,</span> <span class="s1">'col4'</span><span class="p">]</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="k">import</span> <span class="n">display</span>
|
|
||||||
<span class="n">dataframe</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">),</span> <span class="n">index</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">cols</span><span class="p">)</span>
|
|
||||||
<span class="n">display</span><span class="p">(</span><span class="n">dataframe</span><span class="p">)</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="nboutput nblast docutils container">
|
|
||||||
<div class="prompt empty docutils container">
|
|
||||||
</div>
|
|
||||||
<div class="output_area docutils container">
|
|
||||||
<div>
|
|
||||||
<table border="1" class="dataframe">
|
|
||||||
<thead>
|
|
||||||
<tr style="text-align: right;">
|
|
||||||
<th></th>
|
|
||||||
<th>col1</th>
|
|
||||||
<th>col2</th>
|
|
||||||
<th>col3</th>
|
|
||||||
<th>col4</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>line1</th>
|
|
||||||
<td>-0.882125</td>
|
|
||||||
<td>2.176452</td>
|
|
||||||
<td>0.163955</td>
|
|
||||||
<td>-0.618232</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>line2</th>
|
|
||||||
<td>-0.721538</td>
|
|
||||||
<td>0.035578</td>
|
|
||||||
<td>0.180072</td>
|
|
||||||
<td>1.015987</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>line3</th>
|
|
||||||
<td>-1.162355</td>
|
|
||||||
<td>0.384632</td>
|
|
||||||
<td>-0.674092</td>
|
|
||||||
<td>0.162693</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>line4</th>
|
|
||||||
<td>-1.399455</td>
|
|
||||||
<td>-0.698512</td>
|
|
||||||
<td>0.039420</td>
|
|
||||||
<td>0.898408</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>line5</th>
|
|
||||||
<td>1.755342</td>
|
|
||||||
<td>-0.073242</td>
|
|
||||||
<td>-1.502503</td>
|
|
||||||
<td>-0.586194</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div></div>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys">
|
|
||||||
<h2>reorganise a <strong>dataframe</strong> from datas as a dictionary with tuples as keys<a class="headerlink" href="#reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="nbinput docutils container">
|
|
||||||
<div class="prompt highlight-none"><div class="highlight"><pre>
|
|
||||||
<span></span>In [2]:
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
|
|
||||||
<span></span><span class="n">dico</span> <span class="o">=</span> <span class="p">{(</span><span class="s1">'john'</span><span class="p">,</span> <span class="s1">'Snow'</span><span class="p">)</span> <span class="p">:</span> <span class="mi">12</span><span class="p">,</span> <span class="p">(</span><span class="s1">'Paul'</span><span class="p">,</span> <span class="s1">'Durand'</span><span class="p">)</span> <span class="p">:</span> <span class="mi">13</span><span class="p">,</span> <span class="p">(</span><span class="s2">"Pierre"</span><span class="p">,</span> <span class="s2">"Dupont"</span><span class="p">)</span> <span class="p">:</span> <span class="mi">16</span><span class="p">,</span> <span class="p">(</span><span class="s2">"Cerise"</span><span class="p">,</span> <span class="s2">"Lanister"</span><span class="p">)</span> <span class="p">:</span> <span class="mi">14</span><span class="p">}</span>
|
|
||||||
<span class="kn">import</span> <span class="nn">pandas</span>
|
|
||||||
<span class="n">df</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">dico</span><span class="p">)</span><span class="o">.</span><span class="n">reset_index</span><span class="p">()</span>
|
|
||||||
<span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Column 1'</span><span class="p">,</span> <span class="s1">'Column 2'</span><span class="p">,</span> <span class="s1">'Column 3'</span><span class="p">]</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="k">import</span> <span class="n">display</span>
|
|
||||||
<span class="n">display</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="nboutput nblast docutils container">
|
|
||||||
<div class="prompt empty docutils container">
|
|
||||||
</div>
|
|
||||||
<div class="output_area docutils container">
|
|
||||||
<div>
|
|
||||||
<style scoped>
|
|
||||||
.dataframe tbody tr th:only-of-type {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataframe tbody tr th {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataframe thead th {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<table border="1" class="dataframe">
|
|
||||||
<thead>
|
|
||||||
<tr style="text-align: right;">
|
|
||||||
<th></th>
|
|
||||||
<th>Column 1</th>
|
|
||||||
<th>Column 2</th>
|
|
||||||
<th>Column 3</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>0</th>
|
|
||||||
<td>Cerise</td>
|
|
||||||
<td>Lanister</td>
|
|
||||||
<td>14</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>1</th>
|
|
||||||
<td>Paul</td>
|
|
||||||
<td>Durand</td>
|
|
||||||
<td>13</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>2</th>
|
|
||||||
<td>Pierre</td>
|
|
||||||
<td>Dupont</td>
|
|
||||||
<td>16</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>3</th>
|
|
||||||
<td>john</td>
|
|
||||||
<td>Snow</td>
|
|
||||||
<td>12</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="../genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="../pandas.html" title="pandas"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="../index.html">algofun documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="../pandas.html" >pandas</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,95 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>pandas — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="Pandas" href="notebooks/Pandas.html" />
|
|
||||||
<link rel="prev" title="Machine learning" href="MachineLearning.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="notebooks/Pandas.html" title="Pandas"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="MachineLearning.html" title="Machine learning"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="pandas">
|
|
||||||
<h1>pandas<a class="headerlink" href="#pandas" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<p><strong>examples</strong> in the <a class="reference external" href="http://jupyter.org/">jupyter</a> notebooks</p>
|
|
||||||
<p>ipython and pandas:</p>
|
|
||||||
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">jupyter</span> <span class="n">notebook</span> <span class="n">Pandas</span><span class="o">.</span><span class="n">ipynb</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
<ul>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="notebooks/Pandas.html">Pandas</a><ul>
|
|
||||||
<li class="toctree-l2"><a class="reference internal" href="notebooks/Pandas.html#reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys">reorganise a <strong>dataframe</strong> from datas as a dictionary with tuples as keys</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="notebooks/Pandas.html" title="Pandas"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="MachineLearning.html" title="Machine learning"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,124 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Algorithmes et Programmation — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
<link rel="next" title="Fil conducteur : 1er tour des élections présidentielles 2017" href="fil_conducteur.html" />
|
|
||||||
<link rel="prev" title="Algo Fun" href="index.html" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
|
|
||||||
accesskey="N">next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="index.html" title="Algo Fun"
|
|
||||||
accesskey="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="algorithmes-et-programmation">
|
|
||||||
<h1>Algorithmes et Programmation<a class="headerlink" href="#algorithmes-et-programmation" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<div class="section" id="cours">
|
|
||||||
<h2>Cours<a class="headerlink" href="#cours" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
<ul>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="fil_conducteur.html">Fil conducteur : 1er tour des élections présidentielles 2017</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Structures de données séquentielles</li>
|
|
||||||
<li>Ensembles et dictionnaires</li>
|
|
||||||
<li>Algorithmes de recherche</li>
|
|
||||||
<li>Les fichiers</li>
|
|
||||||
<li>Algorithmes de tri</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="tp">
|
|
||||||
<h2>TP<a class="headerlink" href="#tp" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
</div>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Tester avec doctest</li>
|
|
||||||
<li>Listes</li>
|
|
||||||
<li>Gestion d’une promotion d’étudiants</li>
|
|
||||||
<li>Anagrammes</li>
|
|
||||||
<li>Analyse d’un fichier texte</li>
|
|
||||||
<li>Évaluation empirique des tris</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="documents-annexes">
|
|
||||||
<h2>Documents annexes<a class="headerlink" href="#documents-annexes" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
</div>
|
|
||||||
<div class="section" id="bibliographie">
|
|
||||||
<h3>Bibliographie<a class="headerlink" href="#bibliographie" title="Permalink to this headline">¶</a></h3>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Apprendre à programmer avec Python 3, Gérard Swinnen, editions Eyrolles (Chapitres 1 à 7, et chapitre 10 en partie). <a class="reference external" href="http://inforef.be/swi/python.htm">Version électronique téléchargeable</a>.</li>
|
|
||||||
<li><a class="reference external" href="https://www.python.org/">Site officiel du langage Python</a>.</li>
|
|
||||||
<li><a class="reference external" href="https://docs.python.org/3.5/">Documentation officielle de la version 3.5 de Python</a>.</li>
|
|
||||||
<li><a class="reference external" href="http://www.thonny.org/">Site officiel de Thonny</a>.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
|
|
||||||
>next</a> |</li>
|
|
||||||
<li class="right" >
|
|
||||||
<a href="index.html" title="Algo Fun"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,95 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Search — algofun documentation</title>
|
|
||||||
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
var DOCUMENTATION_OPTIONS = {
|
|
||||||
URL_ROOT: './',
|
|
||||||
VERSION: ' ',
|
|
||||||
COLLAPSE_INDEX: false,
|
|
||||||
FILE_SUFFIX: '.html',
|
|
||||||
HAS_SOURCE: true,
|
|
||||||
SOURCELINK_SUFFIX: '.txt'
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/searchtools.js"></script>
|
|
||||||
<script type="text/javascript" src="_static/bizstyle.js"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="#" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
jQuery(function() { Search.loadIndex("searchindex.js"); });
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/javascript" id="searchindexloader"></script>
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
accesskey="I">index</a></li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<h1 id="search-documentation">Search</h1>
|
|
||||||
<div id="fallback" class="admonition warning">
|
|
||||||
<script type="text/javascript">$('#fallback').hide();</script>
|
|
||||||
<p>
|
|
||||||
Please activate JavaScript to enable the search
|
|
||||||
functionality.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
From here you can search these documents. Enter your search
|
|
||||||
words into the box below and click "search". Note that the search
|
|
||||||
function will automatically search for all of the words. Pages
|
|
||||||
containing fewer words won't appear in the result list.
|
|
||||||
</p>
|
|
||||||
<form action="" method="get">
|
|
||||||
<input type="text" name="q" value="" />
|
|
||||||
<input type="submit" value="search" />
|
|
||||||
<span id="search-progress" style="padding-left: 10px"></span>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div id="search-results">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="related" role="navigation" aria-label="related navigation">
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<ul>
|
|
||||||
<li class="right" style="margin-right: 10px">
|
|
||||||
<a href="genindex.html" title="General Index"
|
|
||||||
>index</a></li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> »</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1 +0,0 @@
|
||||||
Search.setIndex({docnames:["MachineLearning","fil_conducteur","index","liens","notebooks/Pandas","pandas","programmation"],envversion:53,filenames:["MachineLearning.txt","fil_conducteur.txt","index.txt","liens.txt","notebooks/Pandas.ipynb","pandas.txt","programmation.txt"],objects:{},objnames:{},objtypes:{},terms:{"123233995736766e":4,"1er":6,"\u00e9critur":1,"\u00e9lection":6,"\u00e9tablir":1,"\u00e9tudiant":6,"\u00e9valuat":6,"d\u00e9couvrir":1,"default":0,"donn\u00e9":[1,6],"import":[0,4],"it\u00e9rabl":1,"pr\u00e9sidentiel":6,"r\u00e9sultat":1,"s\u00e9quentiel":6,Les:[1,6],The:[2,4],__version__:0,algorithm:[1,2],all:2,anagramm:6,analys:6,apprendr:6,apr:0,attribut:2,avail:2,avec:6,avril:1,big:0,blanc:1,bulletin:1,candidat:1,canton:1,ceris:4,chacun:1,chapitr:6,chaqu:1,chargeabl:6,code:2,col1:4,col2:4,col3:4,col4:4,col:4,column:4,com:0,common:2,conducteur:6,copyright:0,cos:4,creativ:2,credit:0,dan:1,data:[0,3,5],datafram:5,des:6,dico:4,dictionari:5,dictionnair:[1,6],displai:4,dispos:1,doctest:6,document:2,dont:1,dupont:4,durand:4,edit:6,empiriqu:6,ensembl:6,est:1,exampl:5,exploit:1,eyrol:6,fichier:[1,6],fil:6,format:0,franc:1,from:5,gcc:0,gestion:6,help:0,html:0,http:0,index:[2,4],inform:0,inscrit:1,ipynb:5,ipython:[4,5],issu:1,john:4,jupyt:5,kei:5,keyword:4,langag:6,lanist:4,learn:[2,3],lectroniqu:6,lectur:1,les:1,lgpl:2,librari:4,licenc:2,licens:[0,2],lien:2,lieu:1,line1:4,line2:4,line3:4,line4:4,line5:4,linux:0,list:6,machin:[2,3],machinelearningmasteri:0,make:3,math:4,matplotlib:0,modul:2,more:0,nation:1,niveau:1,nombr:1,notebook:5,nul:1,numpi:[0,4],objectif:1,obtenu:1,occas:1,officiel:6,ont:1,org:0,page:2,panda:[0,2,3],par:1,parti:6,particip:1,particuli:1,paul:4,pierr:4,plote:3,plu:1,pour:1,print:[0,4],programm:2,promot:6,pyfun:2,python:[0,2,6],qui:1,randn:4,random:[3,4],rard:6,recherch:[1,6],reorganis:5,reset_index:4,row:4,scienc:[0,3],scikit:0,scipi:0,score:1,search:2,sera:1,seri:4,sharealik:2,site:6,sklearn:0,snow:4,sont:1,stabl:0,step:0,structur:[1,6],swinnen:6,sys:0,tester:6,text:6,thi:2,thonni:6,tour:6,tri:[1,6],tupl:[1,5],tutori:2,type:0,under:2,une:6,unport:2,used:4,util:2,version:[0,6],voix:1,votant:1,which:2,www:0,yet:0},titles:["Machine learning","Fil conducteur : 1er tour des \u00e9lections pr\u00e9sidentielles 2017","algofundoc","Liens utiles","Pandas","pandas","Algorithmes et Programmation"],titleterms:{"1er":1,"\u00e9lection":1,"pr\u00e9sidentiel":1,algo:2,algorithm:6,annex:6,bibliographi:6,conducteur:1,cour:6,data:4,datafram:4,des:1,dictionari:4,document:6,fil:1,from:4,fun:2,indic:2,instal:0,kei:4,learn:0,lien:3,link:0,machin:0,panda:[4,5],programm:6,reorganis:4,some:0,tabl:2,tour:1,tupl:4,usag:0,util:3}})
|
|
Before Width: | Height: | Size: 13 KiB |
|
@ -1,200 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
#
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# the code library
|
|
||||||
sys.path.insert(0, os.path.abspath('./src'))
|
|
||||||
# the *question* extension
|
|
||||||
sys.path.insert(0, os.path.abspath('./ext'))
|
|
||||||
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
#
|
|
||||||
# needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = ['nbsphinx',
|
|
||||||
'sphinx.ext.extlinks',
|
|
||||||
'sphinx.ext.todo',
|
|
||||||
'sphinx.ext.ifconfig',
|
|
||||||
'sphinx.ext.viewcode',
|
|
||||||
'question']
|
|
||||||
|
|
||||||
# _______________________________________________________________________
|
|
||||||
# extlinks config
|
|
||||||
# can add an
|
|
||||||
# :src:`my source <hello>`
|
|
||||||
# in the txt goal files
|
|
||||||
extlinks = {'src': ('_modules/%s.html',
|
|
||||||
'full source for: ')}
|
|
||||||
|
|
||||||
# _______________________________________________________________________
|
|
||||||
# ifconfig section
|
|
||||||
def setup(app):
|
|
||||||
app.add_config_value('answer', False, 'env')
|
|
||||||
|
|
||||||
answer = True
|
|
||||||
# _______________________________________________________________________
|
|
||||||
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
|
||||||
# You can specify multiple suffix as a list of string:
|
|
||||||
#
|
|
||||||
# source_suffix = ['.rst', '.md']
|
|
||||||
source_suffix = '.txt'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'algofun'
|
|
||||||
copyright = u'2018, gwen'
|
|
||||||
author = u'gwen'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = u' '
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = u' '
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
#
|
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
|
||||||
# Usually you set "language" from the command line for these cases.
|
|
||||||
language = "en"
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
# This patterns also effect to html_static_path and html_extra_path
|
|
||||||
exclude_patterns = ['Readme.txt', 'bribes', '_build', 'Thumbs.db', '.DS_Store']
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'bw'
|
|
||||||
#pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
|
||||||
todo_include_todos = True
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
html_show_sourcelink = False
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
#
|
|
||||||
#html_theme = 'alabaster'
|
|
||||||
html_theme = 'bizstyle'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
#
|
|
||||||
#html_theme_options = {
|
|
||||||
# 'show_powered_by': False,
|
|
||||||
# 'page_width': 80
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Custom sidebar templates, must be a dictionary that maps document names
|
|
||||||
# to template names.
|
|
||||||
#
|
|
||||||
# This is required for the alabaster theme
|
|
||||||
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
|
|
||||||
html_sidebars = {
|
|
||||||
'**': [
|
|
||||||
#'relations.html', # needs 'show_related': True theme option to display
|
|
||||||
#'searchbox.html',
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
html_show_sphinx = False
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
html_show_copyright = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTMLHelp output ------------------------------------------
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'pyfundoc'
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
#
|
|
||||||
'papersize': 'a4paper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#
|
|
||||||
'pointsize': '12pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
#
|
|
||||||
# 'preamble': '',
|
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
|
||||||
#
|
|
||||||
# 'figure_align': 'htbp',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
(master_doc, 'pyfun.tex', u'pyfun Documentation',
|
|
||||||
u'gwen', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
(master_doc, 'pyfun', u'pyfun Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
(master_doc, 'pyfun', u'pyfun Documentation',
|
|
||||||
author, 'pyfun', 'One line description of project.',
|
|
||||||
'Miscellaneous'),
|
|
||||||
]
|
|
|
@ -1 +0,0 @@
|
||||||
"sphinx extensions"
|
|