Co-authored-by: mco-system <michael.costa@mcos.nc>
Reviewed-on: #4
This commit is contained in:
doug713705 2023-04-20 15:09:57 +02:00
parent 4c32d8b7a5
commit ee43e98385
53 changed files with 2198 additions and 179 deletions

5
.gitignore vendored
View File

@ -1,3 +1,8 @@
*.un~ *.un~
*.swp *.swp
*.sh *.sh
thsf.log
thsf_venv
build/
src/thsf.egg-info/
thsf.pid

6
.prettierrc Normal file
View File

@ -0,0 +1,6 @@
{
"arrowParens": "always",
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": false
}

2
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,2 @@
{
}

6
MANIFEST.in Normal file
View File

@ -0,0 +1,6 @@
global-exclude *.pyc
global-exclude build
global-exclude __pycache__
include src/thsf/templates/*.*
include src/thsf/static/**/*.*

View File

@ -1,4 +1,45 @@
.PHONY: install .PHONY: clean distclean install run stop
install: install:
echo "We Make P0RN" set -e ;\
THSF_DIR=$$(pwd); \
echo [+] Déploiement dans $$THSF_DIR; \
python3 -m venv thsf_venv; \
. thsf_venv/bin/activate; \
pip3 install -r requirements.txt ;\
pip3 install . ;\
pip3 install gunicorn; \
run:
set -e ;\
THSF_DIR=$$(pwd); \
echo [+] Démarrage dans $$THSF_DIR; \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -D -p thsf.pid -w 4 -b 127.0.0.1:8042 'thsf:app'
debug:
set -e ;\
THSF_DIR=$$(pwd); \
echo [+] Démarrage dans $$THSF_DIR; \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -p thsf.pid -w 4 -b 127.0.0.1:8042 'thsf:app'
stop:
-set -e;\
THSF_DIR=$$(pwd); \
echo [+] Arrêt dans $$THSF_DIR; \
kill -15 $$(cat $$THSF_DIR/thsf.pid); \
rm thsf.pid
clean:
-set -e ;\
THSF_DIR=$$(pwd); \
echo [+] Nettoyage dans $$THSF_DIR; \
rm -Rf ./build ./src/thsf.egg-info ./thsf.pid ./thsf.log; \
. thsf_venv/bin/activate; \
pip3 uninstall thsf -y
distclean: clean
rm -Rf thsf_venv/
all: stop clean install run

84
NOTE.md Normal file
View File

@ -0,0 +1,84 @@
# API
## Récupérer l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/
```
Réponse:
```json
[{"name":{"en":"Toulouse HackerSpace Factory","fr":"Toulouse HackerSpace Factory"},"slug":"thsf-2023","is_public":true,"date_from":"2023-05-26","date_to":"2023-05-28","timezone":"Europe/Paris","urls":{"base":"https://23.thsf.net/thsf-2023/","schedule":"https://23.thsf.net/thsf-2023/schedule/","login":"https://23.thsf.net/thsf-2023/login/","feed":"https://23.thsf.net/thsf-2023/schedule/feed.xml"}}]
```
## Récupérer la liste des intervenants
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/speakes/
```
## Récupérer la liste des salles
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/rooms/
## Récupérer les versions des plannings de l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/<EVENT>/schedules/
```
Réponse:
```json
{"count":6,"next":null,"previous":null,"results":[{"version":"wip","published":null},{"version":"0.5","published":"2023-04-03T12:14:39.675671+02:00"},{"version":"0.4","published":"2023-04-03T10:07:41.632059+02:00"},{"version":"0.3","published":"2023-03-25T12:34:17.704819+01:00"},{"version":"0.2","published":"2023-03-25T12:21:23.464899+01:00"},{"version":"0.1","published":"2023-03-25T12:14:10.460100+01:00"}]}
```
### Récupérer un planning spécifique
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/schedules/<version>/
```
Reponse:
```json
{
"slots": [
{
"code": "JHCFVE",
"speakers": [
{
"code": "BT9CDU",
"name": "Youssr Youssef",
"biography": "",
"avatar": "https://23.thsf.net/media/avatars/YoussrYoussef_408QSEG.jpeg"
}
],
"title": "René Carmille, un hacker sous l'Occupation",
"submission_type": {
"en": "Screening",
"fr": "Projection"
},
"track": null,
"state": "confirmed",
"abstract": "Entre collaboration et résistance, confronté aux premiers enjeux modernes de la collecte de données en masse, la trajectoire étonnante de René Carmille n'a encore jamais été racontée... Son héritage est pourtant majeur, les questions qu'il soulève le sont tout autant. \r\nSous lOccupation, le polytechnicien René Carmille est le précurseur de l'usage massif des données en France : c'est lui qui a mis en place et dirigé le Service national de statistiques (SNS) qui deviendra plus tard l'INSEE, c'est aussi lui qui a inventé notre numéro de sécurité sociale.\r\n\r\nLa projection du documentaire sera suivie d'une rencontre en visioconférence avec la réalisatrice.",
"description": "",
"duration": 80,
"slot_count": 1,
"do_not_record": false,
"is_featured": true,
"content_locale": "fr",
"slot": {
"room": {
"en": "Salle 1 Cinema",
"fr": "Salle 1 Cinema"
},
"start": "2023-05-27T11:30:00+02:00",
"end": "2023-05-27T12:50:00+02:00"
},
"image": "https://23.thsf.net/media/thsf-2023/submissions/JHCFVE/Carmille-1-scaled_p0gxA6D.jpeg",
"resources": []
},
...
```

View File

