diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 77548d3..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-__pycache__
-/ptb_website/settings.py
-/static
diff --git a/website/static/website/code.css b/code.css
similarity index 100%
rename from website/static/website/code.css
rename to code.css
diff --git a/website/static/website/dark.css b/dark.css
similarity index 100%
rename from website/static/website/dark.css
rename to dark.css
diff --git a/example.py b/example.py
new file mode 100644
index 0000000..cc43b5e
--- /dev/null
+++ b/example.py
@@ -0,0 +1,13 @@
+from telegram import Update
+from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
+
+
+async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ await update.message.reply_text(f'Hello {update.effective_user.first_name}')
+
+
+app = ApplicationBuilder().token("YOUR TOKEN HERE").build()
+
+app.add_handler(CommandHandler("hello", hello))
+
+app.run_polling()
diff --git a/website/static/website/favicons.zip b/favicons.zip
similarity index 100%
rename from website/static/website/favicons.zip
rename to favicons.zip
diff --git a/website/static/website/favicons/android-chrome-144x144.png b/favicons/android-chrome-144x144.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-144x144.png
rename to favicons/android-chrome-144x144.png
diff --git a/website/static/website/favicons/android-chrome-192x192.png b/favicons/android-chrome-192x192.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-192x192.png
rename to favicons/android-chrome-192x192.png
diff --git a/website/static/website/favicons/android-chrome-36x36.png b/favicons/android-chrome-36x36.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-36x36.png
rename to favicons/android-chrome-36x36.png
diff --git a/website/static/website/favicons/android-chrome-48x48.png b/favicons/android-chrome-48x48.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-48x48.png
rename to favicons/android-chrome-48x48.png
diff --git a/website/static/website/favicons/android-chrome-72x72.png b/favicons/android-chrome-72x72.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-72x72.png
rename to favicons/android-chrome-72x72.png
diff --git a/website/static/website/favicons/android-chrome-96x96.png b/favicons/android-chrome-96x96.png
similarity index 100%
rename from website/static/website/favicons/android-chrome-96x96.png
rename to favicons/android-chrome-96x96.png
diff --git a/website/static/website/favicons/apple-touch-icon-114x114.png b/favicons/apple-touch-icon-114x114.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-114x114.png
rename to favicons/apple-touch-icon-114x114.png
diff --git a/website/static/website/favicons/apple-touch-icon-120x120.png b/favicons/apple-touch-icon-120x120.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-120x120.png
rename to favicons/apple-touch-icon-120x120.png
diff --git a/website/static/website/favicons/apple-touch-icon-144x144.png b/favicons/apple-touch-icon-144x144.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-144x144.png
rename to favicons/apple-touch-icon-144x144.png
diff --git a/website/static/website/favicons/apple-touch-icon-152x152.png b/favicons/apple-touch-icon-152x152.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-152x152.png
rename to favicons/apple-touch-icon-152x152.png
diff --git a/website/static/website/favicons/apple-touch-icon-180x180.png b/favicons/apple-touch-icon-180x180.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-180x180.png
rename to favicons/apple-touch-icon-180x180.png
diff --git a/website/static/website/favicons/apple-touch-icon-57x57.png b/favicons/apple-touch-icon-57x57.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-57x57.png
rename to favicons/apple-touch-icon-57x57.png
diff --git a/website/static/website/favicons/apple-touch-icon-60x60.png b/favicons/apple-touch-icon-60x60.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-60x60.png
rename to favicons/apple-touch-icon-60x60.png
diff --git a/website/static/website/favicons/apple-touch-icon-72x72.png b/favicons/apple-touch-icon-72x72.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-72x72.png
rename to favicons/apple-touch-icon-72x72.png
diff --git a/website/static/website/favicons/apple-touch-icon-76x76.png b/favicons/apple-touch-icon-76x76.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-76x76.png
rename to favicons/apple-touch-icon-76x76.png
diff --git a/website/static/website/favicons/apple-touch-icon-precomposed.png b/favicons/apple-touch-icon-precomposed.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon-precomposed.png
rename to favicons/apple-touch-icon-precomposed.png
diff --git a/website/static/website/favicons/apple-touch-icon.png b/favicons/apple-touch-icon.png
similarity index 100%
rename from website/static/website/favicons/apple-touch-icon.png
rename to favicons/apple-touch-icon.png
diff --git a/website/static/website/favicons/browserconfig.xml b/favicons/browserconfig.xml
similarity index 97%
rename from website/static/website/favicons/browserconfig.xml
rename to favicons/browserconfig.xml
index 6cb53da..bebc6e8 100644
--- a/website/static/website/favicons/browserconfig.xml
+++ b/favicons/browserconfig.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
-
- #2b5797
-
-
-
+
+
+
+
+
+
+
+
+ #2b5797
+
+
+
diff --git a/website/static/website/favicons/favicon-16x16.png b/favicons/favicon-16x16.png
similarity index 100%
rename from website/static/website/favicons/favicon-16x16.png
rename to favicons/favicon-16x16.png
diff --git a/website/static/website/favicons/favicon-32x32.png b/favicons/favicon-32x32.png
similarity index 100%
rename from website/static/website/favicons/favicon-32x32.png
rename to favicons/favicon-32x32.png
diff --git a/website/static/website/favicons/favicon-96x96.png b/favicons/favicon-96x96.png
similarity index 100%
rename from website/static/website/favicons/favicon-96x96.png
rename to favicons/favicon-96x96.png
diff --git a/website/static/website/favicons/favicon.ico b/favicons/favicon.ico
similarity index 100%
rename from website/static/website/favicons/favicon.ico
rename to favicons/favicon.ico
diff --git a/website/static/website/favicons/manifest.json b/favicons/manifest.json
similarity index 54%
rename from website/static/website/favicons/manifest.json
rename to favicons/manifest.json
index 66ed1e7..22d9d4f 100644
--- a/website/static/website/favicons/manifest.json
+++ b/favicons/manifest.json
@@ -1,38 +1,40 @@
{
"name": "python-telegram-bot",
+ "start_url": "../index.html",
+ "display":"fullscreen",
"icons": [
{
- "src": "\/static\/website\/favicons\/android-chrome-36x36.png",
+ "src": "\/favicons\/android-chrome-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": 0.75
},
{
- "src": "\/static\/website\/favicons\/android-chrome-48x48.png",
+ "src": "\/favicons\/android-chrome-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": 1
},
{
- "src": "\/static\/website\/favicons\/android-chrome-72x72.png",
+ "src": "\/favicons\/android-chrome-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": 1.5
},
{
- "src": "\/static\/website\/favicons\/android-chrome-96x96.png",
+ "src": "\/favicons\/android-chrome-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": 2
},
{
- "src": "\/static\/website\/favicons\/android-chrome-144x144.png",
+ "src": "\/favicons\/android-chrome-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": 3
},
{
- "src": "\/static\/website\/favicons\/android-chrome-192x192.png",
+ "src": "\/favicons\/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": 4
diff --git a/website/static/website/favicons/mstile-144x144.png b/favicons/mstile-144x144.png
similarity index 100%
rename from website/static/website/favicons/mstile-144x144.png
rename to favicons/mstile-144x144.png
diff --git a/website/static/website/favicons/mstile-150x150.png b/favicons/mstile-150x150.png
similarity index 100%
rename from website/static/website/favicons/mstile-150x150.png
rename to favicons/mstile-150x150.png
diff --git a/website/static/website/favicons/mstile-310x150.png b/favicons/mstile-310x150.png
similarity index 100%
rename from website/static/website/favicons/mstile-310x150.png
rename to favicons/mstile-310x150.png
diff --git a/website/static/website/favicons/mstile-310x310.png b/favicons/mstile-310x310.png
similarity index 100%
rename from website/static/website/favicons/mstile-310x310.png
rename to favicons/mstile-310x310.png
diff --git a/website/static/website/favicons/mstile-70x70.png b/favicons/mstile-70x70.png
similarity index 100%
rename from website/static/website/favicons/mstile-70x70.png
rename to favicons/mstile-70x70.png
diff --git a/website/static/website/favicons/safari-pinned-tab.svg b/favicons/safari-pinned-tab.svg
similarity index 100%
rename from website/static/website/favicons/safari-pinned-tab.svg
rename to favicons/safari-pinned-tab.svg
diff --git a/httplogger.py b/httplogger.py
deleted file mode 100644
index 8ff457a..0000000
--- a/httplogger.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-import logging
-import sys
-
-import cherrypy
-from cherrypy import _cplogging, _cperror
-from django.http import HttpResponseServerError
-
-class HTTPLogger(_cplogging.LogManager):
- def __init__(self, app):
- _cplogging.LogManager.__init__(self, id(self), cherrypy.log.logger_root)
- self.app = app
-
- def __call__(self, environ, start_response):
- """
- Called as part of the WSGI stack to log the incoming request
- and its response using the common log format. If an error bubbles up
- to this middleware, we log it as such.
- """
- try:
- response = self.app(environ, start_response)
- self.access(environ, response)
- return response
- except:
- self.error(traceback=True)
- return HttpResponseServerError(_cperror.format_exc())
-
- def access(self, environ, response):
- """
- Special method that logs a request following the common
- log format. This is mostly taken from CherryPy and adapted
- to the WSGI's style of passing information.
- """
-
- if 'status_code' not in dir(response):
- return
-
- atoms = {'h': environ.get('REMOTE_ADDR', ''),
- 'l': '-',
- 'u': "-",
- 't': self.time(),
- 'r': "%s %s %s" % (environ['REQUEST_METHOD'], environ['REQUEST_URI'], environ['SERVER_PROTOCOL']),
- 's': response.status_code,
- 'b': str(len(response.content)),
- 'f': environ.get('HTTP_REFERER', ''),
- 'a': environ.get('HTTP_USER_AGENT', '')
- }
- for k, v in atoms.items():
- if not isinstance(v, str):
- v = str(v)
- # Fortunately, repr(str) escapes unprintable chars, \n, \t, etc
- # and backslash for us. All we have to do is strip the quotes.
- v = repr(v)[1:-1]
- # Escape double-quote.
- atoms[k] = v.replace('"', '\\"')
-
- try:
- self.access_log.log(logging.INFO, self.access_log_format.format(**atoms))
- except:
- self.error(traceback=True)
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b395dd1
--- /dev/null
+++ b/index.html
@@ -0,0 +1,127 @@
+
+
+
+
+ python-telegram-bot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ python-telegram-bot
+ We have made you a wrapper you can't refuse
+
+
+
+
+
+ Star
+ Fork
+
+
+
+
+
+ It's fun
+
+
+
+
+from telegram import Update
+from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
+
+
+async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ await update.message.reply_text(f'Hello {update.effective_user.first_name}')
+
+
+app = ApplicationBuilder().token("YOUR TOKEN HERE").build()
+
+app.add_handler(CommandHandler("hello", hello))
+
+app.run_polling()
+
+
+
+ Easy to setup
+
+
+
$ pip install python-telegram-bot
+$ python bot.py
+
+
+ And it is free
+ python-telegram-bot is distributed under a
+ LGPLv3 license.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/static/website/jetbrains.png b/jetbrains.png
similarity index 100%
rename from website/static/website/jetbrains.png
rename to jetbrains.png
diff --git a/manage.py b/manage.py
deleted file mode 100755
index de1cd62..0000000
--- a/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ptb_website.settings")
-
- from django.core.management import execute_from_command_line
-
- execute_from_command_line(sys.argv)
diff --git a/ptb_website/__init__.py b/ptb_website/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/ptb_website/urls.py b/ptb_website/urls.py
deleted file mode 100644
index 5513f0c..0000000
--- a/ptb_website/urls.py
+++ /dev/null
@@ -1,23 +0,0 @@
-"""ptb_website URL Configuration
-
-The `urlpatterns` list routes URLs to views. For more information please see:
- https://docs.djangoproject.com/en/1.8/topics/http/urls/
-Examples:
-Function views
- 1. Add an import: from my_app import views
- 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
-Class-based views
- 1. Add an import: from other_app.views import Home
- 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
-Including another URLconf
- 1. Add an import: from blog import urls as blog_urls
- 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls))
-"""
-from django.conf.urls import include, url
-from django.contrib import admin
-
-
-urlpatterns = [
- url(r'^admin/', admin.site.urls),
- url(r'^', include('website.urls'))
-]
diff --git a/ptb_website/wsgi.py b/ptb_website/wsgi.py
deleted file mode 100644
index 4073a3e..0000000
--- a/ptb_website/wsgi.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-WSGI config for ptb_website project.
-
-It exposes the WSGI callable as a module-level variable named ``application``.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
-"""
-
-import os
-
-from django.core.wsgi import get_wsgi_application
-
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ptb_website.settings")
-
-application = get_wsgi_application()
diff --git a/website/static/website/pycharm.png b/pycharm.png
similarity index 100%
rename from website/static/website/pycharm.png
rename to pycharm.png
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 83e62ae..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-django>=2
-cherrypy
-paste
-git+https://github.com/natevw/django-sameas.git@master#egg=django-sameas
-Pygments
diff --git a/website/static/website/reset.css b/reset.css
similarity index 100%
rename from website/static/website/reset.css
rename to reset.css
diff --git a/sponsors.html b/sponsors.html
new file mode 100644
index 0000000..9796e6d
--- /dev/null
+++ b/sponsors.html
@@ -0,0 +1,97 @@
+
+
+
+
+ python-telegram-bot - Sponsors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ python-telegram-bot
+ We have made you a wrapper you can't refuse
+
+
+
+
+
+ Star
+ Fork
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/start.py b/start.py
deleted file mode 100644
index f3375ba..0000000
--- a/start.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import os
-import logging
-
-os.environ["DJANGO_SETTINGS_MODULE"] = "ptb_website.settings"
-
-import cherrypy
-import django
-django.setup()
-
-from django.conf import settings
-from django.core.handlers.wsgi import WSGIHandler
-from paste.translogger import TransLogger
-
-PATH = os.path.abspath(os.path.dirname(__file__))
-
-logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- level=logging.INFO)
-
-
-class WebsiteApplication(object):
- HOST = "127.0.0.1"
- PORT = 8001
-
- def mount_static(self, url, root):
- """
- :param url: Relative url
- :param root: Path to static files root
- """
- config = {
- 'tools.staticdir.on': True,
- 'tools.staticdir.dir': root,
- 'tools.expires.on': True,
- 'tools.expires.secs': 86400
- }
- cherrypy.tree.mount(None, url, {'/': config})
-
- def run(self):
- cherrypy.config.update({
- 'environment': 'production',
- 'server.socket_host': self.HOST,
- 'server.socket_port': self.PORT,
- 'engine.autoreload_on': False,
- 'log.error_file': 'site.log',
- 'log.screen': True
- })
- self.mount_static(settings.STATIC_URL, settings.STATIC_ROOT)
- self.mount_static('/.well-known', os.path.join(PATH, '.well-known'))
-
- cherrypy.log("Loading and serving Django application on /")
- cherrypy.tree.graft(TransLogger(WSGIHandler()), '/')
- cherrypy.engine.start()
- cherrypy.log("Your app is running at http://%s:%s" % (self.HOST, self.PORT))
-
- cherrypy.engine.block()
-
-
-if __name__ == "__main__":
- WebsiteApplication().run()
diff --git a/static/testfiles/game.gif b/static/testfiles/game.gif
new file mode 100644
index 0000000..50fca0a
Binary files /dev/null and b/static/testfiles/game.gif differ
diff --git a/static/testfiles/game.png b/static/testfiles/game.png
new file mode 100644
index 0000000..cf0dd30
Binary files /dev/null and b/static/testfiles/game.png differ
diff --git a/static/testfiles/telegram.gif b/static/testfiles/telegram.gif
new file mode 100644
index 0000000..ec3d51e
Binary files /dev/null and b/static/testfiles/telegram.gif differ
diff --git a/static/testfiles/telegram.jpg b/static/testfiles/telegram.jpg
new file mode 100644
index 0000000..0e42a29
Binary files /dev/null and b/static/testfiles/telegram.jpg differ
diff --git a/static/testfiles/telegram.jpg.bak b/static/testfiles/telegram.jpg.bak
new file mode 100644
index 0000000..5fd11c8
Binary files /dev/null and b/static/testfiles/telegram.jpg.bak differ
diff --git a/static/testfiles/telegram.mp3 b/static/testfiles/telegram.mp3
new file mode 100644
index 0000000..4b158d2
Binary files /dev/null and b/static/testfiles/telegram.mp3 differ
diff --git a/static/testfiles/telegram.mp4 b/static/testfiles/telegram.mp4
new file mode 100644
index 0000000..ef1fc0c
Binary files /dev/null and b/static/testfiles/telegram.mp4 differ
diff --git a/static/testfiles/telegram.png b/static/testfiles/telegram.png
new file mode 100644
index 0000000..ec89bdf
Binary files /dev/null and b/static/testfiles/telegram.png differ
diff --git a/static/testfiles/telegram.webp b/static/testfiles/telegram.webp
new file mode 100644
index 0000000..7c5cbfa
--- /dev/null
+++ b/static/testfiles/telegram.webp
@@ -0,0 +1,470 @@
+
+RIFFVWEBPVP8X
+ALPH"%'$HxkDUNGq' 8*P;-N5h%C]CݍZԑzk=3˂mnJ՟AdȰYLF Q\Fݹ|M֮ZQ1^Ϊcu48{ؘ wqvuWÁ
+ V$ WQ<6xuޓ[4&a2Hډ
+u|XӢSqWY!|asIA|Xc1O\[@܉ #ujҨ
+ t
+`/Fb]`\g[(>qxMDϔ]kgkȊ4ϱzoz$̍v9g+>4Qx
+
+o&'G&ρ@tBxV8X4yXgS8`
+
+$rWcjIpg`_Vcdb{<#8dmѿdX}d{u8Nh^
+`a3zy/=u'ȋ#ENP)H*
+ Q<@^LZčcg
+-VM+brE@cy.)Cw5ÐjQ|w8-CC^8<T1VMÝsHYyy [Z$=ai¹ZQ̐jQrbWb֖R~ny
+bAGAJ+rK3>tk]CwsA<ߏ|'K'`nuZw?Ȉ|Ny
+
+BRȩ֨/ʴey+NwյdĶ\CU962ܑbul1?j*n c)M
+ !wIL_8vRh
+@)SԞ9Sr#攩^)T6NpEI~DŽJvÑ>vz_^S$J]n+D뙀;),AB*UH_vJ}R?ce+.
++^LUR@Bӷ*$2MQ
+ݾ
+ 1'>#wvMƁ8_)_QO^$IR*dEkI0jo
+.^cF_cRqH.*t(^rqQ*_oÒѽ{xS$,,#5:|*yXf<%t&854Y5J/\+HMxEc#LVIw
+
+ʻWjp[ůw&$rdÌ[-F,k!goaOyrjYԸJkC4ZQ2$Ò|=MZ[bCRJboT8z
+j1
+ DBO(S )!m6H
+-_1@RXw
+b:D@sB3Ks'%D)FxFi$ KD?MuBӵͯ7fi1%D)BGzta4<wXV%s7z
+
+F }>RBy"1 Bkp6ѪZD3,&<y
+;bN%!n-Ә0D6ky(Ղ2?fR0!lB[j^x(٪KՁMC|Wz昃A3NCPL+#B/*:_Jtm[68=
+
+h>Zt6`[x>۽`Llt£+5G&^tqπx}uB/P"l+/LmPS3xN`?
+o+yV`WP}~JhE=r16!DUKWAzk0>;|j,7و3Y
+
+cw+\k5t:j.B{bPnKV/X3333Nkxp
+'vu7CaR)&#"\@bmuY!Ap0Q)tKpm6q(wSאMFlJ|\`A̍<!B
+
+^$抅ςxU},P`d22=EӞ+1`N{]i%=qQ#FNvc@`,5U_qAa52nbEv̀y'~8Ӧ#*`
+ NINoiylBOrLN@B
++T"1tmD͉W1أLDB`:lZEFJ}
+-~jNJ%xyQEaZe!50ǃg٦
+.ϔQWPDŽz"(
+Ǣ}!IA(zD( 015Â【 L^FJ#<p,n1FB5-W 9S6FԇQ,fAr@bqĚ01YU/c\EET셾6ˁ_Hkr@Sg!m7.@L] FH|m&,efKBh.]"(~އY*d۫U݂2۪\QX+uGQ2آF@`F]#S
+ 0~3ʉ c~tA-f<Qk4Բn^FAAtk'HM
+D-ccR# F]}}}w/J#(khѷK<K+VN*TB:QʅH\&̇A>SDWgT(j2:gm"u+UFdF#?&HwCnocRWrl¢(
+ "6dƉzN 4IWڇEc
+l/YLgŭ9sJ;j5'#s/YjGZmظm ֺpրsk
+68/A4T+%Uo,X/\Acڤ{?#H*'/.I
+
+7$}IR>UIgIi3|6)骞qI5upbȉVccI
+
++fi1@r*AZIǨ(Y+XX`N;U:rjΝnIA!&uRq'i:HSۇۻ:H3I;u"餁&LWdhaANX*:q,lX<ehAA6YmfC*5}؏rKZb{W8[I_<MvKEuHMXnj~q0#oڰvՂڗDCHk"AVJUsRR=6ohX8GBzd5k_"vtJS6+ۇ
+ o%t_?zo<u
++/kNzWJY=F0]#in-p>Pw4>$AjxwHn[Trroε^;hᥓRVy/J>mW{.["rNy9x(.Аm#Yyӆ~aRm@:R8Μ;Qv8N'e65W}F{"vOvNO(@)zu)6lڲu۶6oZxB -E5C{UvnjNC_[
+e*'Pʑ~xBi߇LkaX+Ǘ Ks&);55=~@8p&{BaU$d(^?睉.&ߛIyjf$nJ_L;dO<8z`P0[k}߀.(owZFj=
+ oո.Z6u)WX:j^>ej쒝K
+jzveQ!w%f?
+z[/ gx&D$f>1e4h&%p;:v3ehinLL Yj;i6zGcѼ@Gsk7fvKD,lk=M/>]REٞ_f
+W<@oz;G:Gy5,/tdnʹ27p^LfDYvZ,kAM'vl]NB~sB.gAE)]z[@3Im=qN`son=|FA3nj 9Jŧ [a_ˀ9iL}yeT~:qq
+:%>^iR^,q\~[YmBCTK܃vWrh$ztVYPMcBJ>OxPv8ˊՁeBH5ڰ4]颮dвTA
+ x<#cDoePI8Kāz
+%AɬV[{Gy/*+gpூa
+SifbPߋwtmNuUJKr֚wM+AWO)GrfxKr"`xLЍU
+ DWPNآ.xphHݮ8jKPXytJ1yXہ*&U"bW\jY
+כ@ЂzL͖bէg^ahJ
+qG6nt.-w.m=B~vŻBǍ/ars֬iʚ}bBjP&r8xI@a08Q$νK;RuRѻr,a%bz0b@
+?%'QZk0,d=t0KS["B
+ k[[G<kngǞ|7_=)x[d?o.;E
+ŗՑΚH8
+۔g>/xP]kgP_B+Ӹ6
+2mMoh+"ԗ=j!.V_C_ޡ
+KͫAwW&i;3jj9utk=J1gnw%yQ6KR,->;0_|y;tk(svxMQQW]UT
+jKjԼ.R_+DVJZ+3
+ 8:u6m$< 2nv'Gf5kc\Q@9Dc4,ihljjڴ-[o߱c={/]]?g`y6>xOG]y$mb?њDY9m\մ-`biNrq
+DPGb
+ tDMX_B+Q:aMmm~O>ޏfIB
+X߷𱪿%eOwyp0O4@G
+D{O梶)ϑ##e{FkJKaѤ8g
+0De3K6ΡyS6MPh=ȏ1
+m,v?Kp%U?̟:/l@It*nb˿zkO<hH%$"N@DcKiϚI~<_ YNAFjӡWooq6gYEp>>adZhJo3+gC}|ђ%.w{~WRCq I4"ǽejj21;w*.<ѿkɬAs"!=PaY.7e6qTGO:|JY5
+
+hq;NE[d̈Rs_nRA\8$}`XVDtr#B
+ $T8))^.Cкs4Pde4C̕\!NLHOмTiZ=
+_hkUw{?uWLyYaf+9\3TulsP#s9p=f.9g,̑\$/Ի:nk$*eΈWؘOɦ
+ rEx=|XX1Ue~ޓz*HP*6u+9
+8g5.2WؓѨ^kՅ~u~~^hAx|3Â [\Yǎ8f6b5"ZQ/ocĂRF#o"5p
+
+.wq#jpdp(FiQ<JEAcH0(S0zym!|c2-r37HAեJR"As4_~:X'
+J"o2ȔH9uփjh:ρH9Ǝ͌Al;)
+
+p"^&M`SkG=TLX<ew9/W#+(%vyuTHg0P32
+ . ޡR(mb߂Y!:+
+R%HGln`S:|"do
+X豞yl)?x{H^;ƄɄL,ȸuwUxwhڳ
+2.ٺ@脄ԲH?bg|鮖0S
+!ѐnRHLT>8;<qm)y'Syb&B*~EA=Oɒc^n%*X7{"Yf!Z$&}iHy$ЩL6B&;kx/J%4Cg\TBjN@o>)'ZE
+E%<gnS2t
+ҪA`~ej}N*Ֆ7-=8u;!f~um6f0
+
+ -[F
+c ZPVe gk,cL1 F-̬ePisE+qTss'
+w2lRM&F%.J{[89 -91$jdi:qq(sir|Dk=kE6kf+a-xDz4:yKa̋39_NwԉO=:j&BE/J}rA`GaH˴]-k~qr09#vgN-j{o<%L OЊD{<{] hoIF~7awz/MqgmHn˯s`"ygÙmT]z8膹x&qHCvWViۓu˩Gf/,W#E7AyM[
+ {pYs"
+(D1+7(=a}z}`-Mg/͎~&;z*MlemKKP!i6/m&4bm3
+ Y]ؕ;M$гSv18\4'5kc+@^
+@O⚵yyABId1/1\/t4YVP8 u*>E
+D!ɍh(D~>LL?_%-|YV͓>ٿ'=x!g~1?O_7w_G?o~Aeox=vw#۟3szEp`_ҿo__bx;~{m\q{6KiyZo|[v>;+/3A2,nN@'/~-ooydwM>w$"P.ILt;Q'7!$fi+2%fOED.N*FDdԟ>a|bf(TULms~)NJq>iy۔IIi{>uPRMB&K{hw؏Jsiߋ|[¡(0'EӾ FǦԇh^mS%8$
+
+ u]qI`,#E2AiW2K}/s
+ei kKi=ZtTA>Ԅ2c5kl-RYNI*XfYھpc&b؆5.~hH.y!O Dǁ? egKоC>Ud=@߫JՁ31np#3lCbׄv-TyF2'"SԱnmK~]ϗjH[@Uڄn
+ ^cVm#{=72sa%9)NIAZ?Uhӎif;(qN9u?899yKS$~;]؆6!
+~tF
+
+A;8im7}!j:L['j\Ȕ)vgD]ž-o{\7<ߞ.
+ I>*,~wdha0*Q߭!o#<3&UY=is
+ aiqY7-"F8
+1# 70T|̲FLZɼ/8:ii8
+gr̻dMn^\]YBe+Sp"yޖ8B*d|>7%TE(ĎE? ?tTl*˓RQM=(bEVD
+MJ~%`"RR7VnPn8?vwiY=)L]G4IU)/sº(m7(O5JsHߪ_\:C?Y&Goo~durJ&ѹ.Fi{B٣OQ
+ANhX])[*
+ ,\{f:FěH'liC:Ӭ3~={|7Gz-;]D<3jsz,RWj
+kicת/IŲګ&pBXvx7ť{s *Ue'VA8[Cix} A+ci/6ţWva'Gp@KtѯsU.{OZ@fqyK]zoN6wPdo̻Q~ZIrBCL%VIGcB0T\lb>-oC-E
+vG1ꪡ<2^2}YЍ̯[178ph&;H֜S͉=0
+ b%[.Kq]gP55.WKoZjߨM7F6!-`uטKg~
+BoM*
+`Ys.\<?셱dK{&SeOlCbTф+%>;T~ƘjQ,5]{6kE!:ى ž-R'{y>)W>Mhj_70-œ鑢 poI
+
+Th,rž*[cݟyᘨ@Bzʱ~yx323|[qZdž-oz:z-}bO wC
+{n!'/~-o|[OrM?R
+ KWž-o
+i-[DQ#I`L2]a)Y&xEf~S-uMh<0{.c"wto]yp2;L:zhUkY֛1]|yf?*ǰ+$bbw$Iݹ}TMRfjzI6sM]/3(P yo
+wesgcFޕn'Ln8`#j
+HtDnLrA,ʌ䙿g
+_xC2/oW#\%1!{2_T3%-Y;
+ \ŷb@[{"A4O_fj
+tÈf.Ě/6H<A~91%M<aL!bhCbʮօvlGG@bgTZM8%
+݆aQbbk>!RWa:M5rGbrp<y
+
+ATҶ;Q8,,3Pl@;nCdf'WlZ:ZVNk#L`g\Ɔ\jJcp4N\ ckDC$?g$d1Ƨ)MܤsO?7H9R
+
+0aya:)o`ib;m+
+,5DڅPWV^JM>n4 W: +jԨP5ݸoJ=?XrTZDIT%fQIpxo^onl
+
+7Bb63wzO4 N[f&3%9jyz:ר"KVHlKvcUĉzغ!>ܴP`IS
+ kDKՉEϛUj1sgW, ?rz+=
+`~,bL$@>;u"H0K7LF/t7, %Ju"X_W`uͥ
+/|2*msks4eMG"&^-q;T8i_Mh&!*>ʎT4w9y_nڲ{6cpwS8enkO5Hw/'?-V$AjSxfW_°A-÷e o=:fZb+Fw7
+
+%m,:cF^&"96T[ח䎖)oT5{ؗ_/&i;^3['x TH,V+)
+b?5dtœ1*쩝Y)4>4SKGӽeRY\L"fNiGŕTO^2&SG7i3]ܜ?OF[њ=6ld\Gq+jTAsCT8V\ېj}ۥ6CoExީ~G2h(|D2dkV&SY^Oɡ2ˊĔkx91UPcAR3tNSmFD뷅T]5dC;R5tNݒ@ }p:\VyDV'mm@RP\aS%()ގ"P 0AW{P
+
+EDz#\-.WPv[aIJ4|`d0pwhz $*;3FWnC_.\-r<7t)C
+K|hAV-=H>|*,
+w~#&q \UZ!¦x-0!
+8ŮQ1Jb}[
+ &a
+ƜD}q_5#\ۙ/߶GbhYo6ZRMK=f^|o'x5}"붧"!CX;ʥtUM.bO}\]&RYN{dޔQb\V~XIq7w;A
+(1YYP
+ 8ݾGGYnT%[c:;?=OSGWu^tc+ٌ*
+ro3
+(LUE8dڦlJAʢR5f'lӴwo)PY$̨cY*j&}#&Q+N"X϶:+2z|+{C<IӞewr͛ךl±1}ܷ{BBçQkP;'
+ ""^j0A
+ڞEXV{)&f
+J,SpL`|zB_4uWd\htLAǁ7ja_nd0|W~ÓI,£-aڻw?,UipSл_}>9֊$\oQcEJ
+]Ulͩm=^@W<2ϼ|z-Jo#<)6J#r.4?r:zF;Z3c/܊2u j$j^PUJ`
+
+^@/t$@/^zhN>WQeI&xp]lNxo4$d
+
+Q{;[~aa!יu ?"X-PzuNbbK2A]4'쇯w"R}Ma/F9:<eB6g['Lj?e3+rMWbl-
+
+Z[9rxcxY0*00+$_ϵW,5Gy*;vn'srXue6
+ vbjxEkllÞq
+s#~5_.Ǔ&RW9-XQL#![ٖ;~u9q/{~,B30;B`tP% t33ZXQCNa=]HIn;mE=ǁkSs<߆YPat-Gc1$t3!\Ui7Tn'ĭbcCmP$c<KBO
+ /D߱0 mYFS˒'hpqCtj_KjfnPu SDHD;
+;CA-Ml_bKo
+yVOPHO Vz93V0`ODf{0cDP>Kls/ʿ'"/:
+ T%lF?raQ%jIMQbW5tFe'ub'.Af9d =)t
+>U ioK\6ZX̭g'}C' Ɨܼ;`oeG
+c@c(tV m/:A!u
+EqhdJkWE@(;ʬ4ʪvEٲLNB%
+W= yCЈsUaȤ~EW1U{R&[Qxc<ɻU"I"u'cI䉔2P6`~T%7<0g#g]p:TZej/7dQ;ȹU9ݴaen
+ \?p?oS%t9̉
+'c_]vQZI%蜃engrK3٘U$WY+rLޙ
+9J9gYGI$j6K(ȆAX*4~'3.l!gl[prxJu
+ 6h Ruz
+g2%büʻl;=҆`6#U)ȩdi(j8P|!+~bGPg%of|ݐ?@Rf%^w|ϔkS'oUoidŔPJmOdqL|jS
+Cm?[i(bkִj~ぞ.{ȾM<\mUCM5Rph2gysH*&k=&/ jV;U'-!xFY<7RB/nP"3JfFlvvnt2[8h/{DB9
+ {K8LλOj3
+4vXJ
+>D.h$.k#((z>c˂V-&UZJI&hOc?!!{fHRT,3=<IFf~g0EΓ!JQnߚvh*#Hh>%9J6D_ԑJ}ņ٥
+ nlSYۇN!?u9G -~ēt
+Q<#r|\QeyXJԚ1M" ]Yy॥bBwlIK
+s;'b않Ht+VCeϋO
+LV{vγ_{I&M"]ʟ-;l9AܘGmkTTl6ٍ_z46-6RsK7sa9ʪ¸!FQAɫA9bUT}!פ<DF}ʄp\e]틌v9.
+X<0Trrg5p
+tL
+Nݢ9z-(obPoWe1B+ɰ4L&j~D$(Fߥ_EA-sT4)@TVGBR'}E<ⰼC?+GɄ۟#qb5/߯7ݟQy@]cE#C>7j(^Rη?|#P8BeuS̺T}B[2&i_:
+lI
+6v
+D[Q
+ ̸+H}p^э}D0>H'
+:I-&&ДENvyW#ќ;
+ey;eVC:I?MJ+oIjjyyRigYlMȎDӿ*|B4
+CEuw'+DM2zcDP]8Sp
+u\[Hb횶Y}_BXBt4Qf+92ulʮEy'DCB\
+Q{9YEb}~iH^N*$ǥK5
+Lp!Y^ve^CS&(&8t8Ai
+XrO0T s~DZ
+~/2cu=$̨:ڔ5-ׁY9|:GV9.?KWJBG4\^XCp]!uK~o2nBAr*
+1>zݝ;*V9u~4#5"}[谪pJ&J$~,\3N_{il@ݺ^5BsDjG
+ o{58Iy)AZ/8η
+(*a@[͉i߮
+u}U1Zz-Y2?d̶sN
+[I)VKasC?ä;?KjSADuUo3v6c)12F]U`d;xhuZGwX̵ Mq,t)TGg~o!Xgj\s)2؞䈊Kwt@MkLcQF:z1VPĺ]!BwrlJGOyJqǓ@S4B6bqIHﯪNbH&L2HM8htPqf%)ޘ6^y}w;5L=T\X:w~zWxvR:QO#-|ݭ13%b8eCtŰݿiyYu5_j&1{魀|Ujb}<?DUƌަ-V531cbGa5&߀/V(ulNaNÅv(enQ(҃gD[ʪXLu+'xezȦ*;Bt1r5_(OW#T
+>+(eUf[Y@ގ=
+Ӫ*,ozN/*s(-!JI/9ok/CGէɇJx!GpWciW-b\JZ7?_]h,[5ѕTi5ֽ3ڙ^|^:dY/ż0,I9zZqtNT_eI(sвZNvT/q
+
+/@l\SCgj406<[\IOh}Τ'Qp`He_&e4fR\ј-2Qt
+
+䙩U'r1~*YH+:1ѩ}Q"J*ѿlCNRk[+nzL
+ *86y D
+~z .Fubl?tEΏ)CQ=i=Le@!$SyJt%by{`5m̄|vWPjP
+"9iXsS2C!+QκiCx|
+ 1o;1)
+ǤJƱw:KVj
+гl/
+Й@a5 > ]8MSk;]JMW=҉<Yӟ[}wګp
+9A$dZp2Kg~`F8F]k4ךAyi,ySaM0ܻ:)3C",rƉFAf
+dʅ:
+ xYr>oidA6WSPJHpm]c@V^J)XFʞ
+_qEE2X3EN/P@vmD`u%#cE|
+
+۟bBwM 88-BhH~VK[E
+dC"ӹٙc5
+e&+1%ux0oj֥fr0bOŝ][S3WD:bp~r|Aw
+e=T0
+ &ZŪձh,V&0
+K4(WGNx3CEp2>귊0#(JZs9 ZVt@|f=Hzn/x+(Cbe"Z&cboȖ[qVL/!
+ ;X0&s,Uhm0'*˺o%EY8NYy&
+8ڹ$2n$0M`-k.N˭ј4i['
+E,$}0XEVүخ
+;hʪZ#ʑX4B[fm*ǽߐYۼUBp&WM`kT).6vjNGR@'L)C9Ĺ:\t#\4<Ma-
+1$gЕ(mMAաeAlFJ}>^Z^ӵ]ӧxC<f{hT{(Glbq_cԑu<8/V`IA|I}z4k[6f*n=L@DOXbm<%CO6XѐKzp>?حNgr=Tup
+5i-=R(k$FjGIew2RBksK'h?.y@0̤m#CeFC#U&Q붥caHq?fv7mȯi'0&%ҢѢJsRo
+ W-iR*L!?>@ (|R
+0g.J,LP] /PG\y\XlVѱ>7Z~bxh&R9vjb`46QUjIMG'1*Re6zAyDT(@ϰf2<4ƣl4-c^,Qvv+4f7*tWHMElXUo@{a6ͽp<@e8۞`OB6-(躊FAC6VɥZ)s.40Tw\ (1At|7kXZ&>℀ZcdJ#y,dXΚ˖҇
+gyO<
+ h,y̜uWѿk}Jf/BŹ]lLL)-HX'^~2=ۧޑ=&6
+ Dbc v`~7AmRTW:EUI~
+9kcFeR^
+ x0
+3Tj/V~pF(3
+LE1;YUu7tZaaޫW3Gz K}G
+/9 +c|TJW
+LtX#lzDK@JꫭlsMMϬ=dhXي35{KML.(`z(U2<F3.ntK3^bD
+ 0ѺT
+
+rpBP"#qh/2rWeadqoWccv-YGaDzK:TfkُF]؍qQ!4
+^
+
+eL\w(ČJճHxy;.=.Wn]8^Wl%;OVq[_6!.8kwlL4.Q8!XhpeT@\^V(*DAsazAY9|4RѿO&rYb
+y1;nDxױ3"UrtkǐCC7Fp$eV1J1DSE˸l
+ԫn@=z˘YmH
+ xAWFAᩧ%suI# ]
+FJطBZ+]lПޔ&9
+?_i!!\!ִx}6݅V/'w
+Vx`vJr*1Q6ƑDH@tB]n{XFI/MHtHwOӺ"4x3S<ozgp ?fH"hn=$^`#HSsWjV,p-zh0&[e
+de
+,b
+
+iX@'^O٥N<pB\:)Ъ./ԕ7uP**0aTӤ?UyywHryA{}TZjcPu'MRb݈f ($!}Pa%͊:QQP[o#K-k@8_srjf8])
+9V_RIR_kw{2dݹ6 ig`,V9ucZTo4xrV
+ ? p#]L>7A!1+[g 2
+aD*(.rj(i.~8٦LZ'~]\0h&&Mό2
+ =gFԲyq.q'|/
+2'ӷцpe9]#Zb^aqJ[Svk$Yt1RU{<;/
+JSu!4Èv7z5> j=@OiFI
+ i
+"^?t]*"Q~Q"苊q~1d7.xdEŴ>v3uyt_r
+k̉RAC_p oHľl^ܑ=Abߦ60/jXg#[Ut
+P%=s_,=vR~ʝ}ݮ[YV~[_!BoYW)pID`OW։[Q9|(Dvv:P*N|G/"
+ %}㙹Y
+배o/.'YWs#"ݾazXLR$lssU ÁR1X(T.Sd 'YZZ4q"@y8^%aK*X'߉gmKg"&Kh'Ʌc2q-i ːX
+{mv8"XF)5w|䁷g]v$a֩u榅Yĕ?1jE%x3G}>Ɛ\1l6 ǾV).^asYXNSﱔJ5)c~C#@wRwI3
+ sRQ}SǚwPqf0Y1_6$s
+eYǞhAw1mp}H})6:_2û=|
+<) :"jtW߲Lxs{<F`*P3KUXTp *qLk{lHZVNBdIٰHGEj}mJ Ql>FupCNtϛQ(7_hԭN+
+
+\`3թ=p;s wRCo~ [_J1'9)c&Ý-T-0CUc:
+ 2eew`p,
+71G Õ̧/Az;Sj>rg!8"9ˣ%Jxg'x]tzh%>I
+;X#
+
+2=Bxci4@'LDz3選ߦ^z\>Hvs[veFDV4%L:C*{튄n$kn7d;Ӳ2;$ʏzZPLwɤ;ל0\a<ý2]m_[SHnYtIt|egE*wYʈ=S~YQGབC;i⸫sp~
+&Z/ވՑ!6bmj7H|
+
+0).b1mb%nu`L+@6O;]ü`8L^kR"%xHȪPٵGX>c`
+ ŀQw Yo=(n4%i?zUD{@H2څ4`me
+ \BLfc
+#DO
+;+e#DgKI=&MƔJDymA7up~(#`#U=snZ>)Z,s
+ 1CMq\i>Dc`Mo o,]۽
+ma\?EgnUA W}tۊ:e(qbwwL
+:ĚW}mrUi8ּ܍ fc1 i}
+ldA`td6p@v@S_aйm:onc֘fOkʕ0 eAgQ$ri%A
+ 4<3R5pR7uFt'Kw Eu~q`9K
+R_e%#eLi(2Syl <2xEs&URw5==פySYupΪFfrN)>D}&Ry4&
+IKw'#`Kp[rUoVgӛxh}Gs-^QE3C9S>*fK'V}2*7R)&2&gO)|Ec`Xfjknp
+l!B#v3sb,T ![,L;EvGt"k
+ \ G9/zБC_tSGnWq ;p6@G!Csl ȅz7IWE$
+2(p,FYݰ߈Ֆ6"}H{>'JrLYtvam
+fczkN\QWs-_Y3eMܙ.5=R{bWۼiybSb!^o=qbe
+ 5pYk":n}ͨ3x
+Lz |ZK>},nYdV[efS17aɰwO^f7VDf
+
+(h6Ծ1溤4j$4YmUA&kAO2NQ҄M0h8}8'[KCy%}Atp&kQOKa;2䞮a"IVF%Cld?F
+
+66m[,Xit߃?`>!.t#E̾US?Kbp6}[R>
+ K"<}[]^cCn>
+ckqj3tl*rWm8g7oƦ5v_'Y&Ė=u$ސw\=/j
+ Hnz%lIUGYp7%dLB$>q*mUdhj/PG?9VsuPIdnڥ'RLIxt)فÿkeT&m;/H*a,K|v\7ڜMf~>{xi[c~u6Y$*-/U7t^GwKJ\vʪzk%*B;i`d`5wȼN~?5-jvriBi2E>rv>v2gwTz9.oWhV.k:[R[a`ɵ!l9aN;e]`r΅U~x"ʯ-v4,Ӎ3\#s̉Qϫ:AN)ԗ:oVM+ffi-gA$ܤ2\r'BwMݞlYA>K7[=* cN(L{S
+{v2UDYy
+ عQN
+tQjHځZcv+MI5o*C̞sp$9UmqAi0p7
+qC,)GJ#
+
+
+V0ݿxl0؟!>c$Ot0Ŕ.N0I:PT1b{=^xSP1XJJP;`F**OCи%( RO}erÑkLk+Y{=i^rPV{0
+!;k(oj}^GÏ!wbp JGH\
+ H[-p3&' GL#tY*Q>տAt(h32<i8#˅xν>7c=gR'}C_تNx4uU
+
+_ﶃʩC)h_~ d9Z˜k▅Uzf\Vv-|L՜g~_6;.PID;!5TfVs`289Mq4QyЄ?
+$i6
+*QZ=y3"U@
+8|qՅmʳ/WJ-i mSmnE,{@/Jnz-GP.)F<ޛ؟:*Z3 S>d=ĶG͌1:v!'13$lA!.v'q;*zI[n9dU4Pv/[0ׂ+U;6
+APXp5p*-ғ+E:H::Ќi8b
+
+U\P0drTeQGE5f%w!'$ܷLlltB{m$:GWaq~߆
+ d$-aE\
+uYqnE++6]Q[qi t#
+G7弉*+dxq;Ogȶ쿈W)e6Clvw._ia/qNAJؔ3P\ZzϬ%ZlG
+ tXiP**x h[ʌA?LCyNM5Wj|xBiqZE6o|
+'D]η̭]E
+[$PtŲ454\`Us25pGkA-?tIoLL:K8tA}lFnz}Gj߃9:}@D-J+[dCܶQ|@͜aщOUBbko)+t5B>!!Z]VT4K?2nkS0\t[oDdq4w+*_݇ؾ}[?WBB}C!&1\ؚٚLeb]kJf
+
+cBw%2u#/fanWbsd|l]7;lhPcsv<I|AӀQ:\>Qc뀫MnZbcDdi9ˮq{{90֛LxAđ("ZRdXYnC6
+PeH:Kys4鄄
+ !MLj\dƧ
+f2dtJγ2iD~_\]Ud/aΕNݎ|+QJBɷYu
+ގUl3sN@w/TnYux_鬘GUba4n}_'F,SfNHd^RU#"TmAS\Q+=1ߺܢjCؚ9@LJ|0.pAHȻdV)!͞3+~0_96ߝ`dED+NPֈK48[T/-Igdq*+frA'}ޟ>:V
+ '
+ɺRh5.+OI]h@#3>Cݛ?؇ IV`~OPEt\'Qz]C@ςAkXoH+7Ǽ8b핢Oh?H&CC
+ ~*
+W)%8ϒ)H!A!XUA?\xSL|8]3u?WqrC
+NNO_FhtrՎU".~4`)\Gno\vozʐs3)AtV~ovxQ-0k?u8'0
+
+6^4̶ ҩY&cMqOhn)&]>*P&k(BJ<*~+
+XD܀GY'{Z'\N{}$Tu~he]
+i9SXerUo'i'[v݉p+.EƈєuabBd-4T6voeHnQi:X
+XR-mϑ3Iu4dmRւ?۱y5'V
+
+v9rԯt稬i[#WqHg'rsUqZ"
+{pIp8raXN_jlj\^ye>$@W.(%s?
+gyUN=M71~3df
+
+vR4lq[DH^OW_0+<Ii}:/m#x7 ]knYN)aoU6dZ|[秝Nv1ʟ}(><K.!J_Gb_l":-iShȈc3zŮiTߘU:&.hA
+ nzk}dv4;tR9Z
+ԟ4 òGW$3 %8bŹΛ)%5 6
+_,Z;@XDD^r zSX"@6podA*af
+d(}Mp|<bٗ{.81 OӉ1!$dN7
+"˸
+{ɧFAtkf7uts3I'1i8wX52sqEF3A]rga$ĄQ`_ĵ
+Rj ǛkfUn-u
+!86,G9yBof(Kʏ/>hy@ˮU7(8:*mm'e)Qe[>d />j4#2nSZ[hⶩL)7X>+b㋥oΎȐm~lbS3;8,Ψ1
+ dLK$N^wOqIDW2WSY9V #/LE
+N\}BpN,-S;[o
+^Q18c{FC
+ (yw%mYv6['4l,D75}+U.@Dl
+
+-(k:ȷ<L_uGB?S0WUiX5J;,qoW2Q6 r:Q7yFǕyVkJ|KJ#}dT9GC
+}jL Ajb*)vyN@bGB[`Di3F#YM4SD9yźv
+ =&㇈{!7da>9QzxWPVy~r\YKFo
+֧rt:s
+_0(0Zyħ(+h}$AkS<7$'i|#ȧA)P2}'N5
+ ])A`Rw\w~F/$v9n_g{Z4"i&D#K_/Ve4"*R:3T-~w
+ z_vg
+epwr+AΨ'Ta9F"hqw&xBz7.A&B$ɥI'Gá]
+ m2
++hdh0 oϡ~v-UQr^?P.
+ocU2}#Pߓ\,xglp6JW/X,ز7ˀ߿ݮQ
+$[NxMUVG;ak]Gnj.,ٜ9
+?m
+rB7YdrVYbp]@!xjnHǮ=ޘCdͦfYOv7(Y}ѷ!n|puD"u+j'5>
+o|Pk$N$<;j-@,>&4mLHrK.Fu1C},|qhj-A9(sk@akFH6cMg@m7pI
+ ߐ&0K
+O㿒S{=hJa̩8\#rfژ$gBph",[?!Ly]3\p.%e>~z#w|ަb7b
+ l8r,d,)R\(1Anym,ӣŧ
+pEGMrI|'jKl%-o'HzT.@Vac
+(Տ܈+yjmjIߙzomU̻;n|KݲPHzCaU[_Ɓ</ym7gW+v#w[tM`d"{P"!mc@
+ .t
+ C'9/Xx݁
+&))#,@i+b+P-Z}H@4G!.}:?EGS`['qmrGM0THc\j)PF\n9^ySmTte:NYaθǶ)tOמInK,"S@LĮ&dJ{>Uʒ2S^Ƒpy&Rfg9lGꮘy'$W\2BMv
+ ShQ┑P͍Mf7(-x<Ώfܵ .+ऻE
+!AS/L|8쐅f!Bh.wR˱JSxEz`AErd&~A@ݏXZnbqGuJXrMmèxiX,V6eS3:o?9fZG(k!|Me6ќ^TwĹXywsTHu
+
+r &tmXo >%Mc=C˞$:tt@^& Te)
+ 6Tw̰/K
+j
+v7,uo",ı-u{UkZz\n]vba/M`1Mv}g1l|5J$nW'۪pw7pGνko_Kя$]O3ۡw~=QۭudTInT
+
+zHw^d.Cy0LhIZȦ#G?4<cԓ>܇eЛI!:݀ׄ^2|F./n,Ai.Mv)Eq0ObTI=+!3fQtlP]lv
+?!w',ɶe#VXk=K[:k-c7gmO&k-+?C~y=qB>;8>gJil7Ֆtޙ3Q),UcP.Йc8?c3](bև[xkV
+Pt
+
+}\Dd{bi$"PDgՉeYUAp!5NhDKx)`Uo
+\BewO6BnRv]ЇLf{R%%H.+,i^iUB9V^cD~NH!5{Hw2ML^<vUݰPeIx|gJNTdlfb
+32PS19q*kї`saʌ3wLu˩"Xds)dHS^-/jݭ1ZPN
+ !ĨvCM0S oS]`GP`[,>KZ
+:.AC+R4QTщkmx.n 0:w
+;iHݝ
+G@M6}sV p|[=+9mFVʷ,Vs0h\5x\"QNnrYi%ɂ'+ԃO5/&*idi&7
+v*Td-SQ4kȇYt.[I;E.*)}v=Nm]bCS##Uo M%eۨ><Q`tq0ݖ=:=
e|>
+ T:o"\֚9 sߜ`%; 9
+AKU}=o'S!R!uO2jV^}*:jhk'RٷX<0{4Q$@eд<)'3Y;d;6$]W\@(٩P\dm;g
+ Aw0w ݣ~i"QEn}cPfO{kҍjSsPVlY{<6PG5`<%qTDdtq>3뵀kla+}B[3ߖ~DHVY8/ZA.NXGxqƟ`ɍOz/"&QI`r
+3[B]Ӣ5t+
+U7pZ*@0w*jp^`gH\I2K7ie4(D|ݰI/5ZNAmD{&@3)$PS|5{NIHjOh&H ?S2!+0b
+őꚐVݼLWfck[J
+ L!8Z0rLVR%
+Xyrc&>˰)Y㬒O9NJGTOOXwukp04Z0̿aem
+ ԟUԊ
+$X´oQ5ܳ檵VWOcPwד9g'allQ$,4)H8eB!~a,۔h'T; ҳU)dQ˽QaoyK@(*ʜ66n\KqfCN4l)[Ԟ,R%ỗV@]S
+UˊU:^lɼ&6\k;skY{H&B
+L{-p &F1_FĆT?'AǟƋw.hPI87 _ڄ5?G9bRXm0=S~":K"CZ*qp?zG"g^72
+ lMQsx'o8*-^{=
+;WI'틛Sɨ2AŖ 6Ly/0GM }I=S;
+K,E %wu `#sR;`oMTZ0WZ
+v@<`
+MvD|)(SQɉ, @HۤI4 9Б5 ?#^
+bCig@20fܰz9Ԛypdew/Tl Kո:wX;%_%"D&WKns)Gʝvb
+ǺdRF%i"ElH,3yyndFSNj{OMq+%oN`2YapW]VAhN;USqDFSў9={Borz^qOQcCh?q}pf,0aD9;:?a!PdJ7)KakϹYU!*O9+lTX
+ ϱtԤk5遚dΑAXnljځ XRޖ
+`.t,Uf6.5?r
++Pc3~<I
+6&xF(^][g"b.%3'mZ"L/ٲŽ`䢿d:\Sa[8'g5)cdR?yʴgN
+
+5Y륶3t6ITC,F}1BtYY`p"#/?{?GlGg}4aX1++TkȷsVsJφ:@+#82y, z0 HZ@X<35
+ :8+K:iumM&#'i8
+:nz"{H>YMå%A\CqmHwI>INi&wyچJD+Y{rYh/Rfjı~U+x#_1^](WΈ[χ#7Xp];HݎfjE2xZ#ɑ%Ӈ!*Uo;#ޗ,b
+
+FmfIFZ:y^TR}H}K瀮X9z'~;]hcwy36L|_ b%%/8u^T"f)ymGp*s0UabfFI;Co%j~G'V
+
+qRڔO(b!%lQu{2V'bzB_70oUQ9OݢP<;d*ZrxT*6-r-+U~&hsRCo]I}C9L?o!=;^㈎
+ F.
+BʗN
+ǓX>F%֪c<^IhHR0,Y9&~OW9=뭭%bkSr) E h~b5r{(+coxq52/`sܜlЙRg.RWAfXlXfQPy?s%8$~ΕmMe]
+ ǻn04SoL"/}Uw.7~46CiD8;*`-
+%"fOU*-$۶7g18}R08a+:74ZUXpr>DLNU=}h]oÏt<F
+4ӱK@fM yt{twpzEYZڔ)BM/6ad[_:$a
+ pE uoCVr"OѸ1n^İ@ad֨
+Lup/b
+3>8X|Q:C@-WOGM{#Ҵ^PЛuQB/vϢv5'
+ bOFe0g d26YTLAsߣ [g=
+ CM6u80J~1O\߷D#
+AiY'?}D!GQ˅N<$ŭiXrb&NeD)
+?~eSزF7j3u?b*I@
\ No newline at end of file
diff --git a/static/testfiles/telegram2.mp4 b/static/testfiles/telegram2.mp4
new file mode 100644
index 0000000..1fa6e10
Binary files /dev/null and b/static/testfiles/telegram2.mp4 differ
diff --git a/static/testfiles/telegram_new.jpg b/static/testfiles/telegram_new.jpg
new file mode 100644
index 0000000..0e42a29
Binary files /dev/null and b/static/testfiles/telegram_new.jpg differ
diff --git a/static/testfiles/telegram_no_standard_header.jpg b/static/testfiles/telegram_no_standard_header.jpg
new file mode 100644
index 0000000..7f47f42
Binary files /dev/null and b/static/testfiles/telegram_no_standard_header.jpg differ
diff --git a/website/static/website/style.css b/style.css
similarity index 100%
rename from website/static/website/style.css
rename to style.css
diff --git a/website/__init__.py b/website/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/website/admin.py b/website/admin.py
deleted file mode 100644
index 8c38f3f..0000000
--- a/website/admin.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib import admin
-
-# Register your models here.
diff --git a/website/migrations/__init__.py b/website/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/website/models.py b/website/models.py
deleted file mode 100644
index 71a8362..0000000
--- a/website/models.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.db import models
-
-# Create your models here.
diff --git a/website/static/website/example.py b/website/static/website/example.py
deleted file mode 100644
index cd900d8..0000000
--- a/website/static/website/example.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from telegram import Update
-from telegram.ext import Updater, CommandHandler, CallbackContext
-
-
-def hello(update: Update, context: CallbackContext) -> None:
- update.message.reply_text(f'Hello {update.effective_user.first_name}')
-
-
-updater = Updater('YOUR TOKEN HERE')
-
-updater.dispatcher.add_handler(CommandHandler('hello', hello))
-
-updater.start_polling()
-updater.idle()
diff --git a/website/static/website/furley_bg.png b/website/static/website/furley_bg.png
deleted file mode 100644
index a5e603e..0000000
Binary files a/website/static/website/furley_bg.png and /dev/null differ
diff --git a/website/templates/website/base.html b/website/templates/website/base.html
deleted file mode 100644
index f992070..0000000
--- a/website/templates/website/base.html
+++ /dev/null
@@ -1,87 +0,0 @@
-{% load sameastags %}
-
-
-
-
-
- python-telegram-bot{% block dashtitle %} - {% sameas title %}{% endblock %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- python-telegram-bot
- We have made you a wrapper you can't refuse
-
-
-
-
-
- Star
- Fork
-
-
-
-
-
- {% block content %}{% endblock %}
-
-
-
-
-
-
-
-
diff --git a/website/templates/website/index.html b/website/templates/website/index.html
index 0805d08..a052243 100644
--- a/website/templates/website/index.html
+++ b/website/templates/website/index.html
@@ -16,27 +16,26 @@ It's fun
from telegram import Update
-from telegram.ext import Updater, CommandHandler, CallbackContext
+from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
-def hello(update: Update, context: CallbackContext) -> None:
- update.message.reply_text(f'Hello {update.effective_user.first_name}')
+async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ await update.message.reply_text(f'Hello {update.effective_user.first_name}')
-updater = Updater('YOUR TOKEN HERE')
+app = ApplicationBuilder().token("YOUR TOKEN HERE").build()
-updater.dispatcher.add_handler(CommandHandler('hello', hello))
+app.add_handler(CommandHandler("hello", hello))
+
+app.run_polling()
+
-updater.start_polling()
-updater.idle()
-
-
Easy to setup
$ pip install python-telegram-bot
+
$ pip install python-telegram-bot --pre
$ python bot.py
And it is free
diff --git a/website/templates/website/sponsors.html b/website/templates/website/sponsors.html
deleted file mode 100644
index 060719f..0000000
--- a/website/templates/website/sponsors.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "website/base.html" %}
-{% load sameastags %}
-
-{% block title %}Sponsors{% endblock %}
-
-{% block content %}
-{% sameas title %}
-
-JetBrains
-
-JetBrains supports this project by providing PyCharm Professional licenses to the core developers under their
support program for Open Source projects.
-
-{% endblock %}
diff --git a/website/tests.py b/website/tests.py
deleted file mode 100644
index 7ce503c..0000000
--- a/website/tests.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
diff --git a/website/urls.py b/website/urls.py
deleted file mode 100644
index 0f1fa5c..0000000
--- a/website/urls.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.conf.urls import url
-
-from . import views
-
-urlpatterns = [
- url(r'^$', views.index, name='index'),
- url(r'^(?P[^/]*)/$', views.page, name='page'),
-]
diff --git a/website/views.py b/website/views.py
deleted file mode 100644
index d968420..0000000
--- a/website/views.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.shortcuts import render
-from django.http import HttpResponse
-
-
-def index(request):
- return render(request, 'website/index.html', {})
-
-def page(request, page):
- return render(request, 'website/%s.html' % page, {})