@ -4,7 +4,7 @@ Le site du THSF
## Modifier le site ## Modifier le site
Il n'est **pas possible** de pousser directement des modifcations sur la branche `master`. Il n'est **pas possible** de pousser directement des modifications sur la branche `master`.
Pour modifier le site, il est nécessaire de créer une branche spécifique et d'y pousser vos modifications. Pour modifier le site, il est nécessaire de créer une branche spécifique et d'y pousser vos modifications.
@ -16,9 +16,9 @@ Lorsque la demande de fusion sera acceptée (vous pouvez auto-accepter vos deman
### Personnalisation de la publication ### Personnalisation de la publication
Afin de rendre le processus plus souple, il est possible de personnaliser la livraison en plaçant **à la racine du dépôt** un fichier `Makefile` contenant une cible `install` qui sera systématiquement executée. Afin de rendre le processus plus souple, il est possible de personnaliser la livraison en plaçant **à la racine du dépôt** un fichier `Makefile` contenant une cible `all` qui sera systématiquement exécutée.
C'est dans cette cible `install` que vous pourrez mettre toutes vos commandes personnalisées, typiquement l'installation de modules `npm`. C'est dans cette cible `all` que vous pourrez mettre toutes vos commandes personnalisées, typiquement l'installation de modules `python`, etc.
Le processus de publication est le suivant: Le processus de publication est le suivant:
@ -26,7 +26,7 @@ Le processus de publication est le suivant:
2. La branche `master` du présent dépôt est cloné sur le serveur hébergeant le site du **THSF** 2. La branche `master` du présent dépôt est cloné sur le serveur hébergeant le site du **THSF**
3. Si un fichier `Makefile` se trouve **à la racine du dépôt**, la cible `install` (i.e: `make install`) est automatiquement exécutée. 3. Si un fichier `Makefile` se trouve **à la racine du dépôt**, la cible `all` (i.e: `make all`) est automatiquement exécutée.
## Contrôle de qualité et tests ## Contrôle de qualité et tests

65
config.yml Normal file
View File

@ -0,0 +1,65 @@
---
log:
version: 1
formatters:
default:
format: '[%(asctime)-20s][%(levelname)-8s][%(funcName)-20s]: %(message)s'
handlers:
wsgi:
class: logging.FileHandler
filename: thsf.log
formatter: default
loggers:
thsf:
handlers: [wsgi]
propagate: no
root:
level: DEBUG
handlers: [wsgi]
app:
secret_key: xxx
languages:
- fr
name: THSF
real_url: https://www.thsf.net
pretalx:
url: https://23.thsf.net
apiprefix: api
apikey: bb770a53b15467dfb67c03d178004aca9e4819d6
event: thsf-2023
schedule: wip
navbar:
items:
- name: Home
classes: fa-solid fa-house
url: /
- name: Programme
classes: fa-regular fa-calendar
url: /planning
- name: Lieu
classes: fa-solid fa-map-location-dot
url: /place
- name: Restauration
classes: fa-solid fa-burger
url: /food
- name: Goodies
classes: fa-solid fa-shirt
url: /goodies
- name: Concerts & DJ Sets
classes: fa-solid fa-guitar
url: /concerts
- name: Ateliers
classes: fa-solid fa-screwdriver-wrench
url: /workshops
- name: Projections
classes: fa-solid fa-film
url: /screenings
- name: Tables rondes
classes: fa-solid fa-users-line
url: /discussions
- name: Installations artistiques
classes: fa-solid fa-palette
url: /exhibitions
- name: Présentations
classes: fa-solid fa-person-chalkboard
url: /talks

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

View File

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: Extractivisme</title>
<meta name="viewport" content="initial-scale=1.0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="./styles/main.css" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>

10
pyproject.toml Normal file
View File

@ -0,0 +1,10 @@
[build-system]
requires = ["setuptools>=62",
"build",
"wheel"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
pythonpath = [
"src"
]

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
build
wheel
flask
Flask-Minify
gunicorn
pyYAML
requests

View File

@ -0,0 +1,611 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 756 611.76" style="enable-background:new 0 0 756 611.76;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E5006D;}
.st1{fill:#FFFFFF;}
.st2{fill:url(#SVGID_1_);}
.st3{fill:url(#SVGID_00000080208031039852088860000012736015428469503665_);}
</style>
<g id="Calque_2_00000062903287396250667820000015008425281140850568_">
<rect x="-10.25" y="-9.84" class="st0" width="776.35" height="632.15"/>
</g>
<g id="Calque_1_00000168107049754406420960000008902215559746130366_">
<g>
<path d="M366.84,248.03c0,0-1.98-15.18-13.55-29.89l-19.59,33.94c6.6,3.81,12.93,8.09,18.92,12.76
C356.17,261.41,363.92,253.08,366.84,248.03z"/>
<path d="M315.4,219.95c0,0-9.31-12.16-26.68-19.11v39.19c7.62,0,15.25,0.54,22.77,1.59C312.84,236.87,315.4,225.78,315.4,219.95z"
/>
<path d="M256.81,221.35c0,0-14.14-5.88-32.66-3.21l19.59,33.94c6.6-3.81,13.47-7.16,20.51-10.01
C263.06,237.28,259.73,226.4,256.81,221.35z"/>
<path d="M206.77,251.86c0,0-15.18,1.98-29.89,13.55L210.82,285c3.81-6.6,8.09-12.93,12.76-18.92
C220.15,262.53,211.82,254.78,206.77,251.86z"/>
<path d="M178.69,303.3c0,0-12.16,9.31-19.11,26.68h39.19c0-7.62,0.54-15.25,1.59-22.77C195.61,305.86,184.52,303.3,178.69,303.3z"
/>
<path d="M180.09,361.89c0,0-5.88,14.14-3.21,32.66l33.94-19.59c-3.81-6.6-7.16-13.47-10.01-20.51
C196.03,355.64,185.14,358.97,180.09,361.89z"/>
<path d="M210.6,411.93c0,0,1.98,15.18,13.55,29.89l19.59-33.94c-6.6-3.81-12.93-8.09-18.92-12.76
C221.28,398.55,213.52,406.88,210.6,411.93z"/>
<path d="M262.04,440.01c0,0,9.31,12.16,26.68,19.11v-39.19c-7.62,0-15.25-0.54-22.77-1.59
C264.6,423.09,262.04,434.18,262.04,440.01z"/>
<path d="M320.63,438.61c0,0,14.14,5.88,32.66,3.21l-19.59-33.94c-6.6,3.81-13.47,7.16-20.51,10.01
C314.38,422.67,317.72,433.56,320.63,438.61z"/>
</g>
<g>
<path d="M554.34,395.12c-5.99,4.67-12.32,8.95-18.92,12.76l19.59,33.94c11.57-14.7,13.55-29.89,13.55-29.89
C565.65,406.88,557.89,398.55,554.34,395.12z"/>
<path d="M513.21,418.34c-7.52,1.05-15.14,1.59-22.77,1.59v39.19c17.37-6.95,26.68-19.11,26.68-19.11
C517.12,434.18,514.57,423.09,513.21,418.34z"/>
<path d="M465.98,417.88c-7.04-2.85-13.91-6.19-20.51-10.01l-19.59,33.94c18.52,2.67,32.66-3.21,32.66-3.21
C461.45,433.56,464.78,422.67,465.98,417.88z"/>
<path d="M426.55,264.84c5.99-4.67,12.32-8.95,18.92-12.76l-19.59-33.94c-11.57,14.7-13.55,29.89-13.55,29.89
C415.24,253.08,423,261.41,426.55,264.84z"/>
<path d="M467.68,241.62c7.52-1.05,15.14-1.59,22.77-1.59v-39.19c-17.37,6.95-26.68,19.11-26.68,19.11
C463.77,225.78,466.32,236.87,467.68,241.62z"/>
<path d="M514.91,242.07c7.04,2.85,13.91,6.19,20.51,10.01l19.59-33.94c-18.52-2.67-32.66,3.21-32.66,3.21
C519.44,226.4,516.11,237.28,514.91,242.07z"/>
<path d="M555.58,266.08c4.67,5.99,8.95,12.32,12.76,18.92l33.94-19.59c-14.7-11.57-29.89-13.55-29.89-13.55
C567.34,254.78,559.02,262.53,555.58,266.08z"/>
<path d="M578.8,307.21c1.05,7.52,1.59,15.14,1.59,22.77h39.19c-6.95-17.37-19.11-26.68-19.11-26.68
C594.64,303.3,583.55,305.86,578.8,307.21z"/>
<path d="M578.35,354.44c-2.85,7.04-6.19,13.91-10.01,20.51l33.94,19.59c2.67-18.52-3.21-32.66-3.21-32.66
C594.02,358.97,583.14,355.64,578.35,354.44z"/>
</g>
<path class="st0" d="M490.45,424.51c-6.39,0-12.79-0.65-19.03-1.92c-6.08-1.24-12.06-3.1-17.78-5.52
c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53l-34.02-34.02l-34.02,34.02c-4.27,4.27-8.97,8.15-13.97,11.53
c-5.06,3.42-10.46,6.35-16.07,8.72c-5.72,2.42-11.7,4.27-17.78,5.52c-6.23,1.27-12.63,1.92-19.03,1.92s-12.79-0.65-19.03-1.92
c-6.08-1.24-12.06-3.1-17.78-5.52c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53s-8.15-8.97-11.53-13.98
c-3.41-5.05-6.35-10.46-8.72-16.07c-2.42-5.71-4.27-11.69-5.52-17.78c-1.27-6.23-1.92-12.63-1.92-19.03c0-0.03,0-0.05,0-0.08
c0.01-6.38,0.65-12.75,1.92-18.95c1.25-6.08,3.1-12.06,5.52-17.78c2.37-5.6,5.3-11.01,8.72-16.07c3.38-5,7.26-9.7,11.53-13.97
s8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72c5.72-2.42,11.7-4.27,17.78-5.52c6.2-1.27,12.6-1.91,19.03-1.91
s12.83,0.64,19.03,1.91c6.08,1.24,12.06,3.1,17.78,5.52c5.61,2.37,11.01,5.31,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53
c0,0,24.25,24.25,34.02,34.02l34.02-34.02c4.27-4.27,8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72
c5.72-2.42,11.7-4.27,17.78-5.52c6.23-1.27,12.63-1.92,19.03-1.92s12.8,0.65,19.03,1.92c6.08,1.24,12.06,3.1,17.78,5.52
c5.61,2.37,11.01,5.3,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53c4.27,4.27,8.15,8.98,11.53,13.97c3.41,5.05,6.35,10.46,8.72,16.07
c2.42,5.71,4.27,11.69,5.52,17.78c1.27,6.23,1.92,12.63,1.92,19.02c0,6.4-0.65,12.8-1.92,19.03c-1.25,6.09-3.1,12.07-5.52,17.78
c-2.38,5.61-5.31,11.02-8.72,16.07c-3.38,5-7.26,9.7-11.53,13.97s-8.97,8.15-13.97,11.53c-5.06,3.42-10.46,6.35-16.07,8.72
c-5.72,2.42-11.7,4.27-17.78,5.52C503.24,423.86,496.84,424.51,490.45,424.51z M288.72,281.87c-3.28,0-6.55,0.33-9.72,0.98
c-3.08,0.63-6.11,1.57-9,2.79c-2.84,1.2-5.59,2.69-8.16,4.43c-2.55,1.72-4.95,3.71-7.14,5.89c-2.18,2.18-4.16,4.58-5.89,7.14
c-1.74,2.57-3.23,5.31-4.43,8.16c-1.22,2.89-2.16,5.92-2.79,9c-0.65,3.17-0.98,6.44-0.98,9.72s0.33,6.55,0.98,9.72
c0.63,3.08,1.57,6.11,2.79,9c1.2,2.85,2.69,5.59,4.43,8.16c1.72,2.55,3.71,4.95,5.89,7.14c2.18,2.18,4.58,4.16,7.14,5.89
c2.57,1.74,5.32,3.23,8.16,4.43c2.89,1.22,5.92,2.16,9,2.79c3.15,0.65,6.42,0.97,9.72,0.97s6.57-0.33,9.72-0.97
c3.08-0.63,6.11-1.57,9-2.79c2.85-1.2,5.59-2.7,8.16-4.43c1.69-1.14,4.97-3.91,7.22-5.98l33.93-33.93l-34.02-34.02
c-2.18-2.18-4.58-4.16-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43c-2.89-1.22-5.92-2.16-9-2.79
C295.27,282.2,292,281.87,288.72,281.87z M456.43,364c2.18,2.18,4.58,4.16,7.14,5.89c2.57,1.74,5.32,3.23,8.16,4.43
c2.89,1.22,5.92,2.16,9,2.79c3.16,0.65,6.43,0.97,9.72,0.97s6.57-0.33,9.72-0.97c3.08-0.63,6.1-1.57,9-2.79
c2.84-1.2,5.59-2.69,8.17-4.43c2.55-1.73,4.95-3.71,7.13-5.89c2.18-2.18,4.17-4.58,5.89-7.14c1.74-2.57,3.23-5.32,4.43-8.16
c1.22-2.9,2.16-5.92,2.79-9c0.65-3.17,0.98-6.44,0.98-9.72s-0.33-6.55-0.98-9.72c-0.63-3.07-1.57-6.1-2.79-9
c-1.2-2.85-2.7-5.59-4.43-8.16c-1.73-2.56-3.71-4.96-5.89-7.14c-2.18-2.18-4.58-4.17-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43
c-2.89-1.22-5.92-2.16-9-2.79c-3.16-0.65-6.43-0.97-9.72-0.97s-6.57,0.33-9.72,0.97c-3.08,0.63-6.1,1.57-9,2.79
c-2.85,1.2-5.59,2.69-8.16,4.43c-2.54,1.72-4.94,3.7-7.13,5.88l-34.03,34.03L456.43,364z"/>
<g>
<g>
<g>
<path class="st1" d="M410.96,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C413.63,43.3,412.44,43.04,410.96,43.04z"/>
<path class="st1" d="M457.56,93.02c0,2.04-0.34,3.82-1.02,5.35s-1.6,2.8-2.74,3.82c-1.15,1.02-2.48,1.78-4,2.29
s-3.11,0.76-4.79,0.76s-3.27-0.26-4.79-0.76c-1.52-0.51-2.85-1.27-4-2.29c-1.15-1.02-2.06-2.29-2.74-3.82s-1.02-3.31-1.02-5.35
V49.83c0-1.97,0.34-3.74,1.02-5.3c0.68-1.56,1.6-2.85,2.74-3.87c1.15-1.02,2.48-1.8,4-2.34s3.11-0.81,4.79-0.81
c3.53,0,6.51,1.05,8.92,3.15c2.42,2.1,3.63,5.16,3.63,9.17L457.56,93.02L457.56,93.02z M451.87,49.65c0-2.04-0.63-3.65-1.9-4.83
s-2.89-1.77-4.86-1.77c-2.04,0-3.71,0.59-5,1.77c-1.3,1.18-1.95,2.79-1.95,4.83V93.3c0,2.04,0.65,3.65,1.95,4.83
c1.3,1.18,2.96,1.77,5,1.77c1.98,0,3.6-0.59,4.86-1.77c1.27-1.18,1.9-2.79,1.9-4.83V49.65z"/>
<path class="st1" d="M479.44,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C482.11,43.3,480.92,43.04,479.44,43.04z"/>
<path class="st1" d="M525.95,91.66c0,4.59-1.17,8.01-3.5,10.24c-2.33,2.23-5.43,3.35-9.28,3.35c-4.29,0-7.46-1.21-9.52-3.63
c-2.05-2.42-3.02-5.92-2.89-10.51l5.69-1.15c-0.13,3.06,0.33,5.48,1.35,7.26c1.03,1.78,2.88,2.68,5.55,2.68
c1.99,0,3.65-0.61,4.99-1.82c1.34-1.22,2.01-3.26,2.01-6.14V81.3c0-3.07-0.61-5.26-1.82-6.57s-3-1.97-5.36-1.97h-2.71v-5.35
h2.89c2.24,0,3.97-0.6,5.18-1.81s1.82-3.27,1.82-6.19v-8.95c0-1.02-0.11-1.97-0.33-2.85c-0.22-0.89-0.59-1.67-1.12-2.33
c-0.53-0.67-1.21-1.2-2.05-1.62c-0.84-0.41-1.88-0.62-3.13-0.62c-2.55,0-4.4,0.91-5.55,2.72c-1.15,1.82-1.73,4.16-1.73,7.02
c-0.19-0.06-0.55-0.13-1.07-0.19c-0.53-0.06-1.12-0.14-1.77-0.24c-0.65-0.1-1.25-0.19-1.77-0.29c-0.53-0.1-0.89-0.14-1.07-0.14
c0.06-2.1,0.37-4.03,0.93-5.78s1.4-3.26,2.52-4.54c1.12-1.27,2.5-2.28,4.15-3.01s3.56-1.1,5.74-1.1c2.24,0,4.12,0.33,5.64,1
s2.75,1.59,3.69,2.77c0.93,1.18,1.6,2.56,2.01,4.15c0.4,1.59,0.61,3.31,0.61,5.15v7.73c0,1.21-0.06,2.39-0.19,3.53
c-0.13,1.15-0.39,2.21-0.79,3.2c-0.41,0.99-0.98,1.89-1.73,2.72s-1.74,1.53-2.99,2.1v0.19c1.31,0.51,2.33,1.16,3.08,1.96
c0.75,0.8,1.32,1.72,1.73,2.78c0.4,1.05,0.65,2.22,0.75,3.49c0.09,1.28,0.14,2.65,0.14,4.11L525.95,91.66z"/>
</g>
<g>
<path class="st1" d="M250.72,114.74v21.1h-1.35v-21.1h-4.14v-1.25h9.62v1.25H250.72z"/>
<path class="st1" d="M259.74,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
c-0.04-0.4-0.07-0.83-0.09-1.3c-0.02-0.47-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72
c0.01-0.57,0.03-1.11,0.06-1.62s0.08-0.98,0.14-1.4s0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81
C257.71,120.14,258.61,119.91,259.74,119.91z M259.68,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3
c-0.17,0.43-0.27,1.1-0.32,2.01c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64
c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61
c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54
s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92c-0.19-0.64-0.53-1.12-1.02-1.43C260.9,121.32,260.33,121.16,259.68,121.16z"/>
<path class="st1" d="M273.77,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L273.77,134.07L273.77,134.07z"/>
<path class="st1" d="M278.03,112.52h1.35v19.62c0,0.81,0.13,1.46,0.39,1.94s0.79,0.72,1.58,0.72h0.38v1.25h-0.47
c-1.05,0-1.84-0.26-2.4-0.77c-0.55-0.51-0.83-1.46-0.83-2.83L278.03,112.52L278.03,112.52z"/>
<path class="st1" d="M287.36,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C285.33,120.14,286.23,119.91,287.36,119.91z
M287.3,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01
c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33
c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73
s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C288.52,121.32,287.95,121.16,287.3,121.16z"/>
<path class="st1" d="M301.39,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L301.39,134.07L301.39,134.07z"/>
<path class="st1" d="M306.25,131.85c0,0.9,0.25,1.62,0.74,2.15c0.49,0.54,1.18,0.8,2.06,0.8c1.11,0,1.88-0.27,2.3-0.8
c0.42-0.54,0.63-1.29,0.63-2.25c0-0.47-0.04-0.87-0.11-1.21c-0.07-0.33-0.21-0.63-0.42-0.9c-0.21-0.27-0.5-0.51-0.88-0.74
c-0.38-0.22-0.88-0.46-1.5-0.69c-0.81-0.32-1.48-0.64-2.01-0.97c-0.52-0.32-0.92-0.66-1.21-1.01c-0.28-0.35-0.48-0.72-0.58-1.11
c-0.1-0.39-0.16-0.79-0.16-1.22c0-1.18,0.33-2.14,1-2.9s1.72-1.13,3.17-1.13c1.32,0,2.34,0.34,3.06,1.03
c0.72,0.68,1.08,1.68,1.08,2.99l-1.41,0.23c0-0.96-0.25-1.7-0.74-2.22s-1.18-0.77-2.06-0.77c-0.55,0-1,0.08-1.36,0.24
c-0.36,0.16-0.64,0.37-0.84,0.63c-0.2,0.26-0.34,0.55-0.43,0.87c-0.08,0.32-0.13,0.65-0.13,1c0,0.34,0.04,0.65,0.13,0.93
c0.08,0.28,0.25,0.54,0.49,0.79s0.59,0.49,1.03,0.72c0.44,0.24,1.01,0.48,1.71,0.74c0.8,0.3,1.43,0.61,1.9,0.93
c0.46,0.32,0.82,0.67,1.06,1.05c0.24,0.38,0.4,0.78,0.47,1.22s0.11,0.92,0.11,1.43c0,0.64-0.07,1.23-0.22,1.77
s-0.39,1-0.72,1.38c-0.34,0.39-0.77,0.69-1.31,0.9c-0.54,0.21-1.19,0.32-1.97,0.32c-1.34,0-2.38-0.33-3.1-0.98
s-1.11-1.65-1.15-3L306.25,131.85z"/>
<path class="st1" d="M319.71,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.64-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63c-0.31-0.26-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03
c0.27-0.75,0.72-1.34,1.34-1.78C317.71,120.13,318.59,119.91,319.71,119.91z M317,122.84c-0.15,0.37-0.24,0.91-0.27,1.63
c-0.03,0.72-0.06,1.58-0.08,2.57h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45s-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87
s-0.88-0.32-1.51-0.32c-0.53,0-1.03,0.12-1.51,0.35C317.65,121.75,317.28,122.2,317,122.84z"/>
<path class="st1" d="M340.45,135.84v-10.82h-6.96v10.82h-1.35v-22.35h1.35v10.28h6.96v-10.28h1.35v22.35H340.45z"/>
<path class="st1" d="M344.69,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4c-0.14-0.52-0.2-1.08-0.2-1.65
c0-0.6,0.07-1.19,0.2-1.78c0.14-0.59,0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17c0.55-0.3,1.25-0.45,2.08-0.45h3.01
v-2.52c0-0.43-0.04-0.82-0.13-1.18c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61
c-0.37-0.15-0.83-0.23-1.4-0.23c-0.61,0-1.18,0.15-1.72,0.45c-0.54,0.3-0.9,0.75-1.07,1.35L344.69,122.51z M348.86,127.87
c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.03,0.65c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76
c0,0.86,0.21,1.6,0.64,2.21c0.43,0.61,1.18,0.92,2.24,0.92c0.9,0,1.64-0.25,2.23-0.76c0.58-0.51,0.88-1.25,0.88-2.24v-3.9
L348.86,127.87L348.86,127.87z"/>
<path class="st1" d="M359.78,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.23,0.04-0.45,0.08-0.67,0.11
c-0.23,0.03-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09c-0.04,0.98-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72s0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.63,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C357.78,120.13,358.66,119.91,359.78,119.91z"/>
<path class="st1" d="M367.35,129.41h0.03l5.67-9.25h1.5l-3.57,5.78l4.42,9.89h-1.5l-3.76-8.61l-2.79,4.53v4.08H366v-23.31h1.35
V129.41z"/>
<path class="st1" d="M381.04,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.09-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C379.04,120.13,379.91,119.91,381.04,119.91z M378.33,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C378.98,121.75,378.6,122.2,378.33,122.84z"/>
<path class="st1" d="M393.53,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03V121.51z"/>
<path class="st1" d="M410.08,129.99c0,0.92-0.08,1.75-0.25,2.5s-0.44,1.39-0.81,1.91s-0.88,0.93-1.5,1.22s-1.41,0.43-2.34,0.43
c-0.88,0-1.62-0.12-2.23-0.37c-0.62-0.25-1.12-0.58-1.52-1.01s-0.68-0.93-0.86-1.51s-0.28-1.21-0.3-1.89l1.35-0.29
c0,0.49,0.06,0.97,0.19,1.43c0.13,0.46,0.33,0.86,0.61,1.2s0.65,0.62,1.1,0.82c0.45,0.2,1,0.3,1.65,0.3
c0.78,0,1.4-0.13,1.87-0.39s0.83-0.6,1.09-1.03c0.25-0.43,0.42-0.93,0.49-1.51s0.11-1.18,0.11-1.8c0-0.75-0.04-1.38-0.11-1.88
c-0.07-0.5-0.23-0.94-0.47-1.32c-0.24-0.37-0.6-0.72-1.07-1.03s-1.11-0.65-1.93-1.01c-1.05-0.47-1.88-0.93-2.51-1.38
s-1.1-0.9-1.43-1.36c-0.32-0.46-0.53-0.95-0.63-1.46c-0.09-0.51-0.14-1.08-0.14-1.7c0-0.81,0.09-1.56,0.28-2.25
c0.19-0.68,0.48-1.27,0.88-1.77c0.4-0.49,0.9-0.88,1.5-1.16c0.6-0.28,1.33-0.42,2.19-0.42c0.94,0,1.71,0.14,2.33,0.42
c0.61,0.28,1.1,0.64,1.47,1.09c0.36,0.45,0.62,0.95,0.77,1.49c0.15,0.55,0.22,1.09,0.22,1.62l-1.35,0.35
c0-0.51-0.06-0.99-0.17-1.43c-0.12-0.44-0.31-0.82-0.58-1.16c-0.27-0.33-0.64-0.59-1.09-0.79s-1-0.29-1.65-0.29
c-0.71,0-1.3,0.13-1.75,0.4c-0.45,0.27-0.8,0.61-1.06,1.03c-0.25,0.42-0.42,0.87-0.5,1.37c-0.08,0.49-0.13,0.97-0.13,1.44
c0,0.56,0.05,1.04,0.16,1.46c0.1,0.42,0.3,0.81,0.6,1.17c0.29,0.36,0.71,0.72,1.25,1.06s1.28,0.72,2.2,1.12
c0.94,0.41,1.68,0.82,2.23,1.24c0.54,0.42,0.95,0.87,1.22,1.35s0.44,1.03,0.52,1.64C410.05,128.5,410.08,129.2,410.08,129.99z"
/>
<path class="st1" d="M417.06,119.94c0.37,0,0.77,0.05,1.19,0.16s0.8,0.3,1.16,0.58c0.35,0.28,0.66,0.66,0.92,1.14
c0.26,0.48,0.42,1.1,0.48,1.85c0.06,0.69,0.1,1.34,0.11,1.97c0.01,0.63,0.02,1.25,0.02,1.85v0.45c0,1.22-0.02,2.31-0.06,3.28
c-0.04,0.96-0.18,1.79-0.41,2.47c-0.23,0.66-0.62,1.23-1.17,1.69c-0.55,0.46-1.37,0.69-2.45,0.69c-0.83,0-1.52-0.2-2.06-0.59
s-0.89-0.79-1.06-1.17h-0.06v7.77h-1.35v-21.9h1.35v1.48h0.06c0.35-0.54,0.79-0.95,1.29-1.25S416.21,119.94,417.06,119.94z
M416.75,121.26c-0.94,0-1.68,0.31-2.25,0.93s-0.84,1.43-0.84,2.44v6.49c0,0.47,0.06,0.93,0.19,1.36
c0.12,0.44,0.31,0.82,0.56,1.16c0.25,0.33,0.56,0.6,0.94,0.8c0.37,0.2,0.81,0.3,1.31,0.3c0.62,0,1.17-0.17,1.65-0.51
c0.48-0.34,0.8-0.85,0.97-1.51c0.06-0.21,0.11-0.51,0.14-0.88c0.03-0.37,0.06-0.79,0.08-1.25s0.03-0.94,0.03-1.45
c0-0.5,0-1,0-1.49c0-1.01-0.02-1.9-0.05-2.68s-0.1-1.35-0.2-1.72c-0.21-0.75-0.52-1.27-0.94-1.56
C417.92,121.4,417.39,121.26,416.75,121.26z"/>
<path class="st1" d="M423.35,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L423.35,122.51z M427.52,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L427.52,127.87L427.52,127.87z"/>
<path class="st1" d="M438.44,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C436.44,120.13,437.32,119.91,438.44,119.91z"/>
<path class="st1" d="M448.79,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C446.79,120.13,447.66,119.91,448.79,119.91z M446.08,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C446.73,121.75,446.35,122.2,446.08,122.84z"/>
<path class="st1" d="M461.25,135.84v-22.35h8.87v1.25h-7.52v8.99h6.65v1.25h-6.65v10.85L461.25,135.84L461.25,135.84z"/>
<path class="st1" d="M470.97,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L470.97,122.51z M475.14,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L475.14,127.87L475.14,127.87z"/>
<path class="st1" d="M486.07,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C484.07,120.13,484.94,119.91,486.07,119.91z"/>
<path class="st1" d="M491.54,120.13h1.76v-4.3h1.35v4.3h2.32v1.16h-2.32v10.86c0,0.79,0.16,1.39,0.49,1.81
c0.32,0.42,0.87,0.62,1.65,0.62h0.35v1.25h-0.6c-2.15,0-3.23-1.17-3.23-3.52v-11.02h-1.76L491.54,120.13L491.54,120.13z"/>
<path class="st1" d="M503.44,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51s0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79c-0.62-0.52-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C501.41,120.14,502.3,119.91,503.44,119.91z
M503.37,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01s-0.06,1.96-0.06,3.16
v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47
c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54
c0-0.47,0-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C504.6,121.32,504.02,121.16,503.37,121.16z"/>
<path class="st1" d="M516.06,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03L516.06,121.51L516.06,121.51z"/>
<path class="st1" d="M521.26,133.65c0.29-1.09,0.57-2.22,0.85-3.39c0.27-1.17,0.54-2.31,0.82-3.42l1.72-6.71h1.38l-4.61,17.63
c-0.17,0.68-0.36,1.32-0.56,1.89c-0.23,0.73-0.6,1.33-1.11,1.81s-1.2,0.72-2.05,0.72h-0.47v-1.25h0.38
c0.67,0,1.18-0.25,1.54-0.74s0.64-1.18,0.85-2.05c0.1-0.41,0.2-0.81,0.3-1.2c0.09-0.4,0.19-0.8,0.3-1.2
c-0.69-2.61-1.37-5.21-2.05-7.79c-0.68-2.59-1.35-5.19-2.02-7.82h1.44l1.63,6.74l1.63,6.78H521.26z"/>
</g>
<g>
<path d="M250.36,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
L249,158.5h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C250.91,148.06,250.67,148.01,250.36,148.01z"/>
<path d="M256.22,153.01c0.12-0.12,0.28-0.23,0.48-0.31s0.4-0.13,0.6-0.13c0.59,0,1.06,0.18,1.41,0.53s0.53,0.85,0.53,1.49v2.65
c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38c-0.26,0.08-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.17c0-0.37,0.02-0.69,0.07-0.95
s0.12-0.51,0.21-0.73l2.22-5.92h0.71c-0.08,0.19-0.18,0.46-0.3,0.8c-0.13,0.34-0.26,0.72-0.41,1.12s-0.3,0.82-0.45,1.23
c-0.15,0.42-0.29,0.8-0.42,1.14s-0.23,0.63-0.31,0.86s-0.13,0.36-0.14,0.38L256.22,153.01z M258.54,154.56
c0-0.42-0.13-0.74-0.39-0.98c-0.26-0.24-0.6-0.35-1.01-0.35c-0.23,0-0.43,0.05-0.61,0.14c-0.18,0.1-0.33,0.22-0.45,0.37
c-0.12,0.15-0.21,0.33-0.27,0.52s-0.09,0.4-0.09,0.6v2.42c0,0.42,0.13,0.74,0.4,0.98c0.27,0.24,0.61,0.35,1.02,0.35
s0.75-0.12,1.01-0.35c0.26-0.24,0.39-0.56,0.39-0.98V154.56z"/>
<path d="M267.74,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C268.29,148.06,268.05,148.01,267.74,148.01z"/>
<path d="M276.63,151.31c0,0.45-0.09,0.82-0.28,1.11s-0.42,0.52-0.71,0.67c0.28,0.16,0.52,0.38,0.71,0.67s0.28,0.66,0.28,1.09
v2.39c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38s-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.39c0-0.44,0.09-0.8,0.27-1.09
s0.42-0.52,0.71-0.67c-0.3-0.16-0.53-0.38-0.71-0.67s-0.27-0.66-0.27-1.11v-1.92c0-0.34,0.06-0.63,0.17-0.88
c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39s0.53-0.13,0.81-0.13s0.56,0.04,0.81,0.13s0.48,0.21,0.67,0.39
c0.19,0.17,0.35,0.39,0.46,0.64c0.12,0.25,0.17,0.55,0.17,0.88V151.31z M275.92,149.34c0-0.42-0.13-0.74-0.39-0.98
s-0.6-0.35-1.01-0.35s-0.75,0.12-1.02,0.35c-0.27,0.24-0.4,0.56-0.4,0.98v2.05c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.98V149.34z M275.92,154.76c0-0.41-0.13-0.73-0.39-0.98
s-0.6-0.38-1.01-0.39c-0.41,0-0.75,0.12-1.02,0.37s-0.4,0.58-0.4,1v2.53c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.35,1.02,0.35s0.75-0.12,1.01-0.35s0.39-0.56,0.39-0.98V154.76z"/>
<path d="M289.34,149.49c-0.2,0.57-0.4,1.14-0.61,1.69s-0.42,1.12-0.62,1.69l-1.33,3.57h-0.49c-0.22-0.59-0.44-1.18-0.65-1.77
c-0.21-0.58-0.43-1.17-0.65-1.75l-1.2-3.35h-0.07v9.59h-0.71v-11.71h0.72c0.25,0.67,0.5,1.34,0.73,1.99
c0.24,0.66,0.47,1.32,0.72,1.99l1.33,3.75h0.05l1.36-3.77c0.03-0.08,0.09-0.22,0.16-0.43c0.08-0.21,0.16-0.44,0.25-0.71
c0.09-0.26,0.19-0.55,0.3-0.85s0.21-0.59,0.31-0.85c0.1-0.26,0.18-0.5,0.25-0.71s0.12-0.35,0.16-0.43h0.72v11.71h-0.71v-9.68
h-0.02L289.34,149.49L289.34,149.49z"/>
<path d="M297.26,159.17l-0.66-3.06h-3.19l-0.66,3.06h-0.67l2.51-11.71h0.81l2.56,11.71H297.26z M294.99,148.52l-0.61,2.93
l-0.85,4h2.94l-0.85-4.04l-0.59-2.89H294.99z"/>
<path d="M300.15,159.17v-11.71h0.71v11.71H300.15z"/>
<path d="M309.67,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C310.22,148.06,309.98,148.01,309.67,148.01z"/>
<path d="M318.55,157.25c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38
c-0.26,0.08-0.53,0.13-0.81,0.13c-0.29,0-0.56-0.04-0.81-0.13c-0.26-0.08-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63
s-0.17-0.55-0.17-0.9v-7.86c0-0.34,0.06-0.63,0.17-0.88c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39
s0.53-0.13,0.81-0.13c0.3,0,0.57,0.04,0.83,0.13s0.48,0.21,0.67,0.39c0.19,0.17,0.34,0.39,0.45,0.64
c0.11,0.25,0.16,0.55,0.16,0.88V157.25z M317.85,149.36c0-0.42-0.13-0.75-0.39-0.99s-0.6-0.36-1.01-0.36s-0.75,0.12-1.02,0.36
s-0.4,0.57-0.4,0.99v7.92c0,0.42,0.13,0.75,0.4,0.99s0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.99V149.36z"/>
<path d="M323.24,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C323.79,148.06,323.55,148.01,323.24,148.01z"/>
<path d="M330.06,147.36c0.4,0,0.73,0.05,0.99,0.16c0.26,0.11,0.48,0.26,0.63,0.45c0.16,0.2,0.27,0.43,0.34,0.71
c0.07,0.27,0.1,0.57,0.1,0.9v1.55c-0.01,0.2-0.03,0.4-0.06,0.59s-0.08,0.37-0.16,0.55c-0.08,0.17-0.18,0.33-0.31,0.46
s-0.31,0.24-0.53,0.32v0.02c0.24,0.09,0.43,0.21,0.58,0.35c0.14,0.15,0.25,0.32,0.32,0.51s0.12,0.41,0.13,0.65
c0.02,0.24,0.02,0.48,0.02,0.72v1.73c0,0.71-0.18,1.26-0.54,1.66c-0.36,0.4-0.9,0.6-1.62,0.6c-0.62,0-1.12-0.18-1.51-0.55
c-0.39-0.37-0.59-0.95-0.59-1.76l0.71-0.2c0,0.57,0.1,1.02,0.3,1.35s0.57,0.5,1.09,0.5c0.42,0,0.76-0.12,1.03-0.35
s0.41-0.64,0.41-1.22v-1.96c0-0.63-0.13-1.07-0.39-1.32s-0.58-0.37-0.98-0.37h-0.44v-0.69h0.48c0.38,0,0.7-0.12,0.95-0.35
c0.25-0.23,0.38-0.64,0.38-1.24v-1.67c0-0.42-0.11-0.76-0.33-1.03s-0.58-0.4-1.08-0.4s-0.87,0.17-1.09,0.5
c-0.22,0.34-0.34,0.76-0.34,1.28c-0.12-0.02-0.24-0.04-0.35-0.06c-0.12-0.02-0.23-0.04-0.35-0.06c0.01-0.71,0.2-1.28,0.56-1.71
C328.79,147.57,329.34,147.36,330.06,147.36z"/>
<path d="M338.5,154.69V154h3.84v0.69H338.5z"/>
</g>
<g>
<path class="st1" d="M354.1,147.36c0.47,0,0.88,0.07,1.22,0.2c0.34,0.13,0.62,0.32,0.85,0.56c0.22,0.24,0.39,0.52,0.49,0.85
c0.1,0.33,0.16,0.69,0.16,1.08l-1.73,0.45c0-0.43-0.08-0.77-0.24-1.04c-0.16-0.27-0.41-0.4-0.76-0.4
c-0.21,0-0.38,0.04-0.51,0.13s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.11,0.01,0.24,0.03,0.37c0.02,0.13,0.07,0.26,0.14,0.38s0.17,0.22,0.29,0.29c0.12,0.08,0.29,0.12,0.48,0.12
c0.65,0,0.98-0.48,0.99-1.45c0.3,0.06,0.59,0.1,0.89,0.14c0.3,0.04,0.59,0.08,0.89,0.13c-0.02,0.89-0.26,1.59-0.71,2.1
c-0.45,0.52-1.13,0.77-2.01,0.77c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.14-1.24
c0.09-0.39,0.25-0.73,0.47-1.02c0.22-0.29,0.51-0.52,0.86-0.69C353.15,147.44,353.58,147.36,354.1,147.36z"/>
<path class="st1" d="M359.11,159.17v-11.71h1.77v11.71H359.11z"/>
<path class="st1" d="M365.35,152.35v6.81h-1.77v-11.71h1.59l1.38,3.48c0.11,0.29,0.22,0.58,0.33,0.86s0.22,0.57,0.35,0.86
l0.58,1.62c0.02,0,0.04,0,0.04-0.01c0.01,0,0.02-0.01,0.04-0.01v-6.8h1.74v11.71h-1.55l-1.38-3.47
c-0.22-0.57-0.43-1.13-0.65-1.68c-0.21-0.55-0.42-1.1-0.63-1.67L365.35,152.35L365.35,152.35z"/>
<path class="st1" d="M372.27,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L372.27,159.17L372.27,159.17z
M373.5,146.21l2.53-2.04l1.05,1.26l-2.94,1.65L373.5,146.21z"/>
<path class="st1" d="M382.83,156.61l-0.82-2.17l-0.7-2.05h-0.08v6.78h-1.77v-11.71h1.73l1.24,3.33l0.9,2.54h0.08l0.92-2.61
l1.23-3.26h1.71v11.71h-1.77v-6.75h-0.07l-0.72,2.09l-0.8,2.1H382.83z"/>
<path class="st1" d="M394,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L394,159.17L394,159.17z M392.46,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L392.46,150.17L392.46,150.17z"/>
<path class="st1" d="M407.64,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L407.64,147.47L407.64,147.47z"/>
<path class="st1" d="M413.08,149.16v10.01h-1.77v-10.01h-1.84v-1.7h5.46v1.7H413.08z"/>
<path class="st1" d="M422.28,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M420.51,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L420.51,150.32L420.51,150.32z"/>
<path class="st1" d="M427.42,147.46c1.05,0,1.82,0.28,2.31,0.84s0.73,1.46,0.73,2.71c0,0.55-0.05,1.05-0.15,1.5
s-0.27,0.83-0.51,1.15c-0.24,0.32-0.56,0.57-0.94,0.75s-0.88,0.27-1.47,0.27h-0.72v4.49h-1.77v-11.71H427.42z M426.67,149.16
v3.79h0.62c0.55,0,0.93-0.16,1.14-0.48c0.21-0.32,0.32-0.8,0.32-1.45c0-0.57-0.1-1.03-0.3-1.36c-0.2-0.33-0.58-0.5-1.12-0.5
H426.67z"/>
<path class="st1" d="M432.68,159.17v-11.71h1.77v11.71H432.68z"/>
<path class="st1" d="M441.31,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L441.31,159.17L441.31,159.17z M439.76,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L439.76,150.17L439.76,150.17z"/>
<path class="st1" d="M453.63,153.04c0.5,0.17,0.85,0.49,1.04,0.96s0.28,1.01,0.28,1.62c0,1.22-0.25,2.12-0.76,2.69
s-1.29,0.86-2.34,0.86h-2.37v-11.71h2.5c1.01,0,1.74,0.27,2.19,0.82c0.46,0.54,0.68,1.33,0.68,2.36c0,0.54-0.09,1.01-0.27,1.41
c-0.18,0.4-0.5,0.71-0.95,0.91V153.04z M453.15,150.67c0-0.54-0.1-0.92-0.31-1.16s-0.55-0.35-1.04-0.35h-0.56v3.03h0.58
c0.46,0,0.8-0.13,1.01-0.39S453.15,151.17,453.15,150.67z M453.25,155.47c0-0.55-0.1-0.96-0.29-1.23
c-0.2-0.27-0.54-0.4-1.04-0.4h-0.67v3.63h0.71c0.29,0,0.51-0.05,0.68-0.16c0.17-0.11,0.3-0.25,0.39-0.43
c0.09-0.18,0.15-0.39,0.18-0.64S453.25,155.74,453.25,155.47z"/>
<path class="st1" d="M462.96,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M461.19,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L461.19,150.32L461.19,150.32z"/>
<path class="st1" d="M468.18,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H468.18z M467.35,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L467.35,149.16L467.35,149.16z"/>
<path class="st1" d="M476.46,147.46c0.68,0,1.21,0.12,1.61,0.36c0.39,0.24,0.67,0.65,0.82,1.22c0.12,0.42,0.18,0.98,0.19,1.71
s0.01,1.57,0.01,2.55c0,0.97-0.01,1.79-0.02,2.49c-0.01,0.7-0.08,1.25-0.21,1.65c-0.21,0.66-0.54,1.12-0.99,1.36
s-0.97,0.37-1.55,0.37h-2.69v-11.71H476.46z M477.3,150.53c0-0.43-0.08-0.76-0.24-1s-0.46-0.36-0.91-0.36h-0.76v8.31h0.76
c0.44,0,0.74-0.12,0.9-0.36s0.25-0.58,0.25-1.03V150.53z"/>
<path class="st1" d="M481.75,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L481.75,159.17L481.75,159.17z"/>
<path class="st1" d="M491.6,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H491.6z M490.76,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L490.76,149.16L490.76,149.16z"/>
<path class="st1" d="M502.47,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M500.7,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L500.7,150.32L500.7,150.32z"/>
<path class="st1" d="M510.56,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L510.56,147.47L510.56,147.47z"/>
<path class="st1" d="M515.93,159.27c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.15-1.24
c0.1-0.39,0.26-0.73,0.49-1.02s0.51-0.52,0.86-0.69s0.78-0.25,1.28-0.25c0.93,0,1.62,0.24,2.05,0.73
c0.44,0.49,0.66,1.13,0.66,1.92v0.13l-1.74,0.35c0-0.43-0.08-0.77-0.23-1.04c-0.16-0.27-0.41-0.4-0.75-0.4
c-0.21,0-0.37,0.04-0.5,0.13c-0.13,0.09-0.23,0.21-0.3,0.35s-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.12,0.02,0.24,0.05,0.35c0.03,0.2,0.11,0.39,0.23,0.56s0.34,0.25,0.65,0.25s0.56-0.08,0.75-0.25s0.28-0.4,0.28-0.69v-2.3
h-1.04v-1.58h2.81v3.74c0,0.92-0.25,1.62-0.76,2.09C517.41,159.03,516.75,159.27,515.93,159.27z"/>
<path class="st1" d="M521.19,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L521.19,159.17L521.19,159.17z"/>
</g>
</g>
<g>
<path d="M263.69,50.5v54.08H251V50.5h-9.98V38.08h32.65V50.5H263.69z"/>
<path d="M299.8,104.58V77.06h-8.12v27.52h-12.69v-66.5h12.69v26.37h8.12V38.08h12.69v66.5H299.8z"/>
<path d="M354.1,84.99c0,3.06-0.27,5.83-0.79,8.31c-0.53,2.48-1.43,4.6-2.71,6.35s-3,3.11-5.18,4.06
c-2.18,0.96-4.91,1.43-8.21,1.43c-2.99,0-5.55-0.45-7.7-1.35c-2.15-0.9-3.89-2.13-5.22-3.71c-1.34-1.57-2.32-3.4-2.94-5.48
s-0.93-4.3-0.93-6.66l12.78-2.48c0.12,2.42,0.48,4.24,1.06,5.45s1.67,1.82,3.28,1.82c0.92,0,1.64-0.22,2.17-0.67
c0.52-0.44,0.92-1.02,1.2-1.72c0.28-0.7,0.46-1.53,0.55-2.48c0.09-0.95,0.14-1.91,0.14-2.86c0-1.33-0.09-2.45-0.28-3.34
s-0.51-1.65-0.98-2.29s-1.1-1.19-1.91-1.67c-0.81-0.48-1.8-0.97-2.99-1.48c-3.17-1.33-5.72-2.72-7.65-4.15s-3.41-2.96-4.43-4.58
c-1.03-1.62-1.7-3.34-2.01-5.15c-0.31-1.81-0.47-3.8-0.47-5.96c0-2.73,0.31-5.26,0.93-7.58s1.6-4.31,2.94-5.96
c1.34-1.65,3.08-2.96,5.22-3.91c2.15-0.95,4.74-1.43,7.79-1.43c3.23,0,5.91,0.53,8.02,1.58c2.11,1.05,3.78,2.39,4.99,4.01
s2.07,3.43,2.57,5.4c0.5,1.98,0.75,3.89,0.75,5.73L341.6,57c0-0.96-0.05-1.85-0.14-2.68c-0.09-0.83-0.29-1.58-0.6-2.25
s-0.72-1.19-1.24-1.58c-0.52-0.38-1.25-0.57-2.17-0.57c-0.86,0-1.54,0.21-2.03,0.62s-0.88,0.92-1.15,1.53
c-0.28,0.61-0.46,1.29-0.55,2.05s-0.14,1.5-0.14,2.2c0,0.89,0.06,1.69,0.18,2.39s0.43,1.37,0.93,2.01s1.22,1.26,2.18,1.86
c0.96,0.61,2.31,1.26,4.04,1.96c2.97,1.21,5.32,2.48,7.06,3.82c1.73,1.34,3.05,2.8,3.95,4.4c0.9,1.59,1.49,3.39,1.76,5.4
S354.1,82.45,354.1,84.99z"/>
<path d="M374.34,50.5v14.14h14.93v12.42h-14.93v27.52h-12.69v-66.5h29.76V50.5H374.34z"/>
</g>
</g>
<g>
<path d="M364.78,329.98l24.81-24.81l-38.03-38.03c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-11.71-2.4-24.07-2.4-35.78,0c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.99-15.1,8.2
c-4.7,3.18-9.12,6.82-13.14,10.84s-7.66,8.44-10.84,13.14c-3.21,4.75-5.97,9.83-8.2,15.1c-2.27,5.37-4.02,10.99-5.19,16.7
c-1.2,5.85-1.81,11.87-1.81,17.89c0,0.01,0,0.01,0,0.02c0,4.92,0.55,9.72,1.6,14.35c1.05,4.64,2.59,9.12,4.58,13.39
c1.99,4.27,4.42,8.32,7.25,12.11c2.82,3.79,6.04,7.33,9.6,10.56c3.56,3.23,7.45,6.15,11.63,8.71c4.18,2.56,8.65,4.77,13.35,6.58
s9.64,3.21,14.75,4.16c5.12,0.95,10.41,1.45,15.84,1.45c5.92,0,11.7-0.48,17.29-1.38s10.97-2.24,16.1-3.96s10.01-3.82,14.57-6.26
s8.81-5.22,12.69-8.29l113.32-89.46c-0.56,0.51,0.53-0.54,0,0c2.44-2.44,5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96
c3.24-1.37,6.63-2.42,10.07-3.13c7.09-1.45,14.63-1.45,21.71,0c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58c2.44,2.44,4.65,5.12,6.58,7.97c1.94,2.87,3.61,5.95,4.96,9.13c1.37,3.24,2.42,6.63,3.13,10.07
c0.72,3.54,1.09,7.2,1.09,10.86c0,3.66-0.37,7.31-1.09,10.86c-0.71,3.45-1.76,6.83-3.13,10.07c-1.35,3.18-3.01,6.26-4.96,9.13
c-1.93,2.85-4.14,5.53-6.58,7.97s-5.12,4.65-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96c-3.24,1.37-6.63,2.42-10.07,3.13
c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.7-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.95c-2.85-1.93-5.53-4.14-7.97-6.58
l-38.03-38.03l0,0l-24.81,24.81l0,0l38.03,38.03c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2
c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19
c5.27-2.23,10.35-4.99,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84s7.66-8.44,10.84-13.14c3.21-4.75,5.97-9.83,8.2-15.1
c2.27-5.37,4.02-10.99,5.19-16.7c1.2-5.85,1.8-11.87,1.8-17.89l0,0c0-4.92-0.55-9.73-1.6-14.37c-1.05-4.64-2.59-9.12-4.58-13.39
c-1.99-4.27-4.42-8.32-7.25-12.11c-2.82-3.79-6.04-7.33-9.6-10.56s-7.45-6.15-11.63-8.71s-8.65-4.77-13.35-6.58
c-4.7-1.8-9.64-3.21-14.75-4.16c-5.12-0.95-10.41-1.45-15.84-1.45c-5.92,0-11.7,0.47-17.29,1.38c-5.58,0.9-10.97,2.24-16.1,3.96
s-10.01,3.82-14.57,6.26s-8.81,5.22-12.69,8.29l-113.32,89.46c-1.98,1.82-5.75,5.07-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96
c-3.24,1.37-6.63,2.42-10.07,3.13c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.71-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.96
c-2.85-1.93-5.53-4.14-7.97-6.58c-2.44-2.44-4.65-5.12-6.58-7.97c-1.94-2.87-3.61-5.95-4.96-9.13c-1.37-3.24-2.42-6.63-3.13-10.07
c-0.73-3.54-1.09-7.2-1.09-10.86c0-3.66,0.37-7.31,1.09-10.86c0.7-3.44,1.76-6.83,3.13-10.07c1.35-3.18,3.01-6.25,4.95-9.13
c1.93-2.85,4.14-5.53,6.58-7.97s5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96c3.24-1.37,6.63-2.42,10.07-3.13
c3.54-0.73,7.2-1.09,10.86-1.09c3.66,0,7.31,0.37,10.86,1.09c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58L364.78,329.98L364.78,329.98z"/>
<g>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="604.435" y1="427.5899" x2="392.7685" y2="639.2565" gradientTransform="matrix(1 0 0 1 0 -230)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path class="st2" d="M452.77,270.26c4.56-2.44,9.44-4.54,14.57-6.26s10.52-3.05,16.1-3.96c5.58-0.9,11.36-1.38,17.29-1.38
c5.43,0,10.72,0.5,15.84,1.45s10.05,2.35,14.75,4.16c4.7,1.8,9.17,4.01,13.35,6.58c4.18,2.56,8.08,5.48,11.63,8.71
c3.56,3.23,6.77,6.76,9.6,10.56c2.82,3.79,5.26,7.85,7.25,12.11c1.99,4.27,3.53,8.74,4.58,13.39c1.05,4.64,1.6,9.45,1.6,14.37
c0-6.02-0.61-12.04-1.8-17.89c-1.17-5.71-2.91-11.33-5.19-16.7c-2.23-5.27-4.99-10.35-8.2-15.1
c-3.18-4.7-6.82-9.12-10.84-13.14c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-5.85-1.2-11.87-1.81-17.89-1.81c-6.02,0-12.04,0.61-17.89,1.81
c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.98-15.1,8.2c-4.7,3.18-9.12,6.82-13.14,10.84l-38.03,38.03L364.8,330
l-38.03,38.03c-0.54,0.54-1.09,1.05-1.64,1.57l114.97-91.03C443.95,275.48,448.2,272.7,452.77,270.26z"/>
</g>
</g>
<g>
<linearGradient id="SVGID_00000049196946087679940990000002865169276270721946_" gradientUnits="userSpaceOnUse" x1="631.6329" y1="-164.8441" x2="419.9663" y2="46.8224" gradientTransform="matrix(-1 0 0 -1 806.3674 297.5265)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path style="fill:url(#SVGID_00000049196946087679940990000002865169276270721946_);" d="M326.4,389.7
c-4.56,2.44-9.44,4.54-14.57,6.26s-10.52,3.05-16.1,3.96c-5.58,0.9-11.36,1.38-17.29,1.38c-5.43,0-10.72-0.5-15.84-1.45
s-10.05-2.35-14.75-4.16c-4.7-1.8-9.17-4.01-13.35-6.58c-4.18-2.56-8.08-5.48-11.63-8.71c-3.56-3.23-6.77-6.76-9.6-10.56
c-2.82-3.79-5.26-7.85-7.25-12.11c-1.99-4.27-3.53-8.74-4.58-13.39c-1.05-4.64-1.6-9.45-1.6-14.37c0,6.02,0.61,12.04,1.8,17.89
c1.17,5.71,2.91,11.33,5.19,16.7c2.23,5.27,4.99,10.35,8.2,15.1c3.18,4.7,6.82,9.12,10.84,13.14
c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81
s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19c5.27-2.23,10.35-4.98,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84
l38.03-38.03l24.81-24.81l38.03-38.03c0.54-0.54,1.09-1.05,1.64-1.57l-114.97,91.03C335.21,384.48,330.96,387.26,326.4,389.7z"
/>
</g>
</g>
</g>
<g>
<path d="M411.61,538.22c1.81-2.21,4.52-3.65,7.6-3.65c3.08,0,5.79,1.44,7.6,3.65c-2.33,1-4.9,1.56-7.6,1.56
C416.51,539.77,413.94,539.22,411.61,538.22z M409.47,537.12l3.07-4.86c1.73-2.73,1.17-6.32-1.29-8.4l-4.02-3.39h5.66
c3.24,0,6.14-2.42,6.31-5.66c0.18-3.45-2.56-6.3-5.97-6.3h-9.16l0,0c-0.91,1.16-1.67,2.43-2.32,3.76
c-0.06,0.13-0.12,0.25-0.18,0.38c-0.14,0.31-0.26,0.63-0.39,0.96c-0.09,0.24-0.18,0.47-0.26,0.71c-0.1,0.29-0.19,0.58-0.27,0.87
c-0.08,0.3-0.16,0.59-0.23,0.9c-0.06,0.26-0.12,0.53-0.17,0.79c-0.07,0.37-0.12,0.74-0.17,1.12c-0.03,0.22-0.06,0.43-0.08,0.65
c-0.06,0.6-0.09,1.21-0.09,1.83C399.9,527.57,403.75,533.77,409.47,537.12z M423.85,522.68c0,2.49,2.02,4.52,4.52,4.52h1.61v6.74
c0,0.78,0.21,1.5,0.56,2.14c4.83-3.51,7.98-9.19,7.98-15.61c0-0.78-0.06-1.54-0.15-2.3h-10
C425.87,518.17,423.85,520.19,423.85,522.68z M427.58,516.43h2.78h7.73c-0.73-3.44-2.39-6.54-4.69-9.03h-5.82
c-2.49,0-4.52,2.02-4.52,4.52S425.08,516.43,427.58,516.43z M430.48,504.81c-3.17-2.29-7.06-3.66-11.28-3.66s-8.1,1.37-11.28,3.66
H430.48z"/>
<g>
<path d="M480.41,519.99l-1.17-2.83l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59
c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59
s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35
c0.05,0.11,0.11,0.21,0.19,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07
s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.07-2.59
c0.22,0.12,0.43,0.26,0.61,0.43c0.22,0.22,0.4,0.48,0.52,0.78c0.11,0.26,0.17,0.54,0.18,0.84v3.43l-4.11,22.88h2.93l4.38-17.47
l4.38,17.47h2.93l-4.11-22.88v-3.43c0.01-0.3,0.07-0.58,0.18-0.84c0.12-0.29,0.3-0.55,0.52-0.78c0.18-0.18,0.39-0.32,0.61-0.43
l1.07,2.59l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07
s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3
c0.04-0.11,0.07-0.23,0.07-0.35C480.48,520.23,480.46,520.11,480.41,519.99z"/>
<path d="M470.06,505.61c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C465.9,503.75,467.76,505.61,470.06,505.61z"/>
</g>
<path d="M261.64,503.71v-0.75c0-1.65-1.35-2.99-2.99-2.99h-3.99c-1.65,0-2.99,1.35-2.99,2.99v0.75c-1.65,0-2.99,1.35-2.99,2.99
v31.4c0,1.65,1.35,2.99,2.99,2.99h9.98c1.65,0,2.99-1.35,2.99-2.99v-31.4C264.63,505.05,263.29,503.71,261.64,503.71z
M261.99,536.57c0,1.1-0.9,2-2,2h-6.67c-1.1,0-2-0.9-2-2v-7.25h10.67V536.57z M261.21,510.99c-0.25,0.25-0.6,0.41-0.99,0.41h-2.17
v2.18c0,0.39-0.16,0.74-0.41,0.99s-0.6,0.41-0.99,0.41c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.61-0.41-0.99v-2.18h-2.18
c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.18v-2.17
c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41s0.74,0.16,0.99,0.41s0.41,0.61,0.41,0.99v2.17h2.17c0.39,0,0.74,0.16,0.99,0.41
s0.41,0.6,0.41,0.99S261.47,510.74,261.21,510.99z M259.91,532.52c0.25,0.25,0.41,0.61,0.41,0.99s-0.16,0.74-0.41,0.99
s-0.6,0.41-0.99,0.41h-2.27h-2.27c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99s0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.27
h2.27C259.31,532.11,259.66,532.27,259.91,532.52z"/>
<g>
<path d="M298.48,505.8c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C294.32,503.94,296.18,505.8,298.48,505.8z"/>
<path d="M308.91,519.83c0,0-0.44-1.06-0.78-1.89l0,0c-0.21-0.52-0.39-0.94-0.39-0.94l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0
c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6
c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83
l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35s0.11,0.21,0.2,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08
l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2
c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.17-2.83l0.04-0.1c0.28,0.14,0.54,0.31,0.75,0.52
c0.25,0.25,0.46,0.55,0.6,0.88s0.22,0.69,0.22,1.08v1.84l-2.83,10.13c-0.28,0.89,0.11,1.62,0.89,1.62h1.88l1.41,12.62h2.93
l1.41-12.62h1.91c0.77,0,1.17-0.73,0.89-1.62l-2.86-10.13v-1.84c0-0.38,0.08-0.74,0.22-1.08c0.14-0.33,0.34-0.63,0.6-0.88
c0.22-0.22,0.47-0.39,0.75-0.52l0.04,0.1l1.17,2.83l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3
c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08
c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3c0.05-0.11,0.07-0.23,0.07-0.35
C308.98,520.06,308.96,519.94,308.91,519.83z"/>
</g>
<path d="M501.08,524.93c0.38-0.38,0.92-0.62,1.5-0.62h23.71c0.15,0,0.29,0.01,0.43,0.04c0.97,0.2,1.7,1.05,1.7,2.08l0,0
c0,1.03-0.73,1.88-1.7,2.08c-0.14,0.03-0.28,0.04-0.43,0.04v5.17l-23.71,2.75v-7.92c-0.59,0-1.12-0.24-1.5-0.62
c-0.19-0.19-0.35-0.42-0.46-0.68c-0.05-0.13-0.1-0.26-0.12-0.4c-0.03-0.14-0.04-0.28-0.04-0.43l0,0
C500.46,525.85,500.7,525.31,501.08,524.93z M528.42,514.26c0-1.03-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83c0,1.17,0.95,2.12,2.12,2.12v7.92l23.71-2.75v-5.17
c0.15,0,0.29-0.01,0.43-0.04C527.69,516.14,528.42,515.29,528.42,514.26z M500.62,537.78c-0.11,0.25-0.17,0.53-0.17,0.83
c0,0.29,0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3h23.71c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08
s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71C501.7,536.48,500.95,537.01,500.62,537.78z M526.29,504.21
c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83s0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3v7.92l23.71-2.75
V504.21z"/>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
</g>
<g>
<path d="M257.18,326.38c-0.64-0.33-1.28-0.57-1.94-0.73s-1.35-0.24-2.08-0.24c-2.1,0-3.15,0.38-3.15,1.12
c0,0.26,0.1,0.45,0.31,0.58c0.21,0.13,0.5,0.22,0.88,0.29s0.84,0.11,1.38,0.14c0.54,0.03,1.16,0.08,1.85,0.15
c0.74,0.07,1.38,0.17,1.94,0.3c0.55,0.13,1.01,0.3,1.38,0.52c0.36,0.22,0.64,0.5,0.82,0.82c0.18,0.33,0.27,0.73,0.27,1.2
c0,1.02-0.45,1.8-1.35,2.35s-2.22,0.83-3.96,0.83c-2.43,0-4.38-0.55-5.83-1.66l1-1.31c0.65,0.45,1.37,0.79,2.17,1.02
c0.8,0.23,1.68,0.35,2.63,0.35c1.1,0,1.93-0.14,2.5-0.41c0.57-0.27,0.85-0.63,0.85-1.08c0-0.51-0.36-0.87-1.08-1.06
c-0.52-0.14-1.14-0.22-1.85-0.23s-1.52-0.06-2.42-0.14c-1.17-0.11-2.03-0.36-2.58-0.75s-0.83-0.96-0.83-1.72
c0-0.9,0.44-1.62,1.31-2.15s2.12-0.79,3.75-0.79c2.13,0,3.86,0.46,5.18,1.38L257.18,326.38z"/>
<path d="M279.64,333.66h-2.11l7.14-11.29h2.09L279.64,333.66z"/>
<path class="st1" d="M306.39,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L306.39,333.5L306.39,333.5z"/>
<path class="st1" d="M346.07,333.5l-3.77-3.71l-3.77,3.71h-2.32l4.92-4.8l-4.75-4.66h2.32l3.6,3.57l3.6-3.57h2.32l-4.75,4.66
l4.92,4.8H346.07z"/>
<path class="st1" d="M373.81,325.7v7.8h-1.85v-7.8h-4.52v-1.66h10.89v1.66H373.81z"/>
<path class="st1" d="M407.66,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H407.66z
M406.01,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H406.01z"/>
<path class="st1" d="M439.64,333.5l-1.09-2.03h-6.35l-1.09,2.03h-2.03l5.15-9.46h2.29l5.15,9.46H439.64z M435.38,325.63
l-2.26,4.18h4.51L435.38,325.63z"/>
<path class="st1" d="M461.83,333.5v-9.46h1.85v9.46H461.83z"/>
<path class="st1" d="M494.38,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H494.38z
M492.74,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H492.74z"/>
<path class="st1" d="M517.58,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L517.58,333.5L517.58,333.5z"/>
</g>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
<g>
<g>
<polygon points="361.86,564.75 346.67,564.75 354.26,557.07 354.26,557.07 "/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 59 KiB

50
setup.cfg Normal file
View File

@ -0,0 +1,50 @@
[metadata]
version = 0.0.1
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
url = https://git.tetalab.org/tetalab/thsf.net
description = "THSF website"
name = thsf
long_description = file: README.md
long_description_content_type = text/markdown
author = Doug Le Tough
author_email = doug@redatomik.org
[options]
package_dir =
= src
packages = find:
include_package_data = True
python_requires = >=3.7
install_requires =
flask
Flask-Minify
gunicorn
pyYAML
requests
[options.packages.find]
where = src
[options.extras_require]
dev =
twine
build
wheel>=0.37.0
flake8>=4.0.1
flake8-breakpoint>=1.1.0
flake8-builtins>=1.5.3
flake8-print>=4.0.0
flake8-return>=1.1.3
pep8-naming>=0.8.2
setuptools>=60.9.2
pylint>=2.12.2
[flake8]
ignore = E111
exclude = .git,__pycache__,build,dist, thot-cli-venv
max-line-length = 160
use-flake8-tabs = true
tab-width = 2

3
setup.py Normal file
View File

@ -0,0 +1,3 @@
import setuptools
setuptools.setup()

202
src/thsf/__init__.py Normal file
View File

@ -0,0 +1,202 @@
import re
import sys
import json
import logging
from logging import config
import yaml
from flask import Flask, render_template, redirect, request, url_for
from flask_minify import minify
from thsf.backend import Backend
from thsf.schedule import Schedule
from thsf.navbar import Navbar
# ------------------------------------------------------------------------------
# -- Configuration
# ------------------------------------------------------------------------------
class AppConfig:
""" Flask application config """
CONFIG_FILENAME = "config.yml"
# ------------------------------------------------------------------------------
# -- Application
# ------------------------------------------------------------------------------
logger = logging.getLogger('wsgi')
app = Flask(__name__)
# ------------------------------------------------------------------------------
# -- Local configuration
# ------------------------------------------------------------------------------
app.config.from_object(__name__ + '.AppConfig')
try:
with open(app.config["CONFIG_FILENAME"], mode="r", encoding="utf-8") as local_config_file:
app.local_config = yaml.load(local_config_file, Loader=yaml.SafeLoader)
app.config["SECRET_KEY"] = app.local_config["app"]["secret_key"]
app.config["LANGUAGES"] = app.local_config["app"]["languages"]
config.dictConfig(app.local_config["log"])
backend = Backend(url=app.local_config["pretalx"]["url"],
apiprefix=app.local_config["pretalx"]["apiprefix"],
apikey=app.local_config["pretalx"]["apikey"])
schedule = Schedule()
navbar = Navbar(config=app.local_config["navbar"])
except Exception as err:
logger.critical("[{}] {}".format(err.__class__, str(err)))
sys.exit(1)
if app.local_config["log"]["root"]["level"] != "DEBUG":
minify(app=app, html=True, js=True, cssless=True)
# ------------------------------------------------------------------------------
# -- Tools
# ------------------------------------------------------------------------------
@app.errorhandler(404)
def page_not_found(err):
return redirect(url_for('index'))
def get_slots():
return backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}/").json()
def get_speaker_biography(name):
try:
speaker_info = backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/speakers/", params={"q": name}).json()
logging.info(speaker_info)
return speaker_info["results"][0]["biography"].strip()
except Exception as err:
logging.error(f"UnknownSpeakerError: {name}")
return None
# ------------------------------------------------------------------------------
# -- Custom filters
# ------------------------------------------------------------------------------
@app.template_filter('date2dmyhm')
def date2dmyhm(date):
splitted_date = date.split("-")
splitted_time = splitted_date[2].split("T")[1].split(":")
year, month, day = (splitted_date[0],
splitted_date[1],
splitted_date[2].split("T")[0])
hour, minutes = (splitted_time[0], splitted_time[1].split("+")[0])
return f"{day}/{month} {hour}:{minutes}"
@app.template_filter('date2dayclass')
def date2dayclass(date):
classes = {"26/05": "bg1",
"27/05": "bg2",
"28/05": "bg3",}
splitted_date = date.split("-")
month, day = (splitted_date[1],
splitted_date[2].split("T")[0])
return classes[f"{day}/{month}"]
@app.template_filter('toicon')
def date2dmyhm(slot_type):
slot_types = {"Projection": "fa-solid fa-film",
"Presentation Courte": "fa-solid fa-person-chalkboard",
"DJ Set": "fa-solid fa-guitar",
"Concert": "fa-solid fa-guitar",
"Présentation": "fa-solid fa-person-chalkboard",
"Table Ronde": "fa-solid fa-users-line",
"Atelier": "fa-solid fa-screwdriver-wrench",
"Exposition": "fa-solid fa-palette"}
return slot_types[slot_type]
# ------------------------------------------------------------------------------
# -- Routes
# ------------------------------------------------------------------------------
@app.route('/favicon.ico', methods=['GET'])
def favicon():
return redirect(url_for('static', filename='images/favicon.png'))
@app.route('/', methods=['GET'])
def index():
return render_template("index.html",
navbar=navbar.get_from_page(page="/"))
@app.route('/planning', methods=['GET'])
def planning():
slots = get_slots()
for slot in slots.get("slots"):
for speaker in slot.get("speakers"):
speaker["biography"] = get_speaker_biography(speaker.get("name"))
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/planning"))
@app.route('/place', methods=['GET'])
def place():
return render_template("index.html",
navbar=navbar.get_from_page(page="/place"))
@app.route('/food', methods=['GET'])
def food():
return render_template("index.html",
navbar=navbar.get_from_page(page="/food"))
@app.route('/goodies', methods=['GET'])
def goodies():
return render_template("goodies.html",
navbar=navbar.get_from_page(page="/goodies"))
@app.route('/concerts', methods=['GET'])
def concerts():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/concerts"),
filter=["concert", "dj set"])
@app.route('/workshops', methods=['GET'])
def workshops():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/workshops"),
filter=["workshop"])
@app.route('/screenings', methods=['GET'])
def screenings():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/screenings"),
filter=["screening"])
@app.route('/discussions', methods=['GET'])
def discussions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/discussions"),
filter=["panel discussion"])
@app.route('/exhibitions', methods=['GET'])
def exhibitions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/exhibitions"),
filter=["exhibition"])
@app.route('/talks', methods=['GET'])
def talks():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/talks"),
filter=["talk", "light talk"])
# ------------------------------------------------------------------------------
# -- Main
# ------------------------------------------------------------------------------
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)

View File

@ -0,0 +1,15 @@
import requests
import logging
class Backend:
def __init__(self, url, apiprefix, apikey):
self.url = url
self.apiprefix = apiprefix
self.apikey = apikey
self.session = requests.Session()
def get(self, endpoint, params=None):
url = f"{self.url}/{self.apiprefix}/{endpoint}"
headers = {"Authorization": f"Token {self.apikey}",
"Accept": "application/json"}
return self.session.get(url, params=params, headers=headers)

View File

@ -0,0 +1,6 @@
class Navbar:
def __init__(self, config):
self.config = config
def get_from_page(self, page):
return [item for item in self.config["items"] if item["url"] != page]

View File

@ -0,0 +1,6 @@
class Schedule:
def __init__(self):
self.slots = list()
def set_slots(self, slots):
self.slots = slots

View File

@ -0,0 +1,49 @@
@font-face {
font-family: pfdintextcomppromedium;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
@font-face {
font-family: pfdintextcompprothin;
src: url(../fonts/PFDinTextCompPro-Thin.ttf);
}
:root {
--main-bg-color: #e6007e;
--alt-bg-color: #E59730;
--alt2-bg-color: #9EBF43;
--alt3-bg-color: #3096E5;
--main-color: #ffffff;
--alt-main-color: #1A000D;
}
.white {
color: var(--main-color);
}
.black {
color: var(--alt-main-color);
}
.thin {
font-family: pfdintextcompprothin;
}
.bold {
font-family: pfdintextcomppromedium;
}
.bg1 {
background-color: var(--alt-bg-color);
border-color: var(--alt-bg-color);
}
.bg2 {
background-color: var(--alt2-bg-color);
border-color: var(--alt2-bg-color);
}
.bg3 {
background-color: var(--alt3-bg-color);
border-color: var(--alt3-bg-color);
}

View File

@ -0,0 +1,109 @@
@media screen and (min-width: 45em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 9.75em;
font-weight: bold;
padding: 0;
}
.logo {
width: inherit;
}
.header > span {
margin: 0;
}
.subheader {
margin: -1em 0 0 0;
font-size: 3.47em;
}
.place {
margin: 0;
font-size: 2.145em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.5em;
}
.right {
float: right;
margin-left: 0.5em;
}
.logo_partner {
max-width: 250px;
max-height: 250px;
margin: 1em;
}
.button {
font-size: 2.5em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
}
@media screen and (max-width: 44em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 6.75em;
font-weight: bold;
padding: 0;
}
.header > span {
margin: 0;
}
.logo {
width: inherit;
}
.subheader {
margin: -1em 0 0 0;
font-size: 2.30em;
}
.place {
margin: 0;
font-size: 1.2em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.25em;
}
.right {
float: right;
margin-left: 0.25em;
}
.logo_partner {
max-width: 125px;
max-height: 125px;
margin: 0.25em;
}
.button {
font-size: 1.2em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
.goodies {
text-align: justify;
}
.goodies_pic {
max-width: 5em;
}
}

View File

@ -0,0 +1,18 @@
a {
font-family: pfdintextcomppromedium;
font-weight: 250;
color: var(--alt-main-color);
transition-property: color;
transition-duration: 1s;
text-decoration: wavy;
}
a:hover {
color: var(--main-color);
cursor: pointer;
}
.content > p,
.content > h2 {
margin-top: 1.5em;
}

View File

@ -0,0 +1,66 @@
.slot {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
margin-bottom: 1em;
width: 20em;
}
.slot_header {
margin: 0;
width: 20em;
font-family: pfdintextcompprothin;
font-weight: bold;
}
.slot_title {
border-radius: 1em 0 0 0;
color: var(--main-color);
padding: 0.5em;
text-align: center;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
width: 20em;
cursor: pointer;
}
.slot_title .title{
margin-left: 0.5em;
}
.slot_info {
background-color: var(--main-color);
color: var(--alt-main-color);
margin: 0;
padding: 0.5em;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
border-radius: 0 0 0 1em;
}
.speaker {
cursor: pointer;
}
.speakers > .speaker > .name > span {
text-decoration: underline;
}
.speaker_details,
.slot_details {
visibility: hidden;
display: none;
}
.speaker_img,
.slot_img {
width: 18em;
}

View File

@ -0,0 +1,15 @@
* {
box-sizing: border-box;
}
body {
background-color: var(--main-bg-color);
font-family: pfdintextcomppromedium;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
/* background-color: yellow; */
}

View File

@ -0,0 +1,57 @@
.tooltip,
.slot_tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltiptext {
visibility: hidden;
background-color: var(--alt-main-color);
color: var(--main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(-25%) translateY(-2em);
transition: opacity 1s;
}
.slot_tooltip .slot_tooltiptext {
visibility: hidden;
background-color: var(--main-color);
color: var(--alt-main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(2em);
transition: opacity 1s;
}
.tooltip .tooltiptext::after,
.slot_tooltip .slot_tooltiptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
}
.tooltip:hover .tooltiptext,
.slot_tooltip:hover .slot_tooltiptext {
visibility: visible;
opacity: 1;
font-size: 0.7em;
padding: 0.2em;
}

View File

@ -0,0 +1,72 @@
@media screen and (min-width: 45em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 1em;
border-width: 1em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(2em, -6em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 7em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
.porn {
font-size: 12em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
}
@media screen and (max-width: 44em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 0.5em;
border-width: 0.5em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(-1.5em, 8em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 3.5em;
font-weight: bold;
}
.porn {
font-size: 6em;
font-weight: bold;
}
}

View File

@ -0,0 +1,125 @@
@media screen and (min-width: 45em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 5em;
/* background-color: green; */
}
.center_wrapper,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.logo_wrapper {
margin: 1em 0 1em 0;
width: 40em;
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 1em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1.4em;
background-color: var(--main-bg-color);
width: 40em;
transform: translateZ(2);
}
.content {
font-size: 2em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 20em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}
@media screen and (max-width: 44em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 2em;
width: 21em;
/* background-color: green; */
}
.center_wrapper ,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 21em;
/* background-color: orangered; */
}
.logo_wrapper {
margin-top: 0.5em;
width: 21em;
/* background-color: red; */
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 0.5em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1em;
background-color: var(--main-bg-color);
width: 21em;
transform: translateZ(2);
/* background-color: white; */
}
.content {
font-size: 1em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 21em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,14 @@
function switch_visibility(item){
console.log(item.style.visibility);
console.log(item.style.display);
if (item.style.visibility == "hidden" || item.style.display == "none") {
item.style.visibility = "visible";
item.style.display = "block";
} else if (item.style.visibility == "" && item.style.display == "") {
item.style.visibility = "visible";
item.style.display = "block";
} else {
item.style.visibility = "hidden";
item.style.display = "none";
}
}

View File

@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: S/Extraire</title>
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script src="{{ url_for('static', filename='scripts/thsf23.js') }}"></script>
<link rel="stylesheet"
href="{{ url_for('static', filename='css/colors.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wemakeporn.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wrappers.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/custom.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/elements.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/tooltip.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/slot.css') }}">
<link rel="icon"
type="image/svg+xml"
href="{{ url_for('static', filename='images/logo.svg') }}">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
{% block headers %}
{% endblock %}
</head>
<body>
<div class="page_wrapper">
<div class="center_wrapper">
<div class="header_wrapper">
<div class="header">
<span class="black bold">THSF</span>
<span class="white thin">2023</span>
</div>
<div class="subheader">
<span class="white thin">Toulouse Hacker Space Factory</span>
</div>
<div class="place">
<span class="black thin">26 28 mai 2023 - </span>
<span class="white bold">CINÉMA UTOPIA BORDEROUGE</span>
</div>
</div>
{% block content %}
{% endblock %}
<div class="partners">
<div class="subpartners">
<a href="https://www.tetalab.org/" target="_new">
<img src="{{ url_for('static', filename='images/tetalab.png')}}"
alt="Tetalab"
title="Tetalab"
class="logo_partner">
</a>
<a href="https://www.librairie-terranova.fr/" target="_new">
<img src="{{ url_for('static', filename='images/terranova.jpg')}}"
alt="Librairie Terra Nova"
title="Librairie Terra Nova"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://www.tetaneutral.net/" target="_new">
<img src="{{ url_for('static', filename='images/tetaneutral.png')}}"
alt="Tetaneutral"
title="Tetaneutral"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://clutchmag.fr/" target="_new">
<img src="{{ url_for('static', filename='images/clutch.png')}}"
alt="Clutch"
title="Clutch"
class="logo_partner">
</a>
<a href="https://www.antistatik.store/" target="_new">
<img src="{{ url_for('static', filename='images/antistatik.png')}}"
alt="Antistatik"
title="Antistatik"
class="logo_partner">
</a>
</div>
</div>
{% block navbar %}
{% include "navbar.html" %}
{% endblock %}
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,33 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire">
</div>
<div class="content" class="goodies">
<h2>Nous avons besoin de votre soutien</h2>
<p class="goodies">
<img class="left"
src="{{ url_for('static', filename='images/stickers.webp') }}"
alt="Stickers"
title="Stickers">
Pour faire du <strong>Toulouse Hacker Space Factory</strong> un événement toujours différent des autres festivals <strong>votre soutien financier</strong> est nécessaire.
</p>
<p class="goodies">
<img class="right"
src="{{ url_for('static', filename='images/tshirt.webp') }}"
alt="T-Shirt"
title="T-Shirt">
Pour faciliter la collecte des dons et vous remercier de votre participation, nous avons mis en place <a href="https://www.leetchi.com/c/thsf23" target="_new">une cagnote Leetchi</a> qui nous permettra de recenser les dons et vous permettra de suivre l'évolution du financement de notre festival.
</p>
<p class="goodies">
<img class="left"
src="{{ url_for('static', filename='images/sweatshirt.webp') }}"
alt="Sweat shirt"
title="Sweat shirt">
Nous sommes également conscients que la situation actuelle est particulièrement difficile. C'est pourquoi nous nous engageons à ce que <span class="important">toutes les sommes qui dépasseront notre objectif de financement de 2 000 € seront reversées aux caisses des grévistes de la réforme des retraites</span>. Ainsi, votre contribution permettra également de soutenir une cause importante et de <span class="important">faire une différence dans la vie de ceux qui se battent pour nos droits</span>.
</p>
</div>
{% endblock %}

View File

@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire"
onclick="document.getElementById('wemakeporn').style.visibility='visible';">
<div id="wemakeporn" class="wemakeporn"
onclick="document.getElementById('wemakeporn').style.visibility='hidden';">
<div class="wemake">WE MAKE</div>
<div class="porn">PORN</div>
</div>
</div>
<div class="content">
<h2>Le THSF est enfin de retour !</h2>
<p>Nous vous invitons à passer un week-end de 3 jours à <a href="https://www.cinemas-utopia.org/toulouse/" target="_new">Utopia Borderouge Toulouse</a> pour partager avec vous nos projets, nos réflexions, nos performances, nos poésies et nos doutes sur la technologie.</p>
<p>Après avoir été soutenu et accueilli pendant 10 ans par <a href="https://vive.mixart-myrys.org/" target="_new">Mix'Art Myrys</a>, le <strong>Toulouse HackerSpace Factory</strong> se tient désormais dans un autre lieu où l'utopie nécessaire est inscrite programme.</p>
<p>Cette année nous mettons en avant des réflexions sur <a href="https://fr.wikipedia.org/wiki/Extractivisme" target="_new">l'extractivisme des ressources</a> planétaires, des données, de la valeur travail.</p>
<p>Comme toujours, notre objectif est de créer un festival qui poétise les bifurcations de nos idées communes et qui réinvente le sens de certains schémas imposés par notre époque. Rejoignez-nous pour une expérience enrichissante et pleine de surprises !</p>
<p>Consulter <a href="/planning">le programme du THSF</a>.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,8 @@
<div class="navbar_wrapper">
{% for item in navbar %}
<i class="button tooltip black {{ item.classes }}"
onclick="document.location='{{item.url}}'">
<span class="tooltiptext thin">{{item.name}}</span>
</i>
{% endfor %}
</div>

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block content %}
<div class="content">
{% for slot in slots %}
{% set loop_index = loop.index %}
{% if filter %}
{% if slot.submission_type.en | lower in filter %}
{% include "slot.html" %}
{% endif %}
{% else %}
{% include "slot.html" %}
{% endif %}
{% endfor %}
</div>
{% endblock %}

View File

@ -0,0 +1,64 @@
<div class="slot">
<div class="slot_header">
<div class="slot_title {{ slot.slot.start | date2dayclass}}"
onclick="switch_visibility(document.getElementById('{{slot.code}}_{{loop_index}}'))">
<i class="black {{slot.submission_type.fr | toicon }}"></i>
<span class="title">{{slot.title}}</span>
</div>
<div class="slot_info">
<div class="start">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.start | date2dmyhm}} - {{slot.duration}} minutes ({{slot.content_locale | capitalize}})
</div>
<div class="room">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.room.fr}}
</div>
<div class="speakers">
{% for speaker in slot.speakers %}
<div class="speaker">
<div class="name" onclick="switch_visibility(document.getElementById('{{speaker.code}}_{{loop_index}}'))">
<i class="fa-solid fa-user"></i>
<span>{{speaker.name | title}}</span>
</div>
{% if speaker.avatar or speaker.biography %}
<div id="{{speaker.code}}_{{loop_index}}" class="speaker_details">
{% if speaker.avatar %}
<div class="speaker_avatar">
<img class="speaker_img"
src="{{speaker.avatar}}"
alt="{{speaker.name | title}}"
title="{{speaker.name | title}}">
</div>
{% endif %}
{% if speaker.biography %}
<div class="speaker_biography">
<div class="speaker_biography">
{{ speaker.biography }}
</div>
</div>
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
</div>
<div id="{{slot.code}}_{{loop_index}}" class="slot_details">
<div class="abstract">
{% if slot.image %}
<img class="slot_img"
src="{{slot.image}}"
alt="{{slot.name}}"
title="{{slot.name}}">
{% endif %}
{% if slot.abstract %}
<p>{{slot.abstract}}</p>
{% endif %}
{% if slot.description %}
<p>{{slot.description}}</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>

5
src/thsf_wsgi.py Normal file
View File

@ -0,0 +1,5 @@
from thsf import app
if __name__ == "__main__":
application = app
application.run(host="127.0.0.1", port=8043)

View File

@ -1,139 +0,0 @@
@font-face {
font-family: pfdintextcomppro;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: pfdintextcomppro;
}
body {
background-color: #e6007e;
background-image: url('../images/affiche_v1.png');
background-repeat: no-repeat;
background-size: auto;
background-position-x: center;
overflow: hidden;
}
ul {
overflow: hidden;
perspective: 900px;
list-style: none;
height: 100vh;
max-height: 800px;
min-height: 400px;
text-align: center;
}
@keyframes width-sway {
0%, 100% {
width: 500px;
}
50% {
width: 100%;
}
}
li {
position: absolute;
top: 0;
margin: auto;
width: 100%;
transform: translateY(100vh);
font-size: 6rem;
font-family: pfdintextcomppro;
font-weight: bold;
color: #ffffdd;
animation: 5.3333333333s spiral-staircase linear infinite;
white-space: nowrap;
}
li:nth-child(1) {
animation-delay: 0.3333333333s;
}
li:nth-child(2) {
animation-delay: 0.6666666667s;
}
li:nth-child(3) {
animation-delay: 1s;
}
li:nth-child(4) {
animation-delay: 1.3333333333s;
}
li:nth-child(5) {
animation-delay: 1.6666666667s;
}
li:nth-child(6) {
animation-delay: 2s;
}
li:nth-child(7) {
animation-delay: 2.3333333333s;
}
li:nth-child(8) {
animation-delay: 2.6666666667s;
}
li:nth-child(9) {
animation-delay: 3s;
}
li:nth-child(10) {
animation-delay: 3.3333333333s;
}
li:nth-child(11) {
animation-delay: 3.6666666667s;
}
li:nth-child(12) {
animation-delay: 4s;
}
li:nth-child(13) {
animation-delay: 4.3333333333s;
}
li:nth-child(14) {
animation-delay: 4.6666666667s;
}
li:nth-child(15) {
animation-delay: 5s;
}
li:nth-child(16) {
animation-delay: 5.3333333333s;
}
@keyframes spiral-staircase {
0% {
transform: rotateY(90deg) translateY(105vh) rotate(0deg) scale(0);
opacity: 0;
}
40% {
transform: rotateY(90deg) translateY(61vh) rotate(0deg) scale(0);
opacity: 0;
}
50% {
transform: rotateY(0deg) translateY(55vh) rotate(0deg) scale(0.50);
opacity: 1;
}
75% {
transform: rotateY(-60deg) translateY(27.5vh) rotate(0deg) scale(1);
opacity: 1;
}
100% {
transform: rotateY(-90deg) translateY(-5vh) rotate(0deg) scale(1.2);
opacity: 0;
}
}