diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 316039ee5..514274e5f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,11 +8,10 @@ This is the repository and issue tracker for https://www.python.org website. If you're looking to file an issue with CPython itself, please go to -https://bugs.python.org +https://github.com/python/cpython/issues/new/choose Issues related to Python's documentation (https://docs.python.org) can -also be filed in https://bugs.python.org, by selecting the -"Documentation" component. +also be filed at https://github.com/python/cpython/issues/new?assignees=&labels=docs&template=documentation.md. --> **Is your feature request related to a problem? Please describe.** diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 16a63e27f..427010ca9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,3 +19,11 @@ updates: - dependency-name: lxml versions: - 4.6.2 +- package-ecosystem: github-actions + directory: "/" + groups: + github-actions: + patterns: + - "*" # Group all Actions updates into a single larger pull request + schedule: + interval: daily diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f34cc73bb..7d0becf27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,12 +16,24 @@ jobs: options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Check out repository - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + uses: actions/checkout@v4 + - name: Install platform dependencies + run: | + sudo apt -y update + sudo apt -y install --no-install-recommends \ + texlive-latex-base \ + texlive-latex-recommended \ + texlive-plain-generic \ + lmodern + - name: Install pandoc + run: | + wget https://github.com/jgm/pandoc/releases/download/2.17.1.1/pandoc-2.17.1.1-1-amd64.deb + sudo dpkg -i pandoc-2.17.1.1-1-amd64.deb + - uses: actions/setup-python@v5 with: python-version: 3.9.16 - name: Cache Python dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 env: cache-name: pythondotorg-cache-pip with: @@ -35,6 +47,11 @@ jobs: run: | pip install -U pip setuptools wheel pip install -r dev-requirements.txt + - name: Check for ungenerated database migrations + run: | + python manage.py makemigrations --check --dry-run + env: + DATABASE_URL: postgres://postgres:postgres@localhost:5432/pythonorg - name: Run Tests run: | python -Wd -m coverage run manage.py test -v2 diff --git a/.gitignore b/.gitignore index 60836490f..a9eca9d19 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ # $ git config --global core.excludesfile ~/.gitignore_global .sass-cache/ +docs/build media/* static-root/ static/stylesheets/mq.css @@ -25,3 +26,4 @@ __pycache__ .env .DS_Store .envrc +.state/ diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 000000000..ec9dc1ce9 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,15 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details +# Project page: https://readthedocs.org/projects/pythondotorg/ + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3" + + commands: + - python -m pip install -r docs-requirements.txt + - make -C docs html JOBS=$(nproc) BUILDDIR=_readthedocs + - mv docs/_readthedocs _readthedocs diff --git a/Aptfile b/Aptfile new file mode 100644 index 000000000..e69de29bb diff --git a/Dockerfile b/Dockerfile index 4d1046a98..a3c351f5e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,48 @@ -FROM python:3.9-bullseye +FROM python:3.9-bookworm ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 + +# By default, Docker has special steps to avoid keeping APT caches in the layers, which +# is good, but in our case, we're going to mount a special cache volume (kept between +# builds), so we WANT the cache to persist. +RUN set -eux; \ + rm -f /etc/apt/apt.conf.d/docker-clean; \ + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache; + +# Install System level build requirements, this is done before +# everything else because these are rarely ever going to change. +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + set -x \ + && apt-get update \ + && apt-get install --no-install-recommends -y \ + texlive-latex-base \ + texlive-latex-recommended \ + texlive-fonts-recommended \ + texlive-plain-generic \ + lmodern + +RUN case $(uname -m) in \ + "x86_64") ARCH=amd64 ;; \ + "aarch64") ARCH=arm64 ;; \ + esac \ + && wget --quiet https://github.com/jgm/pandoc/releases/download/2.17.1.1/pandoc-2.17.1.1-1-${ARCH}.deb \ + && dpkg -i pandoc-2.17.1.1-1-${ARCH}.deb + RUN mkdir /code WORKDIR /code + COPY dev-requirements.txt /code/ COPY base-requirements.txt /code/ -RUN pip install -r dev-requirements.txt +COPY prod-requirements.txt /code/ +COPY requirements.txt /code/ + +RUN pip --no-cache-dir --disable-pip-version-check install --upgrade pip setuptools wheel + +RUN --mount=type=cache,target=/root/.cache/pip \ + set -x \ + && pip --disable-pip-version-check \ + install \ + -r dev-requirements.txt + COPY . /code/ diff --git a/Dockerfile.cabotage b/Dockerfile.cabotage new file mode 100644 index 000000000..d96e002a7 --- /dev/null +++ b/Dockerfile.cabotage @@ -0,0 +1,49 @@ +FROM python:3.9-bullseye +COPY --from=ewdurbin/nginx-static:1.25.x /usr/bin/nginx /usr/bin/nginx +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 + +# By default, Docker has special steps to avoid keeping APT caches in the layers, which +# is good, but in our case, we're going to mount a special cache volume (kept between +# builds), so we WANT the cache to persist. +RUN set -eux; \ + rm -f /etc/apt/apt.conf.d/docker-clean; \ + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache; + +# Install System level build requirements, this is done before +# everything else because these are rarely ever going to change. +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + set -x \ + && apt-get update \ + && apt-get install --no-install-recommends -y \ + texlive-latex-base \ + texlive-latex-recommended \ + texlive-fonts-recommended \ + texlive-plain-generic \ + lmodern + +RUN case $(uname -m) in \ + "x86_64") ARCH=amd64 ;; \ + "aarch64") ARCH=arm64 ;; \ + esac \ + && wget --quiet https://github.com/jgm/pandoc/releases/download/2.17.1.1/pandoc-2.17.1.1-1-${ARCH}.deb \ + && dpkg -i pandoc-2.17.1.1-1-${ARCH}.deb + +RUN mkdir /code +WORKDIR /code + +COPY dev-requirements.txt /code/ +COPY base-requirements.txt /code/ +COPY prod-requirements.txt /code/ +COPY requirements.txt /code/ + +RUN pip --no-cache-dir --disable-pip-version-check install --upgrade pip setuptools wheel + +RUN --mount=type=cache,target=/root/.cache/pip \ + set -x \ + && pip --disable-pip-version-check \ + install \ + -r requirements.txt -r prod-requirements.txt +COPY . /code/ +RUN DJANGO_SETTINGS_MODULE=pydotorg.settings.static python manage.py collectstatic --noinput diff --git a/Makefile b/Makefile index 0b190f249..dc296feb4 100644 --- a/Makefile +++ b/Makefile @@ -50,3 +50,9 @@ shell: .state/db-initialized clean: docker-compose down -v rm -f .state/docker-build-web .state/db-initialized .state/db-migrated + +test: .state/db-initialized + docker-compose run --rm web ./manage.py test + +docker_shell: .state/db-initialized + docker-compose run --rm web /bin/bash diff --git a/Procfile b/Procfile index 651bc19b8..16deb5f5b 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,4 @@ release: python manage.py migrate --noinput web: bin/start-nginx gunicorn -c gunicorn.conf pydotorg.wsgi +worker: celery -A pydotorg worker -l INFO +worker-beat: celery -A pydotorg beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler diff --git a/README.md b/README.md index 97fa0341c..fc59b7cdf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # python.org -[![Build Status](https://travis-ci.org/python/pythondotorg.svg?branch=main)](https://travis-ci.org/python/pythondotorg) +[![CI](https://github.com/python/pythondotorg/actions/workflows/ci.yml/badge.svg)](https://github.com/python/pythondotorg/actions/workflows/ci.yml) [![Documentation Status](https://readthedocs.org/projects/pythondotorg/badge/?version=latest)](https://pythondotorg.readthedocs.io/?badge=latest) ### General information diff --git a/base-requirements.txt b/base-requirements.txt index da4a2b532..07f0f5a3f 100644 --- a/base-requirements.txt +++ b/base-requirements.txt @@ -1,25 +1,30 @@ dj-database-url==0.5.0 django-pipeline==2.0.6 -django-sitetree==1.17.0 -Django==2.2.24 +django-sitetree==1.18.0 +django-apptemplates==1.5 +django-admin-interface==0.24.2 +django-translation-aliases==0.1.0 +Django==2.2.28 docutils==0.12 Markdown==3.3.4 cmarkgfm==0.6.0 -Pillow==8.3.1 +Pillow==9.4.0 psycopg2-binary==2.8.6 python3-openid==3.2.0 python-decouple==3.4 # lxml used by BeautifulSoup. -lxml==4.6.3 +lxml==5.2.2 cssselect==1.1.0 feedparser==6.0.8 -beautifulsoup4==4.9.3 +beautifulsoup4==4.11.2 icalendar==4.0.7 chardet==4.0.0 +celery[redis]==5.3.6 +django-celery-beat==2.5.0 # TODO: We may drop 'django-imagekit' completely. django-imagekit==4.0.2 -django-haystack==3.0 -elasticsearch>=5,<6 +django-haystack==3.2.1 +elasticsearch>=7,<8 # TODO: 0.14.0 only supports Django 1.8 and 1.11. django-tastypie==0.14.3 @@ -32,7 +37,7 @@ django-honeypot==1.0.1 django-markupfield==2.0.0 django-markupfield-helpers==0.1.1 -django-allauth==0.41.0 +django-allauth==0.50.0 django-waffle==2.2.1 @@ -41,11 +46,12 @@ django-filter==2.4.0 django-ordered-model==3.4.3 django-widget-tweaks==1.4.8 django-countries==7.2.1 -xhtml2pdf==0.2.5 -django-easy-pdf3==0.1.2 num2words==0.5.10 django-polymorphic==3.0.0 sorl-thumbnail==12.7.0 -docxtpl==0.12.0 -reportlab==3.6.6 django-extensions==3.1.4 +django-import-export==2.7.1 + +pypandoc==1.12 +panflute==2.3.0 +Unidecode==1.3.8 diff --git a/bin/start-nginx b/bin/start-nginx new file mode 100755 index 000000000..6ffacb572 --- /dev/null +++ b/bin/start-nginx @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +psmgr=/tmp/nginx-buildpack-wait +rm -f $psmgr +mkfifo $psmgr + +n=1 +while getopts :f option ${@:1:2} +do + case "${option}" + in + f) FORCE=$OPTIND; n=$((n+1));; + esac +done + +# Initialize log directory. +mkdir -p /tmp/logs/nginx +touch /tmp/logs/nginx/access.log /tmp/logs/nginx/error.log +echo 'buildpack=nginx at=logs-initialized' + +# Start log redirection. +( + # Redirect nginx logs to stdout. + tail -qF -n 0 /tmp/logs/nginx/*.log + echo 'logs' >$psmgr +) & + +# Start App Server +( + # Take the command passed to this bin and start it. + # E.g. bin/start-nginx bundle exec unicorn -c config/unicorn.rb + COMMAND=${@:$n} + echo "buildpack=nginx at=start-app cmd=$COMMAND" + $COMMAND + echo 'app' >$psmgr +) & + +if [[ -z "$FORCE" ]] +then + FILE="/tmp/app-initialized" + + # We block on app-initialized so that when nginx binds to $PORT + # are app is ready for traffic. + while [[ ! -f "$FILE" ]] + do + echo 'buildpack=nginx at=app-initialization' + sleep 1 + done + echo 'buildpack=nginx at=app-initialized' +fi + +# Start nginx +( + # We expect nginx to run in foreground. + # We also expect a socket to be at /tmp/nginx.socket. + echo 'buildpack=nginx at=nginx-start' + cd /tmp + /usr/bin/nginx -p . -c /code/config/nginx.conf + echo 'nginx' >$psmgr +) & + +# This read will block the process waiting on a msg to be put into the fifo. +# If any of the processes defined above should exit, +# a msg will be put into the fifo causing the read operation +# to un-block. The process putting the msg into the fifo +# will use it's process name as a msg so that we can print the offending +# process to stdout. +read exit_process <$psmgr +echo "buildpack=nginx at=exit process=$exit_process" +exit 1 diff --git a/blogs/tests/test_views.py b/blogs/tests/test_views.py index ee7df723b..5c6c5053f 100644 --- a/blogs/tests/test_views.py +++ b/blogs/tests/test_views.py @@ -27,12 +27,3 @@ def test_blog_home(self): latest = BlogEntry.objects.latest() self.assertEqual(resp.context['latest_entry'], latest) - - def test_blog_redirects(self): - """ - Test that when '/blog/' is hit, it redirects '/blogs/' - """ - response = self.client.get('/blog/') - self.assertRedirects(response, - '/blogs/', - status_code=301) diff --git a/codesamples/factories.py b/codesamples/factories.py index 49a60730f..5a52b9738 100644 --- a/codesamples/factories.py +++ b/codesamples/factories.py @@ -27,11 +27,11 @@ def initial_data(): ( """\
# Simple output (with Unicode)
-            >>> print(\"Hello, I'm Python!\")
+            >>> print("Hello, I'm Python!")
             Hello, I'm Python!
 
             # Input, assignment
-            >>> name = input('What is your name?\\n')
+            >>> name = input('What is your name?\n')
             What is your name?
             Python
             >>> print(f'Hi, {name}.')
diff --git a/config/mime.types b/config/mime.types
new file mode 100644
index 000000000..8d37c8636
--- /dev/null
+++ b/config/mime.types
@@ -0,0 +1,98 @@
+types {
+    text/html                                        html htm shtml;
+    text/css                                         css;
+    text/xml                                         xml;
+    image/gif                                        gif;
+    image/jpeg                                       jpeg jpg;
+    application/javascript                           js;
+    application/atom+xml                             atom;
+    application/rss+xml                              rss;
+
+    text/mathml                                      mml;
+    text/plain                                       txt;
+    text/vnd.sun.j2me.app-descriptor                 jad;
+    text/vnd.wap.wml                                 wml;
+    text/x-component                                 htc;
+
+    image/avif                                       avif;
+    image/png                                        png;
+    image/svg+xml                                    svg svgz;
+    image/tiff                                       tif tiff;
+    image/vnd.wap.wbmp                               wbmp;
+    image/webp                                       webp;
+    image/x-icon                                     ico;
+    image/x-jng                                      jng;
+    image/x-ms-bmp                                   bmp;
+
+    font/woff                                        woff;
+    font/woff2                                       woff2;
+
+    application/java-archive                         jar war ear;
+    application/json                                 json;
+    application/mac-binhex40                         hqx;
+    application/msword                               doc;
+    application/pdf                                  pdf;
+    application/postscript                           ps eps ai;
+    application/rtf                                  rtf;
+    application/vnd.apple.mpegurl                    m3u8;
+    application/vnd.google-earth.kml+xml             kml;
+    application/vnd.google-earth.kmz                 kmz;
+    application/vnd.ms-excel                         xls;
+    application/vnd.ms-fontobject                    eot;
+    application/vnd.ms-powerpoint                    ppt;
+    application/vnd.oasis.opendocument.graphics      odg;
+    application/vnd.oasis.opendocument.presentation  odp;
+    application/vnd.oasis.opendocument.spreadsheet   ods;
+    application/vnd.oasis.opendocument.text          odt;
+    application/vnd.openxmlformats-officedocument.presentationml.presentation
+                                                     pptx;
+    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+                                                     xlsx;
+    application/vnd.openxmlformats-officedocument.wordprocessingml.document
+                                                     docx;
+    application/vnd.wap.wmlc                         wmlc;
+    application/wasm                                 wasm;
+    application/x-7z-compressed                      7z;
+    application/x-cocoa                              cco;
+    application/x-java-archive-diff                  jardiff;
+    application/x-java-jnlp-file                     jnlp;
+    application/x-makeself                           run;
+    application/x-perl                               pl pm;
+    application/x-pilot                              prc pdb;
+    application/x-rar-compressed                     rar;
+    application/x-redhat-package-manager             rpm;
+    application/x-sea                                sea;
+    application/x-shockwave-flash                    swf;
+    application/x-stuffit                            sit;
+    application/x-tcl                                tcl tk;
+    application/x-x509-ca-cert                       der pem crt;
+    application/x-xpinstall                          xpi;
+    application/xhtml+xml                            xhtml;
+    application/xspf+xml                             xspf;
+    application/zip                                  zip;
+
+    application/octet-stream                         bin exe dll;
+    application/octet-stream                         deb;
+    application/octet-stream                         dmg;
+    application/octet-stream                         iso img;
+    application/octet-stream                         msi msp msm;
+
+    audio/midi                                       mid midi kar;
+    audio/mpeg                                       mp3;
+    audio/ogg                                        ogg;
+    audio/x-m4a                                      m4a;
+    audio/x-realaudio                                ra;
+
+    video/3gpp                                       3gpp 3gp;
+    video/mp2t                                       ts;
+    video/mp4                                        mp4;
+    video/mpeg                                       mpeg mpg;
+    video/quicktime                                  mov;
+    video/webm                                       webm;
+    video/x-flv                                      flv;
+    video/x-m4v                                      m4v;
+    video/x-mng                                      mng;
+    video/x-ms-asf                                   asx asf;
+    video/x-ms-wmv                                   wmv;
+    video/x-msvideo                                  avi;
+}
diff --git a/config/nginx.conf.erb b/config/nginx.conf
similarity index 82%
rename from config/nginx.conf.erb
rename to config/nginx.conf
index 527fdc0df..420fcd8af 100644
--- a/config/nginx.conf.erb
+++ b/config/nginx.conf
@@ -1,6 +1,5 @@
 daemon off;
-#Heroku dynos have at least 4 cores.
-worker_processes <%= ENV['NGINX_WORKERS'] || 4 %>;
+worker_processes 2;
 
 events {
 	use epoll;
@@ -15,9 +14,8 @@ http {
 
 	server_tokens off;
 
-	log_format l2met 'measure#nginx.service=$request_time request_id=$http_x_request_id';
-	access_log logs/nginx/access.log l2met;
-	error_log logs/nginx/error.log;
+	access_log /tmp/logs/nginx/access.log;
+	error_log /tmp/logs/nginx/error.log;
 
 	include mime.types;
 	default_type application/octet-stream;
@@ -29,11 +27,11 @@ http {
         client_max_body_size 32m;
 
 	upstream app_server {
-		server unix:/tmp/nginx.socket fail_timeout=0;
+		server unix:/var/run/cabotage/nginx.sock fail_timeout=0;
  	}
 
 	server {
-		listen <%= ENV["PORT"] %>;
+		listen unix:/var/run/cabotage/cabotage.sock;
 		server_name _;
 		keepalive_timeout 5;
 
@@ -52,10 +50,6 @@ http {
                   return 301 http://www.python.org/psf;
                 }
 
-                location /psf/codeofconduct {
-                  return 301 /psf/conduct;
-                }
-
                 location /topics/xml {
                   return 301 http://pyxml.sourceforge.net/topics;
                 }
@@ -84,6 +78,10 @@ http {
                   return 301 https://www.python.org/psf;
                 }
 
+                location ~ ^/community-landing/?(.*)$ {
+                  return 301 https://www.python.org/community/;
+                }
+
                 location /doc/Summary {
                   return 301 http://legacy.python.org/doc/intros/summary;
                 }
@@ -204,6 +202,22 @@ http {
                   return 301 https://www.python.org/download/windows/;
                 }
 
+                location ~ ^/download/$ {
+                  return 301 https://www.python.org/downloads/;
+                }
+
+                location ~ ^/download/source/$ {
+                  return 301 https://www.python.org/downloads/source/;
+                }
+
+                location ~ ^/download/mac/$ {
+                  return 301 https://www.python.org/downloads/macos/;
+                }
+
+                location ~ ^/download/windows/$ {
+                  return 301 https://www.python.org/downloads/windows/;
+                }
+
                 location /Mirrors.html {
                   return 301 https://www.python.org/mirrors/;
                 }
@@ -292,18 +306,38 @@ http {
                   return 302 /blogs/;
                 }
 
+                location /blog/ {
+                  return 301 https://python.org/blogs/;
+                }
+
+                location ~ ^/psf/archive/codeofconduct/?$ {
+                    return 302 https://policies.python.org/python.org/code-of-conduct/;
+                }
+                location ~ ^/psf/codeofconduct/?$ {
+                    return 302 https://policies.python.org/python.org/code-of-conduct/;
+                }
+                location ~ ^/psf/conduct/?$ {
+                    return 302 https://policies.python.org/python.org/code-of-conduct/;
+                }
+                location ~ ^/psf/conduct/enforcement/?$ {
+                    return 302 https://policies.python.org/python.org/code-of-conduct/Enforcement-Procedures/;
+                }
+                location ~ ^/psf/conduct/reporting/?$ {
+                    return 302 https://policies.python.org/python.org/code-of-conduct/Procedures-for-Reporting-Incidents/;
+                }
+
                 location /static/ {
-                    alias /app/static-root/;
+                    alias /code/static-root/;
                     add_header Cache-Control "max-age=604800, public";  # 604800 is 7 days
                 }
 
                 location /images/ {
-                    alias /app/static-root/images/;
+                    alias /code/static-root/images/;
                     add_header Cache-Control "max-age=604800, public";  # 604800 is 7 days
                 }
 
                 location /favicon.ico {
-                    alias /app/static-root/favicon.ico;
+                    alias /code/static-root/favicon.ico;
                     add_header Cache-Control "max-age=604800, public";  # 604800 is 7 days
                 }
 
diff --git a/custom_storages/__init__.py b/custom_storages/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/custom_storages.py b/custom_storages/storages.py
similarity index 97%
rename from custom_storages.py
rename to custom_storages/storages.py
index e702c38d8..c735fd530 100644
--- a/custom_storages.py
+++ b/custom_storages/storages.py
@@ -29,13 +29,16 @@ def get_comment_blocks(self, content):
         """
         return [
             (match.start(), match.end())
-            for match in re.finditer(r"\/\*.*?\*\/", content, flags=re.DOTALL)
+            for match in re.finditer(r'\/\*.*?\*\/', content, flags=re.DOTALL)
         ]
 
-    def url_converter(self, name, hashed_files, template=None, comment_blocks=[]):
+    def url_converter(self, name, hashed_files, template=None, comment_blocks=None):
         """
         Return the custom URL converter for the given file name.
         """
+        if comment_blocks is None:
+            comment_blocks = []
+
         if template is None:
             template = self.default_template
 
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 9b5e0938f..8d61d0f9d 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -2,7 +2,7 @@
 
 # Required for running tests
 
-factory-boy==3.1.0
+factory-boy==3.2.1
 Faker==0.8.1
 tblib==1.7.0
 responses==0.13.3
diff --git a/docker-compose.yml b/docker-compose.yml
index 22221629c..2e5f8bf16 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -14,8 +14,17 @@ services:
       test: ["CMD", "pg_isready", "-U", "pythondotorg", "-d", "pythondotorg"]
       interval: 1s
 
+  redis:
+    image: redis:7-bullseye
+    ports:
+      - "6379:6379"
+    healthcheck:
+     test: ["CMD", "redis-cli","ping"]
+     interval: 1s
+
   web:
     build: .
+    image: pythondotorg:docker-compose
     command: python manage.py runserver 0.0.0.0:8000
     volumes:
       - .:/code
@@ -27,3 +36,19 @@ services:
     depends_on:
       postgres:
         condition: service_healthy
+      redis:
+        condition: service_healthy
+
+  worker:
+    image: pythondotorg:docker-compose
+    command: celery -A pydotorg worker -B -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
+    volumes:
+      - .:/code
+    environment:
+      DATABASE_URL: postgresql://pythondotorg:pythondotorg@postgres:5432/pythondotorg
+      DJANGO_SETTINGS_MODULE: pydotorg.settings.local
+    depends_on:
+      postgres:
+        condition: service_healthy
+      redis:
+        condition: service_healthy
diff --git a/docs/source/administration.rst b/docs/source/administration.rst
index 3000ff692..872222055 100644
--- a/docs/source/administration.rst
+++ b/docs/source/administration.rst
@@ -6,7 +6,7 @@ Administration
 Navigation
 ----------
 
-Navigation on the site is managed by the `Sitetree  `_ application.  The hierarchy should be fairly obvious.  The biggest gotcha is when defining the URLs.
+Navigation on the site is managed by the `Sitetree  `_ application.  The hierarchy should be fairly obvious.  The biggest gotcha is when defining the URLs.
 
 Many URLs are defined using `Django's URL system `_ however many are also simply defined as relative paths.  When editing a particular item in the Sitetree in the *Additional Settings* fieldset there is an option named *URL as pattern*.  If this option is checked the URL pattern is checked against the URLs defined by the Django applications. If it is left unchecked relative and absolute URLs can be entered.
 
diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst
index 66a4d0553..8b0cbd5e0 100644
--- a/docs/source/contributing.rst
+++ b/docs/source/contributing.rst
@@ -11,7 +11,7 @@ already submitted it.
 Code
 ----
 
-The source for python.org is open and licensed under the `Apache 2 license `_.
+The source for python.org is open and licensed under the `Apache 2 license `_.
 To contribute to either the code or documentation please fork the pythondotorg_
 repository and submit a pull request.
 
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 6de5d915b..76a201828 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -12,9 +12,9 @@ General information
 :IRC: ``#pydotorg`` on Freenode
 :Staging site: https://staging.python.org/ (``main`` branch)
 :Production configuration: https://github.com/python/psf-salt
-:Travis:
-  .. image:: https://travis-ci.org/python/pythondotorg.svg?branch=main
-       :target: https://travis-ci.org/python/pythondotorg
+:GitHub Actions:
+  .. image:: https://github.com/python/pythondotorg/actions/workflows/ci.yml/badge.svg
+       :target: https://github.com/python/pythondotorg/actions/workflows/ci.yml
 :License: Apache License
 
 Contents:
diff --git a/docs/source/install.md b/docs/source/install.md
index 5639e144d..d6c29d295 100644
--- a/docs/source/install.md
+++ b/docs/source/install.md
@@ -12,13 +12,13 @@ Docker Compose will be installed by [Docker Mac](https://docs.docker.com/desktop
 Getting started
 ---------------
 
-To get the Pythondotorg source code, [fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the repository on [GitHub](https://github.com/python/pythondotorg) and [clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) it to your local machine: 
+To get the Pythondotorg source code, [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) the repository on [GitHub](https://github.com/python/pythondotorg) and [clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) it to your local machine: 
 
 ```
 git clone git@github.com:YOUR-USERNAME/pythondotorg.git
 ```
 
-Add a [remote](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-for-a-fork) and [sync](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) regularly to stay current with the repository. 
+Add a [remote](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-repository-for-a-fork) and [sync](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) regularly to stay current with the repository. 
 
 ```
 git remote add upstream https://github.com/python/pythondotorg
@@ -33,7 +33,7 @@ Installing Docker
 Install [Docker Engine](https://docs.docker.com/engine/install/) 
 
 ```{note}
-The best experience for building Pythondotorg on Windows is to use the [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/)(WSL) in combination with both [Docker for Windows](https://docs.docker.com/desktop/install/windows-install/) and [Docker for Linux](https://docs.docker.com/engine/install/).
+The best experience for building Pythondotorg on Windows is to use the [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/)(WSL) in combination with both [Docker for Windows](https://docs.docker.com/desktop/install/windows-install/) and [Docker for Linux](https://docs.docker.com/engine/install/).
 ```
 
 Verify that the Docker installation is successful by running: `docker -v`
@@ -197,7 +197,7 @@ Once you have it installed, update the URL value of `HAYSTACK_CONNECTIONS` set
 Generating CSS files automatically
 ----------------------------------
 
-Due to performance issues of [django-pipeline](https://github.com/cyberdelia/django-pipeline/issues/313), we are using a dummy compiler `pydotorg.compilers.DummySASSCompiler` in development mode. To generate CSS files, use `sass` itself in a separate terminal window:
+Due to performance issues of [django-pipeline](https://github.com/jazzband/django-pipeline/issues/313), we are using a dummy compiler `pydotorg.compilers.DummySASSCompiler` in development mode. To generate CSS files, use `sass` itself in a separate terminal window:
 
 ```
 $ cd static
diff --git a/docs/source/pep_generation.rst b/docs/source/pep_generation.rst
index 3ea1bb363..dd68649af 100644
--- a/docs/source/pep_generation.rst
+++ b/docs/source/pep_generation.rst
@@ -31,4 +31,4 @@ This process runs periodically via cron to keep the PEP pages up to date.
    
 See :ref:`management-commands` for all management commands.
 
-.. _PEP Repository: https://github.com/python/peps.git
\ No newline at end of file
+.. _PEP Repository: https://github.com/python/peps
diff --git a/downloads/api.py b/downloads/api.py
index bb49e588e..73eb9b7bf 100644
--- a/downloads/api.py
+++ b/downloads/api.py
@@ -69,7 +69,7 @@ class Meta(GenericResource.Meta):
             'creator', 'last_modified_by',
             'os', 'release', 'description', 'is_source', 'url', 'gpg_signature_file',
             'md5_sum', 'filesize', 'download_button', 'sigstore_signature_file',
-            'sigstore_cert_file',
+            'sigstore_cert_file', 'sigstore_bundle_file', 'sbom_spdx2_file',
         ]
         filtering = {
             'name': ('exact',),
diff --git a/downloads/migrations/0009_releasefile_sigstore_bundle_file.py b/downloads/migrations/0009_releasefile_sigstore_bundle_file.py
new file mode 100644
index 000000000..52383852c
--- /dev/null
+++ b/downloads/migrations/0009_releasefile_sigstore_bundle_file.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.24 on 2023-02-14 21:14
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('downloads', '0008_auto_20220907_2102'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='releasefile',
+            name='sigstore_bundle_file',
+            field=models.URLField(blank=True, help_text='Sigstore Bundle URL', verbose_name='Sigstore Bundle URL'),
+        ),
+    ]
diff --git a/downloads/migrations/0010_releasefile_sbom_spdx2_file.py b/downloads/migrations/0010_releasefile_sbom_spdx2_file.py
new file mode 100644
index 000000000..f3a4784e9
--- /dev/null
+++ b/downloads/migrations/0010_releasefile_sbom_spdx2_file.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.24 on 2024-01-12 21:04
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('downloads', '0009_releasefile_sigstore_bundle_file'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='releasefile',
+            name='sbom_spdx2_file',
+            field=models.URLField(blank=True, help_text='SPDX-2 SBOM URL', verbose_name='SPDX-2 SBOM URL'),
+        ),
+    ]
diff --git a/downloads/models.py b/downloads/models.py
index 7955f58f5..4a9c5781c 100644
--- a/downloads/models.py
+++ b/downloads/models.py
@@ -329,6 +329,12 @@ class ReleaseFile(ContentManageable, NameSlugModel):
     sigstore_cert_file = models.URLField(
         "Sigstore Cert URL", blank=True, help_text="Sigstore Cert URL"
     )
+    sigstore_bundle_file = models.URLField(
+        "Sigstore Bundle URL", blank=True, help_text="Sigstore Bundle URL"
+    )
+    sbom_spdx2_file = models.URLField(
+        "SPDX-2 SBOM URL", blank=True, help_text="SPDX-2 SBOM URL"
+    )
     md5_sum = models.CharField('MD5 Sum', max_length=200, blank=True)
     filesize = models.IntegerField(default=0)
     download_button = models.BooleanField(default=False, help_text="Use for the supernav download button for this OS")
diff --git a/downloads/search_indexes.py b/downloads/search_indexes.py
index 307841283..7d476fb33 100644
--- a/downloads/search_indexes.py
+++ b/downloads/search_indexes.py
@@ -13,7 +13,6 @@ class ReleaseIndex(indexes.SearchIndex, indexes.Indexable):
     name = indexes.CharField(model_attr='name')
     description = indexes.CharField()
     path = indexes.CharField()
-    version = indexes.CharField(model_attr='version')
     release_notes_url = indexes.CharField(model_attr='release_notes_url')
     release_date = indexes.DateTimeField(model_attr='release_date')
 
diff --git a/downloads/serializers.py b/downloads/serializers.py
index f30974e02..1ff57049f 100644
--- a/downloads/serializers.py
+++ b/downloads/serializers.py
@@ -48,4 +48,6 @@ class Meta:
             'resource_uri',
             'sigstore_signature_file',
             'sigstore_cert_file',
+            'sigstore_bundle_file',
+            'sbom_spdx2_file',
         )
diff --git a/downloads/templatetags/download_tags.py b/downloads/templatetags/download_tags.py
index a6df103e9..c72f6d58c 100644
--- a/downloads/templatetags/download_tags.py
+++ b/downloads/templatetags/download_tags.py
@@ -10,4 +10,46 @@ def strip_minor_version(version):
 
 @register.filter
 def has_sigstore_materials(files):
-    return any(f.sigstore_cert_file or f.sigstore_signature_file for f in files)
+    return any(
+        f.sigstore_bundle_file or f.sigstore_cert_file or f.sigstore_signature_file
+        for f in files
+    )
+
+
+@register.filter
+def has_sbom(files):
+    return any(f.sbom_spdx2_file for f in files)
+
+
+@register.filter
+def sort_windows(files):
+    if not files:
+        return files
+
+    # Put Windows files in preferred order
+    files = list(files)
+    windows_files = []
+    other_files = []
+    for preferred in (
+        'Windows installer (64-bit)',
+        'Windows installer (32-bit)',
+        'Windows installer (ARM64)',
+        'Windows help file',
+        'Windows embeddable package (64-bit)',
+        'Windows embeddable package (32-bit)',
+        'Windows embeddable package (ARM64)',
+    ):
+        for file in files:
+            if file.name == preferred:
+                windows_files.append(file)
+                files.remove(file)
+                break
+
+    # Then append any remaining Windows files
+    for file in files:
+        if file.name.startswith('Windows'):
+            windows_files.append(file)
+        else:
+            other_files.append(file)
+
+    return other_files + windows_files
diff --git a/downloads/tests/base.py b/downloads/tests/base.py
index e19ffe03a..bcb7905c4 100644
--- a/downloads/tests/base.py
+++ b/downloads/tests/base.py
@@ -64,6 +64,7 @@ def setUp(self):
             is_source=True,
             description='Gzipped source',
             url='ftp/python/2.7.5/Python-2.7.5.tgz',
+            filesize=12345678,
         )
 
         self.draft_release = Release.objects.create(
diff --git a/downloads/tests/test_views.py b/downloads/tests/test_views.py
index 75fe76693..50270c556 100644
--- a/downloads/tests/test_views.py
+++ b/downloads/tests/test_views.py
@@ -40,6 +40,9 @@ def test_download_release_detail(self):
         response = self.client.get(url)
         self.assertEqual(response.status_code, 200)
 
+        with self.subTest("Release file sizes should be human-readable"):
+            self.assertInHTML("11.8 MB", response.content.decode())
+
         url = reverse('download:download_release_detail', kwargs={'release_slug': 'fake_slug'})
         response = self.client.get(url)
         self.assertEqual(response.status_code, 404)
diff --git a/events/importer.py b/events/importer.py
index 847394fa0..fa303184b 100644
--- a/events/importer.py
+++ b/events/importer.py
@@ -1,3 +1,5 @@
+import logging
+
 from datetime import timedelta
 from icalendar import Calendar as ICalendar
 import requests
@@ -8,6 +10,8 @@
 DATE_RESOLUTION = timedelta(1)
 TIME_RESOLUTION = timedelta(0, 0, 1)
 
+logger = logging.getLogger(__name__)
+
 
 class ICSImporter:
     def __init__(self, calendar):
@@ -37,7 +41,7 @@ def import_occurrence(self, event, event_data):
     def import_event(self, event_data):
         uid = event_data['UID']
         title = event_data['SUMMARY']
-        description = event_data['DESCRIPTION']
+        description = event_data.get('DESCRIPTION', '')
         location, _ = EventLocation.objects.get_or_create(
             calendar=self.calendar,
             name=event_data['LOCATION']
@@ -69,4 +73,7 @@ def get_events(self, ical):
     def import_events_from_text(self, ical):
         events = self.get_events(ical)
         for event in events:
-            self.import_event(event)
+            try:
+                self.import_event(event)
+            except Exception as exc:
+                logger.exception(event)
diff --git a/events/models.py b/events/models.py
index 3334ca326..4b8528e13 100644
--- a/events/models.py
+++ b/events/models.py
@@ -181,6 +181,20 @@ def next_time(self):
         except IndexError:
             return None
 
+    def is_scheduled_to_start_this_year(self) -> bool:
+        if self.next_time:
+            current_year: int = datetime.datetime.now().year
+            if self.next_time.dt_start.year == current_year:
+                return True
+        return False
+
+    def is_scheduled_to_end_this_year(self) -> bool:
+        if self.next_time:
+            current_year: int = datetime.datetime.now().year
+            if self.next_time.dt_end.year == current_year:
+                return True
+        return False
+
     @property
     def previous_time(self):
         now = timezone.now()
diff --git a/events/tests/test_models.py b/events/tests/test_models.py
index 0f3bafe76..b6d2e7ef3 100644
--- a/events/tests/test_models.py
+++ b/events/tests/test_models.py
@@ -62,7 +62,6 @@ def test_recurring_event(self):
         self.assertEqual(self.event.next_time.dt_start, recurring_time_dtstart)
         self.assertTrue(rt.valid_dt_end())
 
-
         rt.begin = now - datetime.timedelta(days=5)
         rt.finish = now - datetime.timedelta(days=3)
         rt.save()
@@ -186,3 +185,25 @@ def test_event_previous_event(self):
         # 'Event.previous_event' can return None if there is no
         # OccurringRule or RecurringRule found.
         self.assertIsNone(self.event.previous_event)
+
+    def test_scheduled_to_start_this_year_method(self):
+        now = seconds_resolution(timezone.now())
+
+        occurring_time_dtstart = now + datetime.timedelta(days=3)
+        OccurringRule.objects.create(
+            event=self.event,
+            dt_start=occurring_time_dtstart,
+            dt_end=occurring_time_dtstart
+        )
+        self.assertTrue(self.event.is_scheduled_to_start_this_year())
+
+    def test_scheduled_to_end_this_year_method(self):
+        now = seconds_resolution(timezone.now())
+
+        occurring_time_dtstart = now + datetime.timedelta(days=3)
+        OccurringRule.objects.create(
+            event=self.event,
+            dt_start=occurring_time_dtstart,
+            dt_end=occurring_time_dtstart
+        )
+        self.assertTrue(self.event.is_scheduled_to_end_this_year())
diff --git a/events/tests/test_views.py b/events/tests/test_views.py
index 691817036..7fb4f1b16 100644
--- a/events/tests/test_views.py
+++ b/events/tests/test_views.py
@@ -6,7 +6,7 @@
 from django.test import TestCase
 from django.utils import timezone
 
-from ..models import Calendar, Event, EventCategory, EventLocation, RecurringRule
+from ..models import Calendar, Event, EventCategory, EventLocation, RecurringRule, OccurringRule
 from ..templatetags.events import get_events_upcoming
 from users.factories import UserFactory
 
@@ -18,6 +18,11 @@ def setUpTestData(cls):
         cls.calendar = Calendar.objects.create(creator=cls.user, slug="test-calendar")
         cls.event = Event.objects.create(creator=cls.user, calendar=cls.calendar)
         cls.event_past = Event.objects.create(title='Past Event', creator=cls.user, calendar=cls.calendar)
+        cls.event_single_day = Event.objects.create(title="Single Day Event", creator=cls.user, calendar=cls.calendar)
+        cls.event_starts_at_future_year = Event.objects.create(title='Event Starts Following Year',
+                                                               creator=cls.user, calendar=cls.calendar)
+        cls.event_ends_at_future_year = Event.objects.create(title='Event Ends Following Year',
+                                                             creator=cls.user, calendar=cls.calendar)
 
         cls.now = timezone.now()
 
@@ -34,12 +39,32 @@ def setUpTestData(cls):
             begin=cls.now - datetime.timedelta(days=2),
             finish=cls.now - datetime.timedelta(days=1),
         )
+        cls.rule_single_day = OccurringRule.objects.create(
+            event=cls.event_single_day,
+            dt_start=recurring_time_dtstart,
+            dt_end=recurring_time_dtstart
+        )
+        cls.rule_future_start_year = OccurringRule.objects.create(
+            event=cls.event_starts_at_future_year,
+            dt_start=recurring_time_dtstart + datetime.timedelta(weeks=52),
+            dt_end=recurring_time_dtstart + datetime.timedelta(weeks=53),
+        )
+        cls.rule_future_end_year = OccurringRule.objects.create(
+            event=cls.event_ends_at_future_year,
+            dt_start=recurring_time_dtstart,
+            dt_end=recurring_time_dtend + datetime.timedelta(weeks=52)
+        )
+
+    def tearDown(self) -> None:
+        from django.core.cache import cache
+        cache.clear()
 
     def test_events_homepage(self):
         url = reverse('events:events')
         response = self.client.get(url)
         self.assertEqual(response.status_code, 200)
-        self.assertEqual(len(response.context['object_list']), 1)
+        self.assertEqual(len(response.context['object_list']), 4)
+        self.assertIn(Event.objects.last().title, response.content.decode())
 
     def test_calendar_list(self):
         calendars_count = Calendar.objects.count()
@@ -54,7 +79,7 @@ def test_event_list(self):
         response = self.client.get(url)
 
         self.assertEqual(response.status_code, 200)
-        self.assertEqual(len(response.context['object_list']), 1)
+        self.assertEqual(len(response.context['object_list']), 4)
 
         url = reverse('events:event_list_past', kwargs={"calendar_slug": 'unexisting'})
         response = self.client.get(url)
@@ -114,7 +139,7 @@ def test_event_list_date(self):
         response = self.client.get(url)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.context['object'], dt.date())
-        self.assertEqual(len(response.context['object_list']), 2)
+        self.assertEqual(len(response.context['object_list']), 5)
 
     def test_eventlocation_list(self):
         venue = EventLocation.objects.create(
@@ -150,13 +175,39 @@ def test_event_detail(self):
         self.assertEqual(self.event, response.context['object'])
 
     def test_upcoming_tag(self):
-        self.assertEqual(len(get_events_upcoming()), 1)
+        self.assertEqual(len(get_events_upcoming()), 4)
         self.assertEqual(len(get_events_upcoming(only_featured=True)), 0)
         self.rule.begin = self.now - datetime.timedelta(days=3)
         self.rule.finish = self.now - datetime.timedelta(days=2)
         self.rule.save()
-        self.assertEqual(len(get_events_upcoming()), 0)
+        self.assertEqual(len(get_events_upcoming()), 3)
 
+    def test_event_starting_future_year_displays_relevant_year(self):
+        event = self.event_starts_at_future_year
+        url = reverse('events:events')
+        response = self.client.get(url)
+        self.assertIn(
+            f'',
+            response.content.decode()
+        )
+
+    def test_event_ending_future_year_displays_relevant_year(self):
+        event = self.event_ends_at_future_year
+        url = reverse('events:events')
+        response = self.client.get(url)
+        self.assertIn(
+            f'',
+            response.content.decode()
+        )
+
+    def test_events_scheduled_current_year_does_not_display_current_year(self):
+        event = self.event_single_day
+        url = reverse('events:events')
+        response = self.client.get(url)
+        self.assertIn(  # start date
+            f'',
+            response.content.decode()
+        )
 
 class EventSubmitTests(TestCase):
     event_submit_url = reverse_lazy('events:event_submit')
diff --git a/fixtures/boxes.json b/fixtures/boxes.json
index f7dbeb15e..bc3816cc7 100644
--- a/fixtures/boxes.json
+++ b/fixtures/boxes.json
@@ -174,9 +174,9 @@
       "created": "2013-10-28T19:27:20.963Z",
       "updated": "2022-01-05T15:42:59.645Z",
       "label": "widget-use-python-for",
-      "content": "

Use Python for…

\r\n

More

\r\n\r\n", + "content": "

Use Python for…

\r\n

More

\r\n\r\n", "content_markup_type": "html", - "_content_rendered": "

Use Python for…

\r\n

More

\r\n\r\n" + "_content_rendered": "

Use Python for…

\r\n

More

\r\n\r\n" } }, { @@ -654,9 +654,9 @@ "created": "2014-11-13T21:49:22.048Z", "updated": "2021-07-29T21:40:21.030Z", "label": "download-dev", - "content": "

Information about specific ports, and developer info

\r\n\r\n", + "content": "

Information about specific ports, and developer info

\r\n\r\n", "content_markup_type": "html", - "_content_rendered": "

Information about specific ports, and developer info

\r\n\r\n" + "_content_rendered": "

Information about specific ports, and developer info

\r\n\r\n" } }, { diff --git a/fixtures/sitetree_menus.json b/fixtures/sitetree_menus.json index 85fb6b6b0..f394233ee 100644 --- a/fixtures/sitetree_menus.json +++ b/fixtures/sitetree_menus.json @@ -685,7 +685,7 @@ "fields": { "title": "PEP Index", "hint": "", - "url": "http://python.org/dev/peps/", + "url": "https://peps.python.org", "urlaspattern": false, "tree": 1, "hidden": false, @@ -2557,7 +2557,7 @@ "fields": { "title": "PSF Sponsors", "hint": "", - "url": "/psf/sponsorship/sponsors/", + "url": "/psf/sponsors/", "urlaspattern": false, "tree": 1, "hidden": false, diff --git a/gunicorn.conf b/gunicorn.conf index a68960607..74207d515 100644 --- a/gunicorn.conf +++ b/gunicorn.conf @@ -1,4 +1,4 @@ -bind = 'unix:/tmp/nginx.socket' +bind = 'unix:/var/run/cabotage/nginx.sock' backlog = 1024 preload_app = True max_requests = 2048 diff --git a/pages/migrations/0003_auto_20230214_2113.py b/pages/migrations/0003_auto_20230214_2113.py new file mode 100644 index 000000000..af666269f --- /dev/null +++ b/pages/migrations/0003_auto_20230214_2113.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2023-02-14 21:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pages', '0002_auto_20150416_1853'), + ] + + operations = [ + migrations.AlterField( + model_name='page', + name='content_markup_type', + field=models.CharField(choices=[('', '--'), ('html', 'HTML'), ('plain', 'Plain'), ('markdown', 'Markdown'), ('restructuredtext', 'Restructured Text'), ('markdown_unsafe', 'Markdown (unsafe)')], default='restructuredtext', max_length=30), + ), + ] diff --git a/prod-requirements.txt b/prod-requirements.txt index fab65a339..a99aad083 100644 --- a/prod-requirements.txt +++ b/prod-requirements.txt @@ -1,8 +1,8 @@ -gunicorn==19.9.0 +gunicorn==22.0.0 raven==6.10.0 # Heroku -Whitenoise -django-storages -boto3 +Whitenoise==6.0.0 # 6.0.0 is latest version that supports Django 2.2 +django-storages==1.12.3 # 1.12.3 is latest version that supports Django 2.2 +boto3==1.26.165 diff --git a/pydotorg/__init__.py b/pydotorg/__init__.py index e69de29bb..3307b5134 100644 --- a/pydotorg/__init__.py +++ b/pydotorg/__init__.py @@ -0,0 +1,3 @@ +from pydotorg.celery import app as celery_app + +__all__ = ("celery_app",) diff --git a/pydotorg/celery.py b/pydotorg/celery.py new file mode 100644 index 000000000..51062cf9b --- /dev/null +++ b/pydotorg/celery.py @@ -0,0 +1,15 @@ +import os + +from celery import Celery +from django.core import management + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pydotorg.settings.local") + +app = Celery("pydotorg") +app.config_from_object("django.conf:settings", namespace="CELERY") + +@app.task(bind=True) +def run_management_command(self, command_name, args, kwargs): + management.call_command(command_name, *args, **kwargs) + +app.autodiscover_tasks() diff --git a/pydotorg/context_processors.py b/pydotorg/context_processors.py index 1c11341fd..461cbcb31 100644 --- a/pydotorg/context_processors.py +++ b/pydotorg/context_processors.py @@ -64,12 +64,12 @@ def user_nav_bar_links(request): if request.user.has_membership: nav["psf_membership"]['urls'].append({ "url": reverse("users:user_membership_edit"), - "label": "Edit PSF membership" + "label": "Edit PSF Basic membership" }) else: nav["psf_membership"]['urls'].append({ "url": reverse("users:user_membership_create"), - "label": "Become a PSF member" + "label": "Become a PSF Basic member" }) return {"USER_NAV_BAR": nav} diff --git a/pydotorg/settings/base.py b/pydotorg/settings/base.py index 702eaa364..a602dff7e 100644 --- a/pydotorg/settings/base.py +++ b/pydotorg/settings/base.py @@ -31,6 +31,23 @@ ) } +# celery settings +_REDIS_URL = config("REDIS_URL", default="redis://redis:6379/0") + +CELERY_BROKER_URL = _REDIS_URL +CELERY_RESULT_BACKEND = _REDIS_URL + +CELERY_BEAT_SCHEDULE = { + # "example-management-command": { + # "task": "pydotorg.celery.run_management_command", + # "schedule": crontab(hour=12, minute=0), + # "args": ("daily_volunteer_reminder", [], {}), + # }, + # 'example-task': { + # 'task': 'users.tasks.example_task', + # }, +} + ### Locale settings TIME_ZONE = 'UTC' @@ -45,6 +62,7 @@ MEDIA_ROOT = os.path.join(BASE, 'media') MEDIA_URL = '/media/' +MEDIAFILES_LOCATION = 'media' # Absolute path to the directory static files should be collected to. # Don't put anything in this directory yourself; store your static files @@ -94,8 +112,12 @@ 'DIRS': [ TEMPLATES_DIR, ], - 'APP_DIRS': True, 'OPTIONS': { + 'loaders': [ + 'apptemplates.Loader', + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', + ], 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.i18n', @@ -151,10 +173,15 @@ 'django.contrib.redirects', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.humanize', + + 'admin_interface', + 'colorfield', 'django.contrib.admin', 'django.contrib.admindocs', - 'django.contrib.humanize', + 'django_celery_beat', + 'django_translation_aliases', 'pipeline', 'sitetree', 'imagekit', @@ -164,7 +191,6 @@ 'ordered_model', 'widget_tweaks', 'django_countries', - 'easy_pdf', 'sorl.thumbnail', 'banners', @@ -203,6 +229,7 @@ 'django_filters', 'polymorphic', 'django_extensions', + 'import_export', ] # Fixtures @@ -287,7 +314,8 @@ ### SecurityMiddleware -X_FRAME_OPTIONS = 'DENY' +X_FRAME_OPTIONS = 'SAMEORIGIN' +SILENCED_SYSTEM_CHECKS = ["security.W019"] ### django-rest-framework @@ -308,7 +336,7 @@ ), 'DEFAULT_THROTTLE_RATES': { 'anon': '100/day', - 'user': '1000/day', + 'user': '3000/day', }, } diff --git a/pydotorg/settings/heroku.py b/pydotorg/settings/cabotage.py similarity index 81% rename from pydotorg/settings/heroku.py rename to pydotorg/settings/cabotage.py index 5adff485c..d73beb83c 100644 --- a/pydotorg/settings/heroku.py +++ b/pydotorg/settings/cabotage.py @@ -26,9 +26,12 @@ HAYSTACK_CONNECTIONS = { 'default': { - 'ENGINE': 'haystack.backends.elasticsearch5_backend.Elasticsearch5SearchEngine', + 'ENGINE': 'haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine', 'URL': HAYSTACK_SEARCHBOX_SSL_URL, - 'INDEX_NAME': 'haystack-prod', + 'INDEX_NAME': config('HAYSTACK_INDEX', default='haystack-prod'), + 'KWARGS': { + 'ca_certs': '/var/run/secrets/cabotage.io/ca.crt', + } }, } @@ -41,8 +44,8 @@ ] + MIDDLEWARE MEDIAFILES_LOCATION = 'media' -DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage' -STATICFILES_STORAGE = 'custom_storages.PipelineManifestStorage' +DEFAULT_FILE_STORAGE = 'custom_storages.storages.MediaStorage' +STATICFILES_STORAGE = 'custom_storages.storages.PipelineManifestStorage' EMAIL_HOST = config('EMAIL_HOST') EMAIL_HOST_USER = config('EMAIL_HOST_USER') @@ -68,7 +71,7 @@ RAVEN_CONFIG = { "dsn": config('SENTRY_DSN'), - "release": config('SOURCE_VERSION'), + "release": config('SOURCE_COMMIT'), } AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID') diff --git a/pydotorg/settings/local.py b/pydotorg/settings/local.py index 4ecbe35aa..6525d9837 100644 --- a/pydotorg/settings/local.py +++ b/pydotorg/settings/local.py @@ -26,7 +26,7 @@ HAYSTACK_CONNECTIONS = { 'default': { - 'ENGINE': 'haystack.backends.elasticsearch5_backend.Elasticsearch5SearchEngine', + 'ENGINE': 'haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine', 'URL': HAYSTACK_SEARCHBOX_SSL_URL, 'INDEX_NAME': 'haystack', }, diff --git a/pydotorg/settings/static.py b/pydotorg/settings/static.py new file mode 100644 index 000000000..3d93e113e --- /dev/null +++ b/pydotorg/settings/static.py @@ -0,0 +1,25 @@ +import os + +import dj_database_url +import raven +from decouple import Csv + +from .base import * + +DEBUG = TEMPLATE_DEBUG = False + +HAYSTACK_CONNECTIONS = { + 'default': { + 'ENGINE': 'haystack.backends.elasticsearch5_backend.Elasticsearch5SearchEngine', + 'URL': 'http://127.0.0.1:9200', + 'INDEX_NAME': 'haystack-null', + }, +} + +MIDDLEWARE = [ + 'whitenoise.middleware.WhiteNoiseMiddleware', +] + MIDDLEWARE + +MEDIAFILES_LOCATION = 'media' +DEFAULT_FILE_STORAGE = 'custom_storages.storages.MediaStorage' +STATICFILES_STORAGE = 'custom_storages.storages.PipelineManifestStorage' diff --git a/pydotorg/tests/test_context_processors.py b/pydotorg/tests/test_context_processors.py index 8d5880a57..b1c8f3ed4 100644 --- a/pydotorg/tests/test_context_processors.py +++ b/pydotorg/tests/test_context_processors.py @@ -48,7 +48,7 @@ def test_user_nav_bar_links_for_non_psf_members(self): "label": "Membership", "urls": [ {"url": reverse("users:user_nominations_view"), "label": "Nominations"}, - {"url": reverse("users:user_membership_create"), "label": "Become a PSF member"}, + {"url": reverse("users:user_membership_create"), "label": "Become a PSF Basic member"}, ], }, "sponsorships": { @@ -80,7 +80,7 @@ def test_user_nav_bar_links_for_psf_members(self): "label": "Membership", "urls": [ {"url": reverse("users:user_nominations_view"), "label": "Nominations"}, - {"url": reverse("users:user_membership_edit"), "label": "Edit PSF membership"}, + {"url": reverse("users:user_membership_edit"), "label": "Edit PSF Basic membership"}, ], }, "sponsorships": { diff --git a/pydotorg/urls.py b/pydotorg/urls.py index 5fc6b3f12..f6ee8001d 100644 --- a/pydotorg/urls.py +++ b/pydotorg/urls.py @@ -3,7 +3,7 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.conf.urls.static import static from django.urls import path, re_path -from django.views.generic.base import TemplateView, RedirectView +from django.views.generic.base import TemplateView from django.conf import settings from cms.views import custom_404 @@ -16,6 +16,7 @@ urlpatterns = [ # homepage path('', views.IndexView.as_view(), name='home'), + re_path(r'^_health/?', views.health, name='health'), path('authenticated', views.AuthenticatedView.as_view(), name='authenticated'), re_path(r'^humans.txt$', TemplateView.as_view(template_name='humans.txt', content_type='text/plain')), re_path(r'^robots.txt$', TemplateView.as_view(template_name='robots.txt', content_type='text/plain')), @@ -24,18 +25,11 @@ # python section landing pages path('about/', TemplateView.as_view(template_name="python/about.html"), name='about'), - # Redirect old download links to new downloads pages - path('download/', RedirectView.as_view(url='https://www.python.org/downloads/', permanent=True)), - path('download/source/', RedirectView.as_view(url='https://www.python.org/downloads/source/', permanent=True)), - path('download/mac/', RedirectView.as_view(url='https://www.python.org/downloads/macos/', permanent=True)), - path('download/windows/', RedirectView.as_view(url='https://www.python.org/downloads/windows/', permanent=True)), - # duplicated downloads to getit to bypass China's firewall. See # https://github.com/python/pythondotorg/issues/427 for more info. path('getit/', include('downloads.urls', namespace='getit')), path('downloads/', include('downloads.urls', namespace='download')), path('doc/', views.DocumentationIndexView.as_view(), name='documentation'), - path('blog/', RedirectView.as_view(url='/blogs/', permanent=True)), path('blogs/', include('blogs.urls')), path('inner/', TemplateView.as_view(template_name="python/inner.html"), name='inner'), diff --git a/pydotorg/views.py b/pydotorg/views.py index 476e62fd9..9777cf1aa 100644 --- a/pydotorg/views.py +++ b/pydotorg/views.py @@ -1,10 +1,15 @@ from django.conf import settings +from django.http import HttpResponse from django.views.generic.base import RedirectView, TemplateView from codesamples.models import CodeSample from downloads.models import Release +def health(request): + return HttpResponse('OK') + + class IndexView(TemplateView): template_name = "python/index.html" diff --git a/sponsors/admin.py b/sponsors/admin.py index 4e68a7d20..9e271edec 100644 --- a/sponsors/admin.py +++ b/sponsors/admin.py @@ -1,5 +1,6 @@ from django.contrib.contenttypes.admin import GenericTabularInline from django.contrib.contenttypes.models import ContentType +from django.contrib.sites.models import Site from ordered_model.admin import OrderedModelAdmin from polymorphic.admin import PolymorphicInlineSupportMixin, StackedPolymorphicInline, PolymorphicParentModelAdmin, \ PolymorphicChildModelAdmin @@ -13,6 +14,10 @@ from django.utils.functional import cached_property from django.utils.html import mark_safe +from import_export import resources +from import_export.fields import Field +from import_export.admin import ImportExportActionModelAdmin + from mailing.admin import BaseEmailTemplateAdmin from sponsors.models import * from sponsors.models.benefits import RequiredAssetMixin @@ -241,9 +246,13 @@ def has_delete_permission(self, request, obj=None): return True return obj.open_for_editing - def get_queryset(self, *args, **kwargs): - qs = super().get_queryset(*args, **kwargs) - return qs.select_related("sponsorship_benefit__program", "program") + def get_queryset(self, request): + #filters the available benefits by the benefits for the year of the sponsorship + match = request.resolver_match + sponsorship = self.parent_model.objects.get(pk=match.kwargs["object_id"]) + year = sponsorship.year + + return super().get_queryset(request).filter(sponsorship_benefit__year=year) class TargetableEmailBenefitsFilter(admin.SimpleListFilter): @@ -253,7 +262,7 @@ class TargetableEmailBenefitsFilter(admin.SimpleListFilter): @cached_property def benefits(self): qs = EmailTargetableConfiguration.objects.all().values_list("benefit_id", flat=True) - benefits = SponsorshipBenefit.objects.filter(id__in=Subquery(qs)) + benefits = SponsorshipBenefit.objects.filter(id__in=Subquery(qs), year=SponsorshipCurrentYear.get_year()) return {str(b.id): b for b in benefits} def lookups(self, request, model_admin): @@ -292,8 +301,78 @@ def choices(self, changelist): return choices +class SponsorshipResource(resources.ModelResource): + + sponsor_name = Field(attribute='sponsor__name', column_name='Company Name') + contact_name = Field(column_name='Contact Name(s)') + contact_email = Field(column_name='Contact Email(s)') + contact_phone = Field(column_name='Contact phone number') + contact_type = Field(column_name='Contact Type(s)') + start_date = Field(attribute='start_date', column_name='Start Date') + end_date = Field(attribute='end_date', column_name='End Date') + web_logo = Field(column_name='Logo') + landing_page_url = Field(attribute='sponsor__landing_page_url', column_name='Webpage link') + level = Field(attribute='package__name', column_name='Sponsorship Level') + cost = Field(attribute='sponsorship_fee', column_name='Sponsorship Cost') + admin_url = Field(attribute='admin_url', column_name='Admin Link') + + class Meta: + model = Sponsorship + fields = ( + 'sponsor_name', + 'contact_name', + 'contact_email', + 'contact_phone', + 'contact_type', + 'start_date', + 'end_date', + 'web_logo', + 'landing_page_url', + 'level', + 'cost', + 'admin_url', + ) + export_order = ( + "sponsor_name", + "contact_name", + "contact_email", + "contact_phone", + "contact_type", + "start_date", + "end_date", + "web_logo", + "landing_page_url", + "level", + "cost", + "admin_url", + ) + + def get_sponsorship_url(self, sponsorship): + domain = Site.objects.get_current().domain + url = reverse("admin:sponsors_sponsorship_change", args=[sponsorship.id]) + return f'https://{domain}{url}' + + def dehydrate_web_logo(self, sponsorship): + return sponsorship.sponsor.web_logo.url + + def dehydrate_contact_type(self, sponsorship): + return "\n".join([contact.type for contact in sponsorship.sponsor.contacts.all()]) + + def dehydrate_contact_name(self, sponsorship): + return "\n".join([contact.name for contact in sponsorship.sponsor.contacts.all()]) + + def dehydrate_contact_email(self, sponsorship): + return "\n".join([contact.email for contact in sponsorship.sponsor.contacts.all()]) + + def dehydrate_contact_phone(self, sponsorship): + return "\n".join([contact.phone for contact in sponsorship.sponsor.contacts.all()]) + + def dehydrate_admin_url(self, sponsorship): + return self.get_sponsorship_url(sponsorship) + + @admin.register(Sponsorship) -class SponsorshipAdmin(admin.ModelAdmin): +class SponsorshipAdmin(ImportExportActionModelAdmin, admin.ModelAdmin): change_form_template = "sponsors/admin/sponsorship_change_form.html" form = SponsorshipReviewAdminForm inlines = [SponsorBenefitInline, AssetsInline] @@ -310,6 +389,7 @@ class SponsorshipAdmin(admin.ModelAdmin): ] list_filter = [SponsorshipStatusListFilter, "package", "year", TargetableEmailBenefitsFilter] actions = ["send_notifications"] + resource_class = SponsorshipResource fieldsets = [ ( "Sponsorship Data", @@ -326,6 +406,7 @@ class SponsorshipAdmin(admin.ModelAdmin): "end_date", "get_contract", "level_name", + "renewal", "overlapped_by", ), }, @@ -413,7 +494,7 @@ def get_readonly_fields(self, request, obj): "get_custom_benefits_removed_by_user", ] - if obj and obj.status != Sponsorship.APPLIED: + if obj and not obj.open_for_editing: extra = ["start_date", "end_date", "package", "level_name", "sponsorship_fee"] readonly_fields.extend(extra) @@ -478,6 +559,16 @@ def get_urls(self): self.admin_site.admin_view(self.list_uploaded_assets_view), name=f"{base_name}_list_uploaded_assets", ), + path( + "/unlock", + self.admin_site.admin_view(self.unlock_view), + name=f"{base_name}_unlock", + ), + path( + "/lock", + self.admin_site.admin_view(self.lock_view), + name=f"{base_name}_lock", + ), ] return my_urls + urls @@ -601,6 +692,12 @@ def approve_signed_sponsorship_view(self, request, pk): def list_uploaded_assets_view(self, request, pk): return views_admin.list_uploaded_assets(self, request, pk) + def unlock_view(self, request, pk): + return views_admin.unlock_view(self, request, pk) + + def lock_view(self, request, pk): + return views_admin.lock_view(self, request, pk) + @admin.register(SponsorshipCurrentYear) class SponsorshipCurrentYearAdmin(admin.ModelAdmin): @@ -886,7 +983,7 @@ def benefits_with_assets(self): return {str(b.id): b for b in benefits} def lookups(self, request, model_admin): - return [(k, b.name) for k, b in self.benefits_with_assets.items()] + return [(k, f"{b.name} ({b.year})") for k, b in self.benefits_with_assets.items()] def queryset(self, request, queryset): benefit = self.benefits_with_assets.get(self.value()) diff --git a/sponsors/contracts.py b/sponsors/contracts.py new file mode 100644 index 000000000..e0fd75b6c --- /dev/null +++ b/sponsors/contracts.py @@ -0,0 +1,89 @@ +import os +import tempfile + +from django.http import HttpResponse +from django.template.loader import render_to_string +from django.utils.dateformat import format +from unidecode import unidecode + +import pypandoc + +dirname = os.path.dirname(__file__) +DOCXPAGEBREAK_FILTER = os.path.join(dirname, "pandoc_filters/pagebreak.py") +REFERENCE_DOCX = os.path.join(dirname, "reference.docx") + + +def _clean_split(text, separator="\n"): + return [ + t.replace("-", "").strip() + for t in text.split("\n") + if t.replace("-", "").strip() + ] + + +def _contract_context(contract, **context): + start_date = contract.sponsorship.start_date + context.update( + { + "contract": contract, + "start_date": start_date, + "start_day_english_suffix": format(start_date, "S"), + "sponsor": contract.sponsorship.sponsor, + "sponsorship": contract.sponsorship, + "benefits": _clean_split(contract.benefits_list.raw), + "legal_clauses": _clean_split(contract.legal_clauses.raw), + "renewal": True if contract.sponsorship.renewal else False, + } + ) + previous_effective = contract.sponsorship.previous_effective_date + context["previous_effective"] = previous_effective if previous_effective else "UNKNOWN" + context["previous_effective_english_suffix"] = format(previous_effective, "S") if previous_effective else "UNKNOWN" + return context + + +def render_markdown_from_template(contract, **context): + template = "sponsors/admin/contracts/sponsorship-agreement.md" + context = _contract_context(contract, **context) + return render_to_string(template, context) + + +def render_contract_to_pdf_response(request, contract, **context): + response = HttpResponse( + render_contract_to_pdf_file(contract, **context), content_type="application/pdf" + ) + return response + + +def render_contract_to_pdf_file(contract, **context): + with tempfile.NamedTemporaryFile() as docx_file: + with tempfile.NamedTemporaryFile(suffix=".pdf") as pdf_file: + markdown = render_markdown_from_template(contract, **context) + pdf = pypandoc.convert_text( + markdown, "pdf", outputfile=pdf_file.name, format="md" + ) + return pdf_file.read() + + +def render_contract_to_docx_response(request, contract, **context): + response = HttpResponse( + render_contract_to_docx_file(contract, **context), + content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ) + response[ + "Content-Disposition" + ] = f"attachment; filename={'sponsorship-renewal' if contract.sponsorship.renewal else 'sponsorship-contract'}-{unidecode(contract.sponsorship.sponsor.name.replace(' ', '-').replace('.', ''))}.docx" + return response + + +def render_contract_to_docx_file(contract, **context): + markdown = render_markdown_from_template(contract, **context) + with tempfile.NamedTemporaryFile() as docx_file: + docx = pypandoc.convert_text( + markdown, + "docx", + outputfile=docx_file.name, + format="md", + filters=[DOCXPAGEBREAK_FILTER], + extra_args=[f"--reference-doc", REFERENCE_DOCX], + ) + return docx_file.read() diff --git a/sponsors/forms.py b/sponsors/forms.py index 01d3de4f2..4ced017c9 100644 --- a/sponsors/forms.py +++ b/sponsors/forms.py @@ -3,6 +3,7 @@ from django import forms from django.conf import settings from django.contrib.admin.widgets import AdminDateWidget +from django.core.validators import FileExtensionValidator from django.db.models import Q from django.utils import timezone from django.utils.functional import cached_property @@ -127,6 +128,7 @@ def get_package(self): if not pkg_benefits and standalone: # standalone only pkg, _ = SponsorshipPackage.objects.get_or_create( slug="standalone-only", + year=SponsorshipCurrentYear.get_year(), defaults={"name": "Standalone Only", "sponsorship_amount": 0}, ) @@ -219,15 +221,21 @@ class SponsorshipApplicationForm(forms.Form): help_text="For promotion of your sponsorship on social media.", required=False, ) + linked_in_page_url = forms.URLField( + label="LinkedIn page URL", + help_text="URL for your LinkedIn page.", + required=False, + ) web_logo = forms.ImageField( label="Sponsor web logo", help_text="For display on our sponsor webpage. High resolution PNG or JPG, smallest dimension no less than 256px", required=False, ) - print_logo = forms.ImageField( + print_logo = forms.FileField( label="Sponsor print logo", help_text="For printed materials, signage, and projection. SVG or EPS", required=False, + validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])], ) primary_phone = forms.CharField( @@ -250,10 +258,17 @@ class SponsorshipApplicationForm(forms.Form): state = forms.CharField( label="State/Province/Region", max_length=64, required=False ) + state_of_incorporation = forms.CharField( + label="State of incorporation", help_text="US only, If different than mailing address", max_length=64, required=False + ) postal_code = forms.CharField( label="Zip/Postal Code", max_length=64, required=False ) - country = CountryField().formfield(required=False) + country = CountryField().formfield(required=False, help_text="For mailing/contact purposes") + + country_of_incorporation = CountryField().formfield( + label="Country of incorporation", help_text="For contractual purposes", required=False + ) def __init__(self, *args, **kwargs): self.user = kwargs.pop("user", None) @@ -369,7 +384,10 @@ def save(self): description=self.cleaned_data.get("description", ""), landing_page_url=self.cleaned_data.get("landing_page_url", ""), twitter_handle=self.cleaned_data["twitter_handle"], + linked_in_page_url=self.cleaned_data["linked_in_page_url"], print_logo=self.cleaned_data.get("print_logo"), + country_of_incorporation=self.cleaned_data.get("country_of_incorporation", ""), + state_of_incorporation=self.cleaned_data.get("state_of_incorporation", ""), ) contacts = [f.save(commit=False) for f in self.contacts_formset.forms] for contact in contacts: @@ -391,6 +409,10 @@ class SponsorshipReviewAdminForm(forms.ModelForm): start_date = forms.DateField(widget=AdminDateWidget(), required=False) end_date = forms.DateField(widget=AdminDateWidget(), required=False) overlapped_by = forms.ModelChoiceField(queryset=Sponsorship.objects.select_related("sponsor", "package"), required=False) + renewal = forms.BooleanField( + help_text="If true, it means the sponsorship is a renewal of a previous sponsorship and will use the renewal template for contracting.", + required=False, + ) def __init__(self, *args, **kwargs): force_required = kwargs.pop("force_required", False) @@ -402,10 +424,12 @@ def __init__(self, *args, **kwargs): self.fields.pop("overlapped_by") # overlapped should never be displayed on approval for field_name in self.fields: self.fields[field_name].required = True + self.fields["renewal"].required = False + class Meta: model = Sponsorship - fields = ["start_date", "end_date", "package", "sponsorship_fee"] + fields = ["start_date", "end_date", "package", "sponsorship_fee", "renewal"] widgets = { 'year': SPONSORSHIP_YEAR_SELECT, } @@ -414,6 +438,7 @@ def clean(self): cleaned_data = super().clean() start_date = cleaned_data.get("start_date") end_date = cleaned_data.get("end_date") + renewal = cleaned_data.get("renewal") if start_date and end_date and end_date <= start_date: raise forms.ValidationError("End date must be greater than start date") @@ -549,10 +574,11 @@ class SponsorUpdateForm(forms.ModelForm): help_text="For display on our sponsor webpage. High resolution PNG or JPG, smallest dimension no less than 256px", required=False, ) - print_logo = forms.ImageField( + print_logo = forms.FileField( widget=forms.widgets.FileInput, help_text="For printed materials, signage, and projection. SVG or EPS", required=False, + validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])], ) def __init__(self, *args, **kwargs): diff --git a/sponsors/management/commands/create_pycon_vouchers_for_sponsors.py b/sponsors/management/commands/create_pycon_vouchers_for_sponsors.py new file mode 100644 index 000000000..3e3b4973d --- /dev/null +++ b/sponsors/management/commands/create_pycon_vouchers_for_sponsors.py @@ -0,0 +1,137 @@ +import os +from hashlib import sha1 +from calendar import timegm +from datetime import datetime +import sys +from urllib.parse import urlencode + +import requests +from requests.exceptions import RequestException + +from django.db.models import Q +from django.conf import settings +from django.core.management import BaseCommand + +from sponsors.models import ( + SponsorBenefit, + BenefitFeature, + ProvidedTextAsset, + TieredBenefit, +) + +BENEFITS = { + 183: { + "internal_name": "full_conference_passes_code_2024", + "voucher_type": "SPNS_COMP_", + }, + 201: { + "internal_name": "expo_hall_only_passes_code_2024", + "voucher_type": "SPNS_EXPO_COMP_", + }, + 208: { + "internal_name": "additional_full_conference_passes_code_2024", + "voucher_type": "SPNS_ADDL_DISC_REG_", + }, + 225: { + "internal_name": "online_only_conference_passes_2024", + "voucher_type": "SPNS_ONLINE_COMP_", + }, + 237: { + "internal_name": "additional_expo_hall_only_passes_2024", + "voucher_type": "SPNS_EXPO_DISC_", + }, +} + + +def api_call(uri, query): + method = "GET" + body = "" + + timestamp = timegm(datetime.utcnow().timetuple()) + base_string = "".join( + ( + settings.PYCON_API_SECRET, + str(timestamp), + method.upper(), + f"{uri}?{urlencode(query)}", + body, + ) + ) + + headers = { + "X-API-Key": str(settings.PYCON_API_KEY), + "X-API-Signature": str(sha1(base_string.encode("utf-8")).hexdigest()), + "X-API-Timestamp": str(timestamp), + } + scheme = "http" if settings.DEBUG else "https" + url = f"{scheme}://{settings.PYCON_API_HOST}{uri}" + try: + return requests.get(url, headers=headers, params=query).json() + except RequestException: + raise + + +def generate_voucher_codes(year): + for benefit_id, code in BENEFITS.items(): + for sponsorbenefit in ( + SponsorBenefit.objects.filter(sponsorship_benefit_id=benefit_id) + .filter(sponsorship__status="finalized") + .all() + ): + try: + quantity = BenefitFeature.objects.instance_of(TieredBenefit).get( + sponsor_benefit=sponsorbenefit + ) + except BenefitFeature.DoesNotExist: + print( + f"No quantity found for {sponsorbenefit.sponsorship.sponsor.name} and {code['internal_name']}" + ) + continue + try: + asset = ProvidedTextAsset.objects.filter( + sponsor_benefit=sponsorbenefit + ).get(internal_name=code["internal_name"]) + except ProvidedTextAsset.DoesNotExist: + print( + f"No provided asset found for {sponsorbenefit.sponsorship.sponsor.name} with internal name {code['internal_name']}" + ) + continue + + result = api_call( + f"/{year}/api/vouchers/", + query={ + "voucher_type": code["voucher_type"], + "quantity": quantity.quantity, + "sponsor_name": sponsorbenefit.sponsorship.sponsor.name, + }, + ) + if result["code"] == 200: + print( + f"Fullfilling {code['internal_name']} for {sponsorbenefit.sponsorship.sponsor.name}: {quantity.quantity}" + ) + promo_code = result["data"]["promo_code"] + asset.value = promo_code + asset.save() + else: + print( + f"Error from PyCon when fullfilling {code['internal_name']} for {sponsorbenefit.sponsorship.sponsor.name}: {result}" + ) + print(f"Done!") + + +class Command(BaseCommand): + """ + Create Contract objects for existing approved Sponsorships. + + Run this command as a initial data migration or to make sure + all approved Sponsorships do have associated Contract objects. + """ + + help = "Create Contract objects for existing approved Sponsorships." + + def add_arguments(self, parser): + parser.add_argument("year") + + def handle(self, **options): + year = options["year"] + generate_voucher_codes(year) diff --git a/sponsors/migrations/0093_auto_20230214_2113.py b/sponsors/migrations/0093_auto_20230214_2113.py new file mode 100644 index 000000000..853d14606 --- /dev/null +++ b/sponsors/migrations/0093_auto_20230214_2113.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2023-02-14 21:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0092_auto_20220816_1517'), + ] + + operations = [ + migrations.AlterField( + model_name='sponsorshipbenefit', + name='package_only', + field=models.BooleanField(default=False, help_text='If a benefit is only available via a sponsorship package and not as an add-on, select this option.', verbose_name='Sponsor Package Only Benefit'), + ), + ] diff --git a/sponsors/migrations/0094_sponsorship_locked.py b/sponsors/migrations/0094_sponsorship_locked.py new file mode 100644 index 000000000..c1c6a8152 --- /dev/null +++ b/sponsors/migrations/0094_sponsorship_locked.py @@ -0,0 +1,32 @@ +# Generated by Django 2.2.24 on 2023-02-16 13:55 + +from django.db import migrations, models + +from sponsors.models.sponsorship import Sponsorship as _Sponsorship + +def forwards_func(apps, schema_editor): + Sponsorship = apps.get_model('sponsors', 'Sponsorship') + db_alias = schema_editor.connection.alias + + for sponsorship in Sponsorship.objects.all(): + sponsorship.locked = not (sponsorship.status == _Sponsorship.APPLIED) + sponsorship.save() + +def reverse_func(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0093_auto_20230214_2113'), + ] + + operations = [ + migrations.AddField( + model_name='sponsorship', + name='locked', + field=models.BooleanField(default=False), + ), + migrations.RunPython(forwards_func, reverse_func) + ] diff --git a/sponsors/migrations/0095_auto_20231214_2025.py b/sponsors/migrations/0095_auto_20231214_2025.py new file mode 100644 index 000000000..e656bf05c --- /dev/null +++ b/sponsors/migrations/0095_auto_20231214_2025.py @@ -0,0 +1,83 @@ +# Generated by Django 2.2.24 on 2023-12-14 20:25 + +from django.db import migrations +import django.db.models.manager + + +class Migration(migrations.Migration): + dependencies = [ + ("sponsors", "0094_sponsorship_locked"), + ] + + operations = [ + migrations.AlterModelOptions( + name="benefitfeatureconfiguration", + options={ + "base_manager_name": "non_polymorphic", + "verbose_name": "Benefit Feature Configuration", + "verbose_name_plural": "Benefit Feature Configurations", + }, + ), + migrations.AlterModelManagers( + name="benefitfeatureconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="emailtargetableconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="logoplacementconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="providedfileassetconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="providedtextassetconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="requiredimgassetconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="requiredresponseassetconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="requiredtextassetconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name="tieredbenefitconfiguration", + managers=[ + ("non_polymorphic", django.db.models.manager.Manager()), + ("objects", django.db.models.manager.Manager()), + ], + ), + ] diff --git a/sponsors/migrations/0096_auto_20231214_2108.py b/sponsors/migrations/0096_auto_20231214_2108.py new file mode 100644 index 000000000..11c6dde5b --- /dev/null +++ b/sponsors/migrations/0096_auto_20231214_2108.py @@ -0,0 +1,61 @@ +# Generated by Django 2.2.24 on 2023-12-14 21:08 + +from django.db import migrations +import django.db.models.manager + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0095_auto_20231214_2025'), + ] + + operations = [ + migrations.AlterModelManagers( + name='benefitfeatureconfiguration', + managers=[ + ('objects', django.db.models.manager.Manager()), + ('non_polymorphic', django.db.models.manager.Manager()), + ], + ), + migrations.AlterModelManagers( + name='emailtargetableconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='logoplacementconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='providedfileassetconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='providedtextassetconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='requiredimgassetconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='requiredresponseassetconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='requiredtextassetconfiguration', + managers=[ + ], + ), + migrations.AlterModelManagers( + name='tieredbenefitconfiguration', + managers=[ + ], + ), + ] diff --git a/sponsors/migrations/0097_sponsorship_renewal.py b/sponsors/migrations/0097_sponsorship_renewal.py new file mode 100644 index 000000000..fdbc347b3 --- /dev/null +++ b/sponsors/migrations/0097_sponsorship_renewal.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2023-12-18 16:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0096_auto_20231214_2108'), + ] + + operations = [ + migrations.AddField( + model_name='sponsorship', + name='renewal', + field=models.BooleanField(blank=True, null=True), + ), + ] diff --git a/sponsors/migrations/0098_auto_20231219_1910.py b/sponsors/migrations/0098_auto_20231219_1910.py new file mode 100644 index 000000000..3c466bb75 --- /dev/null +++ b/sponsors/migrations/0098_auto_20231219_1910.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2023-12-19 19:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0097_sponsorship_renewal'), + ] + + operations = [ + migrations.AlterField( + model_name='sponsorship', + name='renewal', + field=models.BooleanField(blank=True, help_text='If true, it means the sponsorship is a renewal of a previous sponsorship and will use the renewal template for contracting.', null=True), + ), + ] diff --git a/sponsors/migrations/0099_auto_20231224_1854.py b/sponsors/migrations/0099_auto_20231224_1854.py new file mode 100644 index 000000000..d8aaa436c --- /dev/null +++ b/sponsors/migrations/0099_auto_20231224_1854.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.24 on 2023-12-24 18:54 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0098_auto_20231219_1910'), + ] + + operations = [ + migrations.AlterField( + model_name='sponsor', + name='print_logo', + field=models.FileField(blank=True, help_text='For printed materials, signage, and projection. SVG or EPS', null=True, upload_to='sponsor_print_logos', validators=[django.core.validators.FileExtensionValidator(['eps', 'epsfepsi', 'svg', 'png'])], verbose_name='Print logo'), + ), + ] diff --git a/sponsors/migrations/0100_auto_20240107_1054.py b/sponsors/migrations/0100_auto_20240107_1054.py new file mode 100644 index 000000000..8bad2bc92 --- /dev/null +++ b/sponsors/migrations/0100_auto_20240107_1054.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.24 on 2024-01-07 10:54 + +from django.db import migrations, models +import django_countries.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0099_auto_20231224_1854'), + ] + + operations = [ + migrations.AddField( + model_name='sponsor', + name='country_of_incorporation', + field=django_countries.fields.CountryField(blank=True, help_text='For contractual purposes', max_length=2, null=True, verbose_name='Country of incorporation (If different)'), + ), + migrations.AddField( + model_name='sponsor', + name='state_of_incorporation', + field=models.CharField(blank=True, default='', max_length=64, null=True, verbose_name='US only: State of incorporation (If different)'), + ), + migrations.AlterField( + model_name='sponsor', + name='country', + field=django_countries.fields.CountryField(default='', help_text='For mailing/contact purposes', max_length=2), + ), + ] diff --git a/sponsors/migrations/0101_sponsor_linked_in_page_url.py b/sponsors/migrations/0101_sponsor_linked_in_page_url.py new file mode 100644 index 000000000..61041a08e --- /dev/null +++ b/sponsors/migrations/0101_sponsor_linked_in_page_url.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2024-02-09 13:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0100_auto_20240107_1054'), + ] + + operations = [ + migrations.AddField( + model_name='sponsor', + name='linked_in_page_url', + field=models.URLField(blank=True, help_text='URL for your LinkedIn page.', null=True, verbose_name='LinkedIn page URL'), + ), + ] diff --git a/sponsors/migrations/0102_auto_20240509_2037.py b/sponsors/migrations/0102_auto_20240509_2037.py new file mode 100644 index 000000000..2c68fa96b --- /dev/null +++ b/sponsors/migrations/0102_auto_20240509_2037.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.28 on 2024-05-09 20:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0101_sponsor_linked_in_page_url'), + ] + + operations = [ + migrations.AlterField( + model_name='textasset', + name='text', + field=models.TextField(blank=True, default=''), + ), + ] diff --git a/sponsors/models/assets.py b/sponsors/models/assets.py index 4db7c9671..9b4899b5a 100644 --- a/sponsors/models/assets.py +++ b/sponsors/models/assets.py @@ -106,7 +106,7 @@ def value(self, value): class TextAsset(GenericAsset): - text = models.TextField(default="") + text = models.TextField(default="", blank=True) def __str__(self): return f"Text asset: {self.internal_name}" diff --git a/sponsors/models/benefits.py b/sponsors/models/benefits.py index 51ec1870e..635b3f6b9 100644 --- a/sponsors/models/benefits.py +++ b/sponsors/models/benefits.py @@ -16,7 +16,7 @@ ######################################## # Benefit features abstract classes -from sponsors.models.managers import BenefitFeatureQuerySet +from sponsors.models.managers import BenefitFeatureQuerySet, BenefitFeatureConfigurationQuerySet ######################################## @@ -307,11 +307,14 @@ class BenefitFeatureConfiguration(PolymorphicModel): Base class for sponsorship benefits configuration. """ + objects = BenefitFeatureQuerySet.as_manager() benefit = models.ForeignKey("sponsors.SponsorshipBenefit", on_delete=models.CASCADE) + non_polymorphic = models.Manager() class Meta: verbose_name = "Benefit Feature Configuration" verbose_name_plural = "Benefit Feature Configurations" + base_manager_name = 'non_polymorphic' @property def benefit_feature_class(self): diff --git a/sponsors/models/contract.py b/sponsors/models/contract.py index 3b22de9f3..3cbf389e2 100644 --- a/sponsors/models/contract.py +++ b/sponsors/models/contract.py @@ -248,6 +248,7 @@ def execute(self, commit=True, force=False): self.status = self.EXECUTED self.sponsorship.status = Sponsorship.FINALIZED + self.sponsorship.locked = True self.sponsorship.finalized_on = timezone.now().date() if commit: self.sponsorship.save() diff --git a/sponsors/models/managers.py b/sponsors/models/managers.py index 4681532f5..5cb241fc9 100644 --- a/sponsors/models/managers.py +++ b/sponsors/models/managers.py @@ -146,6 +146,15 @@ def provided_assets(self): return self.instance_of(*provided_assets_classes).select_related("sponsor_benefit__sponsorship") +class BenefitFeatureConfigurationQuerySet(PolymorphicQuerySet): + + def delete(self): + if not self.polymorphic_disabled: + return self.non_polymorphic().delete() + else: + return super().delete() + + class GenericAssetQuerySet(PolymorphicQuerySet): def all_assets(self): diff --git a/sponsors/models/sponsors.py b/sponsors/models/sponsors.py index ad2c4b8b1..78d5d6e32 100644 --- a/sponsors/models/sponsors.py +++ b/sponsors/models/sponsors.py @@ -3,6 +3,7 @@ """ from allauth.account.models import EmailAddress from django.conf import settings +from django.core.validators import FileExtensionValidator from django.db import models from django.core.exceptions import ObjectDoesNotExist from django.template.defaultfilters import slugify @@ -43,6 +44,12 @@ class Sponsor(ContentManageable): null=True, verbose_name="Twitter handle", ) + linked_in_page_url = models.URLField( + blank=True, + null=True, + verbose_name="LinkedIn page URL", + help_text="URL for your LinkedIn page." + ) web_logo = models.ImageField( upload_to="sponsor_web_logos", verbose_name="Web logo", @@ -51,6 +58,7 @@ class Sponsor(ContentManageable): ) print_logo = models.FileField( upload_to="sponsor_print_logos", + validators=[FileExtensionValidator(['eps', 'epsf' 'epsi', 'svg', 'png'])], blank=True, null=True, verbose_name="Print logo", @@ -71,8 +79,15 @@ class Sponsor(ContentManageable): postal_code = models.CharField( verbose_name="Zip/Postal Code", max_length=64, default="" ) - country = CountryField(default="") + country = CountryField(default="", help_text="For mailing/contact purposes") assets = GenericRelation(GenericAsset) + country_of_incorporation = CountryField( + verbose_name="Country of incorporation (If different)", help_text="For contractual purposes", blank=True, null=True + ) + state_of_incorporation = models.CharField( + verbose_name="US only: State of incorporation (If different)", + max_length=64, blank=True, null=True, default="" + ) class Meta: verbose_name = "sponsor" @@ -164,6 +179,19 @@ def can_manage(self): if self.user is not None and (self.primary or self.manager): return True + @property + def type(self): + types=[] + if self.primary: + types.append('Primary') + if self.administrative: + types.append('Administrative') + if self.manager: + types.append('Manager') + if self.accounting: + types.append('Accounting') + return ", ".join(types) + def __str__(self): return f"Contact {self.name} from {self.sponsor}" diff --git a/sponsors/models/sponsorship.py b/sponsors/models/sponsorship.py index ec22f61f1..7443d4d2c 100644 --- a/sponsors/models/sponsorship.py +++ b/sponsors/models/sponsorship.py @@ -135,7 +135,7 @@ class Meta(OrderedModel.Meta): class Sponsorship(models.Model): """ - Represente a sponsorship application by a sponsor. + Represents a sponsorship application by a sponsor. It's responsible to group the set of selected benefits and link it to sponsor """ @@ -161,6 +161,7 @@ class Sponsorship(models.Model): status = models.CharField( max_length=20, choices=STATUS_CHOICES, default=APPLIED, db_index=True ) + locked = models.BooleanField(default=False) start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) @@ -181,6 +182,11 @@ class Sponsorship(models.Model): package = models.ForeignKey(SponsorshipPackage, null=True, on_delete=models.SET_NULL) sponsorship_fee = models.PositiveIntegerField(null=True, blank=True) overlapped_by = models.ForeignKey("self", null=True, on_delete=models.SET_NULL) + renewal = models.BooleanField( + null=True, + blank=True, + help_text="If true, it means the sponsorship is a renewal of a previous sponsorship and will use the renewal template for contracting." + ) assets = GenericRelation(GenericAsset) @@ -211,6 +217,12 @@ def __str__(self): repr += f" [{start} - {end}]" return repr + def save(self, *args, **kwargs): + if "locked" not in kwargs.get("update_fields", []): + if self.status != self.APPLIED: + self.locked = True + return super().save(*args, **kwargs) + @classmethod @transaction.atomic def new(cls, sponsor, benefits, package=None, submited_by=None): @@ -287,6 +299,7 @@ def reject(self): msg = f"Can't reject a {self.get_status_display()} sponsorship." raise InvalidStatusException(msg) self.status = self.REJECTED + self.locked = True self.rejected_on = timezone.now().date() def approve(self, start_date, end_date): @@ -297,6 +310,7 @@ def approve(self, start_date, end_date): msg = f"Start date greater or equal than end date" raise SponsorshipInvalidDateRangeException(msg) self.status = self.APPROVED + self.locked = True self.start_date = start_date self.end_date = end_date self.approved_on = timezone.now().date() @@ -320,6 +334,10 @@ def rollback_to_editing(self): self.approved_on = None self.rejected_on = None + @property + def unlocked(self): + return not self.locked + @property def verified_emails(self): emails = [self.submited_by.email] @@ -353,7 +371,7 @@ def added_benefits(self): @property def open_for_editing(self): - return self.status == self.APPLIED + return (self.status == self.APPLIED) or (self.unlocked) @property def next_status(self): @@ -365,6 +383,12 @@ def next_status(self): } return states_map[self.status] + @property + def previous_effective_date(self): + if len(self.sponsor.sponsorship_set.all().order_by('-year')) > 1: + return self.sponsor.sponsorship_set.all().order_by('-year')[1].start_date + return None + class SponsorshipBenefit(OrderedModel): """ diff --git a/sponsors/pandoc_filters/__init__.py b/sponsors/pandoc_filters/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sponsors/pandoc_filters/pagebreak.py b/sponsors/pandoc_filters/pagebreak.py new file mode 100644 index 000000000..22a786a2b --- /dev/null +++ b/sponsors/pandoc_filters/pagebreak.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# ------------------------------------------------------------------------------ +# Source: https://github.com/pandocker/pandoc-docx-pagebreak-py/ +# Revision: c8cddccebb78af75168da000a3d6ac09349bef73 +# ------------------------------------------------------------------------------ +# MIT License +# +# Copyright (c) 2018 pandocker +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# ------------------------------------------------------------------------------ + +""" pandoc-docx-pagebreakpy +Pandoc filter to insert pagebreak as openxml RawBlock +Only for docx output + +Trying to port pandoc-doc-pagebreak +- https://github.com/alexstoick/pandoc-docx-pagebreak +""" + +import panflute as pf + + +class DocxPagebreak(object): + pagebreak = pf.RawBlock("", format="openxml") + sectionbreak = pf.RawBlock("", + format="openxml") + toc = pf.RawBlock(r""" + + + + + + TOC \o "1-3" \h \z \u + + + + + + +""", format="openxml") + + def action(self, elem, doc): + if isinstance(elem, pf.RawBlock): + if elem.text == r"\newpage": + if (doc.format == "docx"): + elem = self.pagebreak + # elif elem.text == r"\newsection": + # if (doc.format == "docx"): + # pf.debug("Section Break") + # elem = self.sectionbreak + # else: + # elem = [] + elif elem.text == r"\toc": + if (doc.format == "docx"): + pf.debug("Table of Contents") + para = [pf.Para(pf.Str("Table"), pf.Space(), pf.Str("of"), pf.Space(), pf.Str("Contents"))] + div = pf.Div(*para, attributes={"custom-style": "TOC Heading"}) + elem = [div, self.toc] + else: + elem = [] + return elem + + +def main(doc=None): + dp = DocxPagebreak() + return pf.run_filter(dp.action, doc=doc) + + +if __name__ == "__main__": + main() diff --git a/sponsors/pdf.py b/sponsors/pdf.py deleted file mode 100644 index 5188b8290..000000000 --- a/sponsors/pdf.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -This module is a wrapper around django-easy-pdf so we can reuse code -""" -import io -import os -from django.conf import settings -from django.http import HttpResponse -from django.utils.dateformat import format - -from docxtpl import DocxTemplate -from easy_pdf.rendering import render_to_pdf_response, render_to_pdf - -from markupfield_helpers.helpers import render_md -from django.utils.html import mark_safe - - -def _clean_split(text, separator='\n'): - return [ - t.replace('-', '').strip() - for t in text.split('\n') - if t.replace('-', '').strip() - ] - - -def _contract_context(contract, **context): - start_date = contract.sponsorship.start_date - context.update({ - "contract": contract, - "start_date": start_date, - "start_day_english_suffix": format(start_date, "S"), - "sponsor": contract.sponsorship.sponsor, - "sponsorship": contract.sponsorship, - "benefits": _clean_split(contract.benefits_list.raw), - "legal_clauses": _clean_split(contract.legal_clauses.raw), - }) - return context - - -def render_contract_to_pdf_response(request, contract, **context): - template = "sponsors/admin/preview-contract.html" - context = _contract_context(contract, **context) - return render_to_pdf_response(request, template, context) - - -def render_contract_to_pdf_file(contract, **context): - template = "sponsors/admin/preview-contract.html" - context = _contract_context(contract, **context) - return render_to_pdf(template, context) - - -def _gen_docx_contract(output, contract, **context): - template = os.path.join(settings.TEMPLATES_DIR, "sponsors", "admin", "contract-template.docx") - doc = DocxTemplate(template) - context = _contract_context(contract, **context) - doc.render(context) - doc.save(output) - return output - - -def render_contract_to_docx_response(request, contract, **context): - response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document') - response['Content-Disposition'] = 'attachment; filename=contract.docx' - return _gen_docx_contract(output=response, contract=contract, **context) - - -def render_contract_to_docx_file(contract, **context): - fp = io.BytesIO() - fp = _gen_docx_contract(output=fp, contract=contract, **context) - fp.seek(0) - return fp.read() diff --git a/sponsors/reference.docx b/sponsors/reference.docx new file mode 100644 index 000000000..9e2df1a41 Binary files /dev/null and b/sponsors/reference.docx differ diff --git a/sponsors/tests/test_contracts.py b/sponsors/tests/test_contracts.py new file mode 100644 index 000000000..c330c13a8 --- /dev/null +++ b/sponsors/tests/test_contracts.py @@ -0,0 +1,39 @@ +from datetime import date +from model_bakery import baker +from unittest.mock import patch, Mock + +from django.http import HttpRequest +from django.test import TestCase +from django.utils.dateformat import format + +from sponsors.contracts import render_contract_to_docx_response + + +class TestRenderContract(TestCase): + def setUp(self): + self.contract = baker.make_recipe("sponsors.tests.empty_contract", sponsorship__start_date=date.today()) + + # DOCX unit test + def test_render_response_with_docx_attachment(self): + request = Mock(HttpRequest) + self.contract.sponsorship.renewal = False + response = render_contract_to_docx_response(request, self.contract) + + self.assertEqual(response.get("Content-Disposition"), "attachment; filename=sponsorship-contract-Sponsor.docx") + self.assertEqual( + response.get("Content-Type"), + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + ) + + + # DOCX unit test + def test_render_renewal_response_with_docx_attachment(self): + request = Mock(HttpRequest) + self.contract.sponsorship.renewal = True + response = render_contract_to_docx_response(request, self.contract) + + self.assertEqual(response.get("Content-Disposition"), "attachment; filename=sponsorship-renewal-Sponsor.docx") + self.assertEqual( + response.get("Content-Type"), + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + ) diff --git a/sponsors/tests/test_forms.py b/sponsors/tests/test_forms.py index 058e21625..49b0515cd 100644 --- a/sponsors/tests/test_forms.py +++ b/sponsors/tests/test_forms.py @@ -1,3 +1,6 @@ +from pathlib import Path + +from django.core.files.uploadedfile import SimpleUploadedFile from model_bakery import baker from django.conf import settings @@ -420,14 +423,18 @@ def test_create_sponsor_with_valid_data(self): def test_create_sponsor_with_valid_data_for_non_required_inputs( self, ): + user = baker.make(settings.AUTH_USER_MODEL) + self.data["description"] = "Important company" self.data["landing_page_url"] = "https://companyx.com" self.data["twitter_handle"] = "@companyx" + self.data["country_of_incorporation"] = "US" + self.data["state_of_incorporation"] = "NY" self.files["print_logo"] = get_static_image_file_as_upload( "psf-logo_print.png", "logo_print.png" ) - form = SponsorshipApplicationForm(self.data, self.files) + form = SponsorshipApplicationForm(self.data, self.files, user=user) self.assertTrue(form.is_valid(), form.errors) sponsor = form.save() @@ -437,6 +444,23 @@ def test_create_sponsor_with_valid_data_for_non_required_inputs( self.assertFalse(form.user_with_previous_sponsors) self.assertEqual(sponsor.landing_page_url, "https://companyx.com") self.assertEqual(sponsor.twitter_handle, "@companyx") + self.assertEqual(sponsor.country_of_incorporation, "US") + self.assertEqual(sponsor.state_of_incorporation, "NY") + + def test_create_sponsor_with_svg_for_print_logo( + self, + ): + tick_svg = Path(settings.STATICFILES_DIRS[0]) / "img"/"sponsors"/"tick.svg" + with tick_svg.open("rb") as fd: + uploaded_svg = SimpleUploadedFile("tick.svg", fd.read()) + self.files["print_logo"] = uploaded_svg + + form = SponsorshipApplicationForm(self.data, self.files) + self.assertTrue(form.is_valid(), form.errors) + + sponsor = form.save() + + self.assertTrue(sponsor.print_logo) def test_use_previous_user_sponsor(self): contact = baker.make(SponsorContact, user__email="foo@foo.com") diff --git a/sponsors/tests/test_management_command.py b/sponsors/tests/test_management_command.py new file mode 100644 index 000000000..100daad2a --- /dev/null +++ b/sponsors/tests/test_management_command.py @@ -0,0 +1,54 @@ +from django.test import TestCase + +from model_bakery import baker + +from unittest import mock + +from sponsors.models import ProvidedTextAssetConfiguration, ProvidedTextAsset +from sponsors.models.enums import AssetsRelatedTo + +from sponsors.management.commands.create_pycon_vouchers_for_sponsors import ( + generate_voucher_codes, + BENEFITS, +) + + +class CreatePyConVouchersForSponsorsTestCase(TestCase): + @mock.patch( + "sponsors.management.commands.create_pycon_vouchers_for_sponsors.api_call", + return_value={"code": 200, "data": {"promo_code": "test-promo-code"}}, + ) + def test_generate_voucher_codes(self, mock_api_call): + for benefit_id, code in BENEFITS.items(): + sponsor = baker.make("sponsors.Sponsor", name="Foo") + sponsorship = baker.make( + "sponsors.Sponsorship", status="finalized", sponsor=sponsor + ) + sponsorship_benefit = baker.make( + "sponsors.SponsorshipBenefit", id=benefit_id + ) + sponsor_benefit = baker.make( + "sponsors.SponsorBenefit", + id=benefit_id, + sponsorship=sponsorship, + sponsorship_benefit=sponsorship_benefit, + ) + quantity = baker.make( + "sponsors.TieredBenefit", + sponsor_benefit=sponsor_benefit, + ) + config = baker.make( + ProvidedTextAssetConfiguration, + related_to=AssetsRelatedTo.SPONSORSHIP.value, + _fill_optional=True, + internal_name=code["internal_name"], + ) + asset = config.create_benefit_feature(sponsor_benefit=sponsor_benefit) + + generate_voucher_codes(2020) + + for benefit_id, code in BENEFITS.items(): + asset = ProvidedTextAsset.objects.get( + sponsor_benefit__id=benefit_id, internal_name=code["internal_name"] + ) + self.assertEqual(asset.value, "test-promo-code") diff --git a/sponsors/tests/test_pdf.py b/sponsors/tests/test_pdf.py deleted file mode 100644 index ec929d05e..000000000 --- a/sponsors/tests/test_pdf.py +++ /dev/null @@ -1,73 +0,0 @@ -from datetime import date -from docxtpl import DocxTemplate -from markupfield_helpers.helpers import render_md -from model_bakery import baker -from pathlib import Path -from unittest.mock import patch, Mock - -from django.conf import settings -from django.http import HttpResponse, HttpRequest -from django.template.loader import render_to_string -from django.test import TestCase -from django.utils.html import mark_safe -from django.utils.dateformat import format - -from sponsors.pdf import render_contract_to_pdf_file, render_contract_to_pdf_response, render_contract_to_docx_response - - -class TestRenderContract(TestCase): - def setUp(self): - self.contract = baker.make_recipe("sponsors.tests.empty_contract", sponsorship__start_date=date.today()) - text = f"{self.contract.benefits_list.raw}\n\n**Legal Clauses**\n{self.contract.legal_clauses.raw}" - html = render_md(text) - self.context = { - "contract": self.contract, - "start_date": self.contract.sponsorship.start_date, - "start_day_english_suffix": format(self.contract.sponsorship.start_date, "S"), - "sponsor": self.contract.sponsorship.sponsor, - "sponsorship": self.contract.sponsorship, - "benefits": [], - "legal_clauses": [], - } - self.template = "sponsors/admin/preview-contract.html" - - # PDF unit tests - @patch("sponsors.pdf.render_to_pdf") - def test_render_pdf_using_django_easy_pdf(self, mock_render): - mock_render.return_value = "pdf content" - - content = render_contract_to_pdf_file(self.contract) - - self.assertEqual(content, "pdf content") - mock_render.assert_called_once_with(self.template, self.context) - - @patch("sponsors.pdf.render_to_pdf_response") - def test_render_response_using_django_easy_pdf(self, mock_render): - response = Mock(HttpResponse) - mock_render.return_value = response - - request = Mock(HttpRequest) - content = render_contract_to_pdf_response(request, self.contract) - - self.assertEqual(content, response) - mock_render.assert_called_once_with(request, self.template, self.context) - - # DOCX unit test - @patch("sponsors.pdf.DocxTemplate") - def test_render_response_with_docx_attachment(self, MockDocxTemplate): - template = Path(settings.TEMPLATES_DIR) / "sponsors" / "admin" / "contract-template.docx" - self.assertTrue(template.exists()) - mocked_doc = Mock(DocxTemplate) - MockDocxTemplate.return_value = mocked_doc - - request = Mock(HttpRequest) - response = render_contract_to_docx_response(request, self.contract) - - MockDocxTemplate.assert_called_once_with(str(template.resolve())) - mocked_doc.render.assert_called_once_with(self.context) - mocked_doc.save.assert_called_once_with(response) - self.assertEqual(response.get("Content-Disposition"), "attachment; filename=contract.docx") - self.assertEqual( - response.get("Content-Type"), - "application/vnd.openxmlformats-officedocument.wordprocessingml.document" - ) diff --git a/sponsors/tests/test_use_cases.py b/sponsors/tests/test_use_cases.py index 433d4950e..3e5e5ad04 100644 --- a/sponsors/tests/test_use_cases.py +++ b/sponsors/tests/test_use_cases.py @@ -118,6 +118,24 @@ def test_update_sponsorship_as_approved_and_create_contract(self): self.assertEqual(self.sponsorship.sponsorship_fee, 100) self.assertEqual(self.sponsorship.package, self.package) self.assertEqual(self.sponsorship.level_name, self.package.name) + self.assertFalse(self.sponsorship.renewal) + + + def test_update_renewal_sponsorship_as_approved_and_create_contract(self): + self.data.update({"renewal": True}) + self.use_case.execute(self.sponsorship, **self.data) + self.sponsorship.refresh_from_db() + + today = timezone.now().date() + self.assertEqual(self.sponsorship.approved_on, today) + self.assertEqual(self.sponsorship.status, Sponsorship.APPROVED) + self.assertTrue(self.sponsorship.contract.pk) + self.assertTrue(self.sponsorship.start_date) + self.assertTrue(self.sponsorship.end_date) + self.assertEqual(self.sponsorship.sponsorship_fee, 100) + self.assertEqual(self.sponsorship.package, self.package) + self.assertEqual(self.sponsorship.level_name, self.package.name) + self.assertEqual(self.sponsorship.renewal, True) def test_send_notifications_using_sponsorship(self): self.use_case.execute(self.sponsorship, **self.data) diff --git a/sponsors/use_cases.py b/sponsors/use_cases.py index 95b2d267e..91271ff64 100644 --- a/sponsors/use_cases.py +++ b/sponsors/use_cases.py @@ -3,7 +3,7 @@ from sponsors import notifications from sponsors.models import Sponsorship, Contract, SponsorContact, SponsorEmailNotificationTemplate, SponsorshipBenefit, \ SponsorshipPackage -from sponsors.pdf import render_contract_to_pdf_file, render_contract_to_docx_file +from sponsors.contracts import render_contract_to_pdf_file, render_contract_to_docx_file class BaseUseCaseWithNotifications: @@ -55,11 +55,14 @@ def execute(self, sponsorship, start_date, end_date, **kwargs): sponsorship.approve(start_date, end_date) package = kwargs.get("package") fee = kwargs.get("sponsorship_fee") + renewal = kwargs.get("renewal", False) if package: sponsorship.package = package sponsorship.level_name = package.name if fee: sponsorship.sponsorship_fee = fee + if renewal: + sponsorship.renewal = True sponsorship.save() contract = Contract.new(sponsorship) diff --git a/sponsors/views_admin.py b/sponsors/views_admin.py index f68025bf9..fd8631d3f 100644 --- a/sponsors/views_admin.py +++ b/sponsors/views_admin.py @@ -14,7 +14,7 @@ from sponsors.forms import SponsorshipReviewAdminForm, SponsorshipsListForm, SignedSponsorshipReviewAdminForm, \ SendSponsorshipNotificationForm, CloneApplicationConfigForm from sponsors.exceptions import InvalidStatusException -from sponsors.pdf import render_contract_to_pdf_response, render_contract_to_docx_response +from sponsors.contracts import render_contract_to_pdf_response, render_contract_to_docx_response from sponsors.models import Sponsorship, SponsorBenefit, EmailTargetable, SponsorContact, BenefitFeature, \ SponsorshipCurrentYear, SponsorshipBenefit, SponsorshipPackage @@ -85,7 +85,11 @@ def approve_sponsorship_view(ModelAdmin, request, pk): ) return redirect(redirect_url) - context = {"sponsorship": sponsorship, "form": form} + context = { + "sponsorship": sponsorship, + "form": form, + "previous_effective": sponsorship.previous_effective_date if sponsorship.previous_effective_date else "UNKNOWN", + } return render(request, "sponsors/admin/approve_application.html", context=context) @@ -182,6 +186,44 @@ def rollback_to_editing_view(ModelAdmin, request, pk): ) +def unlock_view(ModelAdmin, request, pk): + sponsorship = get_object_or_404(ModelAdmin.get_queryset(request), pk=pk) + + if request.method.upper() == "POST" and request.POST.get("confirm") == "yes": + try: + sponsorship.locked = False + sponsorship.save(update_fields=['locked']) + ModelAdmin.message_user( + request, "Sponsorship is now unlocked!", messages.SUCCESS + ) + except InvalidStatusException as e: + ModelAdmin.message_user(request, str(e), messages.ERROR) + + redirect_url = reverse( + "admin:sponsors_sponsorship_change", args=[sponsorship.pk] + ) + return redirect(redirect_url) + + context = {"sponsorship": sponsorship} + return render( + request, + "sponsors/admin/unlock.html", + context=context, + ) + + +def lock_view(ModelAdmin, request, pk): + sponsorship = get_object_or_404(ModelAdmin.get_queryset(request), pk=pk) + + sponsorship.locked = True + sponsorship.save() + + redirect_url = reverse( + "admin:sponsors_sponsorship_change", args=[sponsorship.pk] + ) + return redirect(redirect_url) + + def execute_contract_view(ModelAdmin, request, pk): contract = get_object_or_404(ModelAdmin.get_queryset(request), pk=pk) diff --git a/static/fonts/Pythonicon.eot b/static/fonts/Pythonicon.eot old mode 100755 new mode 100644 index db8f2b452..f36815ed5 Binary files a/static/fonts/Pythonicon.eot and b/static/fonts/Pythonicon.eot differ diff --git a/static/fonts/Pythonicon.json b/static/fonts/Pythonicon.json old mode 100755 new mode 100644 index 05f5b6a8b..ddcdbc09f --- a/static/fonts/Pythonicon.json +++ b/static/fonts/Pythonicon.json @@ -1,787 +1,1121 @@ { - "IcoMoonType": "selection", - "icons": [ - { - "icon": { - "paths": [ - "M1024 429.256c0-200.926-58.792-363.938-131.482-365.226 0.292-0.006 0.578-0.030 0.872-0.030h-82.942c0 0-194.8 146.336-475.23 203.754-8.56 45.292-14.030 99.274-14.030 161.502 0 62.228 5.466 116.208 14.030 161.5 280.428 57.418 475.23 203.756 475.23 203.756h82.942c-0.292 0-0.578-0.024-0.872-0.032 72.696-1.288 131.482-164.298 131.482-365.224zM864.824 739.252c-9.382 0-19.532-9.742-24.746-15.548-12.63-14.064-24.792-35.96-35.188-63.328-23.256-61.232-36.066-143.31-36.066-231.124 0-87.81 12.81-169.89 36.066-231.122 10.394-27.368 22.562-49.266 35.188-63.328 5.214-5.812 15.364-15.552 24.746-15.552 9.38 0 19.536 9.744 24.744 15.552 12.634 14.064 24.796 35.958 35.188 63.328 23.258 61.23 36.068 143.312 36.068 231.122 0 87.804-12.81 169.888-36.068 231.124-10.39 27.368-22.562 49.264-35.188 63.328-5.208 5.806-15.36 15.548-24.744 15.548zM251.812 429.256c0-51.95 3.81-102.43 11.052-149.094-47.372 6.554-88.942 10.324-140.34 10.324-67.058 0-67.058 0-67.058 0l-55.466 94.686v88.17l55.46 94.686c0 0 0 0 67.060 0 51.398 0 92.968 3.774 140.34 10.324-7.236-46.664-11.048-97.146-11.048-149.096zM368.15 642.172l-127.998-24.51 81.842 321.544c4.236 16.634 20.744 25.038 36.686 18.654l118.556-47.452c15.944-6.376 22.328-23.964 14.196-39.084l-123.282-229.152zM864.824 548.73c-3.618 0-7.528-3.754-9.538-5.992-4.87-5.42-9.556-13.86-13.562-24.408-8.962-23.6-13.9-55.234-13.9-89.078 0-33.844 4.938-65.478 13.9-89.078 4.006-10.548 8.696-18.988 13.562-24.408 2.010-2.24 5.92-5.994 9.538-5.994 3.616 0 7.53 3.756 9.538 5.994 4.87 5.42 9.556 13.858 13.56 24.408 8.964 23.598 13.902 55.234 13.902 89.078 0 33.842-4.938 65.478-13.902 89.078-4.004 10.548-8.696 18.988-13.56 24.408-2.008 2.238-5.92 5.992-9.538 5.992z" - ], - "tags": [ - "bullhorn", - "megaphone", - "announcement", - "advertisement", - "news" - ], - "grid": 16 - }, - "properties": { - "order": 1, - "id": 28, - "prevSize": 32, - "code": 58880, - "name": "bullhorn", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M620.62 12.098c-40.884-6.808-83.266-9.918-123.999-9.728-40.695 0.19-79.569 3.622-113.74 9.728-100.693 17.806-118.993 54.974-118.993 123.657v90.738h238.004v30.208h-327.282c-69.177 0-129.764 41.624-148.689 120.68-21.883 90.662-22.85 147.266 0 241.873 16.934 70.466 57.287 120.68 126.502 120.68h81.787v-108.753c0-78.583 68.001-147.797 148.67-147.797h237.739c66.143 0 118.955-54.556 118.955-120.984v-226.664c-0-64.455-54.405-112.905-118.955-123.639zM395.681 166.021c-24.671 0-44.658-20.215-44.658-45.227 0-25.050 19.987-45.473 44.658-45.473 24.557 0 44.658 20.423 44.658 45.473 0.019 24.993-20.082 45.227-44.658 45.227z", - "M995.157 394.923c-17.067-68.798-49.74-120.623-118.955-120.623h-89.335v105.662c0 82.034-69.48 150.945-148.67 150.945h-237.72c-65.119 0-118.974 55.732-118.974 120.927v226.588c0 64.493 56.073 102.438 118.974 120.946 75.34 22.13 147.589 26.131 237.739 0 59.885-17.332 118.993-52.281 118.993-120.946v-90.738h-237.701v-30.189h356.712c69.139 0 94.967-48.242 118.955-120.642 24.841-74.562 23.799-146.242-0.019-241.929zM625.417 848.194c24.652 0 44.639 20.177 44.639 45.189 0 25.145-19.987 45.454-44.639 45.454-24.614 0-44.658-20.309-44.658-45.454 0-24.993 20.063-45.189 44.658-45.189z" - ], - "grid": 0, - "tags": [ - "python-alt" - ] - }, - "properties": { - "order": 2, - "id": 0, - "prevSize": 24, - "code": 58881, - "name": "python-alt", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-2.37h-521.481c-138.221 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.038 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM958.369 763.183c0 100.447-95.63 195.489-195.508 195.489h-502.348c-97.033 0-195.527-95.042-195.527-195.489v-65.479h893.364v65.479zM958.369 636.075h-893.364v-253.649h893.364v253.649zM958.369 320.796h-893.364v-59.999c0-96.446 96.104-195.489 195.527-195.489h502.348c99.878 0 195.508 99.044 195.508 195.489v59.999zM383.924 223.611h260.741v-61.63h-260.741v61.63zM644.665 479.611h-260.741v61.63h260.741v-61.63zM644.665 797.26h-260.741v61.63h260.741v-61.63z" - ], - "grid": 0, - "tags": [ - "pypi" - ] - }, - "properties": { - "order": 3, - "id": 0, - "prevSize": 24, - "code": 58882, - "name": "pypi", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M957.63 189.212v574.805c0 94.853-64 128.531-64 128.531s0-730.624 0-895.962l-893.63 1.043v771.66c0 138.221 113.076 251.259 251.259 251.259h519.111c138.183 0 251.259-113.038 251.259-251.259v-580.286l-64 0.209zM831.393 930.74c0 0-25.998 23.514-72.59 23.514 0 0-426.515 1.157-497.436 1.157-91.041 0-196.058-97.527-196.058-192.891s0.967-700.094 0.967-700.094h765.118v868.314z", - "M770.37 173.511v-47.407h-636.833v125.63h636.833z", - "M133.537 378.937h315.24v65.574h-315.24v-65.574z", - "M133.537 761.363h635.24v65.574h-635.24v-65.574z", - "M133.537 506.937h315.24v65.574h-315.24v-65.574z", - "M133.537 632.567h315.24v65.574h-315.24v-65.574z", - "M770.37 630.215v-251.278h-259.963v320.019h259.963z" - ], - "grid": 0, - "tags": [ - "news" - ] - }, - "properties": { - "order": 4, - "id": 0, - "prevSize": 32, - "code": 58883, - "name": "news", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM409.335 764.188c-52.679 0-95.384-42.705-95.384-95.403 0-38.116 22.528-70.751 54.898-86.016l42.648-197.879 45.378 201.709c28.463 16.479 47.825 46.952 47.825 82.185-0.019 52.698-42.705 95.403-95.365 95.403zM409.335 323.205c-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283 35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.111-13.502-77.065-21.087-118.86-21.087zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" - ], - "grid": 0, - "tags": [ - "moderate" - ] - }, - "properties": { - "order": 5, - "id": 0, - "prevSize": 32, - "code": 58884, - "name": "moderate", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M855.249 128.341c23.211 0 42.78 19.608 42.78 42.78v680.941c0 23.211-19.57 42.78-42.78 42.78h-680.96c-23.192 0-42.78-19.57-42.78-42.78v-680.941c0-23.192 19.608-42.78 42.78-42.78h680.96M855.249 0h-680.96c-94.113 0-171.122 77.009-171.122 171.122v680.941c0 94.132 77.009 171.122 171.122 171.122h680.941c94.132 0 171.122-77.009 171.122-171.122v-680.941c0.019-94.094-76.99-171.122-171.103-171.122v0z", - "M421.812 682.401v-205.464h-118.519v205.464h-64.853v-464.915h64.853v203.321h118.519v-203.321h65.593v464.934h-65.593z", - "M666.131 839.054c-76.516 0-124.549-49.512-124.549-115.105 0-51.010 27.629-84.556 56.813-96.18l-29.886-32.047c0.702-21.144 16.043-40.789 32.047-49.55-26.226-19.646-42.249-48.792-42.249-90.321 0-64.152 41.51-110.099 104.922-110.099 15.322 0 26.965 2.219 35.707 5.12 10.942 3.622 22.604 5.803 37.129 5.803 16.043 0 31.346-5.803 40.088-11.605l8.761 51.75c-4.399 3.622-17.503 8.021-26.965 8.021 5.784 10.923 10.183 29.146 10.183 51.029 0 59.752-37.888 108.544-102.040 110.023-21.106 0-33.527 5.784-33.527 18.223 0 4.361 3.66 11.643 11.681 14.601l63.374 21.826c51.75 17.484 81.636 53.21 81.636 110.080 0.038 61.080-48.052 108.43-123.127 108.43zM690.195 671.497l-40.808-11.7c-31.308 2.939-51.75 26.245-51.75 64.834 0 33.545 22.604 65.65 67.755 65.65 43.748 0 65.612-30.625 65.612-59.733 0.019-27.743-13.843-51.75-40.808-59.051zM663.249 394.562c-27.743 0-48.090 26.965-48.090 61.25 0 34.949 20.347 61.175 48.090 61.175 26.226 0 48.773-26.226 48.773-61.175 0.019-34.285-20.347-61.25-48.773-61.25z" - ], - "grid": 0, - "tags": [ - "mercurial" - ] - }, - "properties": { - "order": 6, - "id": 0, - "prevSize": 32, - "code": 58885, - "name": "mercurial", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M899.167 678.665l-291.499 50.157v29.412c0 45.151-50.498 81.655-94.872 81.655-44.582 0-94.834-36.504-94.834-81.655v-29.412l-291.537-50.157c-69.101 0-125.63-63.962-125.63-63.962v282.074c0 69.12 56.529 125.63 125.63 125.63h772.741c69.101 0 125.63-56.51 125.63-125.63v-282.074c0 0-56.529 63.962-125.63 63.962z", - "M899.167 254.369h-194.37v-66.37c0.19-36.030-11.397-69.367-35.366-92.35-23.893-23.059-57.079-33.413-92.634-33.28h-130.37c-35.593-0.114-68.779 10.221-92.653 33.28-24.007 22.983-35.556 56.32-35.366 92.35v66.37h-191.981c-69.101 0-125.63 56.529-125.63 125.63v128c0 69.12 56.529 125.63 125.63 125.63l339.039 56.168v52.338c0 26.491 21.163 47.938 47.332 47.938 26.055 0 47.369-21.447 47.369-47.938v-52.357l339.001-56.149c69.101 0 125.63-56.51 125.63-125.63v-128c0-69.101-56.529-125.63-125.63-125.63zM384.777 187.999c0.19-23.268 6.466-36.143 15.019-44.582 8.704-8.306 22.907-14.601 46.63-14.715h130.37c23.666 0.114 37.907 6.391 46.573 14.715 8.571 8.439 14.81 21.314 15.057 44.582-0.019 21.902-0.019 45.416-0.019 66.37h-253.63c0-20.954 0-44.468 0-66.37z" - ], - "grid": 0, - "tags": [ - "jobs" - ] - }, - "properties": { - "order": 7, - "id": 0, - "prevSize": 32, - "code": 58886, - "name": "jobs", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-0.019h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.038-251.278-251.259-251.278zM593.029 896.777h-185.401v-189.573h185.401v189.573zM748.791 409.429c-14.639 24.652-44.601 54.746-89.809 90.283-31.497 24.955-51.39 44.999-59.639 60.113-8.287 15.132-12.383 55.751-12.383 80.1h-177.778v-38.703c0-30.246 3.432-54.803 10.297-73.671 6.865-18.887 17.048-36.087 30.625-51.693 13.577-15.588 44.051-43.046 91.458-82.318 25.259-20.594 37.888-39.462 37.888-56.604s-5.082-30.473-15.208-39.993c-10.126-9.5-25.505-14.26-46.080-14.26-22.168 0-40.467 7.339-54.955 21.978-14.526 14.658-23.78 40.22-27.838 76.724l-181.495-22.452c6.239-66.731 30.473-120.453 72.742-161.166 42.268-40.695 107.046-61.042 194.351-61.042 68.001 0 122.861 14.184 164.693 42.572 56.737 38.362 85.106 89.505 85.106 153.429-0 26.51-7.301 52.072-21.978 76.705z" - ], - "grid": 0, - "tags": [ - "help" - ] - }, - "properties": { - "order": 8, - "id": 0, - "prevSize": 32, - "code": 63, - "name": "help", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M129.271 383.507l383.166 382.805 380.075-382.805h-190.255v-320.076h-382.085v320.076z", - "M736.484 635.657l-224.047 225.47-225.375-225.185h-288.161v135.149c0 138.202 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.057 251.259-251.259v-135.149l-286.417-0.284z" - ], - "grid": 0, - "tags": [ - "download" - ] - }, - "properties": { - "order": 10, - "id": 0, - "prevSize": 32, - "code": 58889, - "name": "download", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M731.439 149.751l-25.031 39.329-90.529-57.628-186.292 292.636 39.974 25.467 160.825-252.644 50.574 32.161-331.473 520.742 9.937 51.333-36.162 57.666 6.201 30.853 30.891-7.623 35.669-56.889 52.148-12.516 381.933-600.064z", - "M772.741-2.37h-521.481c-138.202 0-251.259 113.057-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.076-251.259-251.259-251.259zM99.366 811.179c-26.169 0-47.332-21.447-47.332-47.919 0-26.624 21.163-48.223 47.332-48.223 26.055 0 47.369 21.599 47.369 48.223-0.019 26.472-21.314 47.919-47.369 47.919zM99.366 557.549c-26.169 0-47.332-21.447-47.332-47.938 0-26.605 21.163-48.223 47.332-48.223 26.055 0 47.369 21.618 47.369 48.223-0.019 26.491-21.314 47.938-47.369 47.938zM99.366 303.919c-26.169 0-47.332-21.428-47.332-47.938 0-26.605 21.163-48.223 47.332-48.223 26.055 0 47.369 21.618 47.369 48.223-0.019 26.51-21.314 47.938-47.369 47.938zM955.259 735.365c0 119.637-97.887 217.524-217.524 219.895l-543.365-1.745v-886.689l543.365-0.455c119.637 0 217.524 97.887 217.524 217.524v451.47z" - ], - "grid": 0, - "tags": [ - "documentation" - ] - }, - "properties": { - "order": 11, - "id": 0, - "prevSize": 32, - "code": 58890, - "name": "documentation", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M512.986 682.989c57.647 0 104.277-46.592 104.277-104.183 0-57.496-46.63-104.145-104.277-104.145-57.458 0-104.164 46.649-104.164 104.145 0.019 57.591 46.706 104.183 104.164 104.183", - "M763.733 711.32c45.378 0 82.072-36.674 82.072-81.996 0-45.265-36.712-81.958-82.072-81.958-45.189 0-81.996 36.712-81.996 81.958 0 45.321 36.826 81.996 81.996 81.996", - "M785.749 748.791c-39.045 0-73.519 17.863-95.004 45.303 7.851 16.839 12.231 35.423 12.231 54.955v110.042h200.666v-99.556c-0.019-61.156-52.717-110.744-117.893-110.744", - "M260.305 711.32c45.189 0 81.996-36.674 81.996-81.996 0-45.265-36.807-81.958-81.996-81.958-45.359 0-82.091 36.712-82.091 81.958-0 45.321 36.731 81.996 82.091 81.996", - "M238.308 748.791c-65.195 0-117.893 49.569-117.893 110.744v99.556h200.666v-110.042c0-19.532 4.38-38.135 12.212-54.955-21.466-27.42-55.96-45.303-94.985-45.303", - "M512.986 714.562c-84.689 0-153.259 64.417-153.259 143.91v162.437h306.498v-162.437c0-79.493-68.494-143.91-153.24-143.91", - "M891.847 129.119c0-70.068-169.491-126.919-379.051-126.919-208.896-0-378.728 56.851-378.728 126.919 0 44.108 67.167 82.906 168.903 105.662l-16.801 173.018 96.332-159.611c25.429 3.129 52.072 5.385 79.72 6.637l49.247 193.858 49.19-193.726c28.729-1.214 56.358-3.527 82.697-6.751l96.332 159.592-16.801-172.999c101.888-22.737 168.96-61.554 168.96-105.681z" - ], - "grid": 0, - "tags": [ - "community" - ] - }, - "properties": { - "order": 12, - "id": 0, - "prevSize": 32, - "code": 58891, - "name": "community", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM316.151 402.015l-124.947 108.241 124.947 108.241v112.242l-254.521-220.482 254.521-220.482v112.242zM461.577 825.135l-76.383-0.265 170.591-630.803 77.103-0.91-171.311 631.979zM699.164 725.94v-112.242l119.41-103.443-119.41-103.443v-112.242l248.984 215.685-248.984 215.685z" - ], - "grid": 0, - "tags": [ - "code" - ] - }, - "properties": { - "order": 13, - "id": 0, - "prevSize": 32, - "code": 58892, - "name": "code", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-2.37h-521.481c-138.183 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.038-251.259-251.259-251.259zM825.742 670.758l-155.117 155.098-160.18-160.18-160.199 160.218-155.136-155.136 160.199-160.218-160.199-160.218 155.136-155.098 160.18 160.199 160.18-160.199 155.117 155.098-160.18 160.218 160.199 160.218z" - ], - "grid": 0, - "tags": [ - "close" - ] - }, - "properties": { - "order": 14, - "id": 0, - "prevSize": 32, - "code": 88, - "name": "close", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM765.63 82.849c26.586 0 48.223 21.144 48.223 47.332 0 26.036-21.637 47.351-48.223 47.351-26.472 0-47.919-21.314-47.919-47.351 0-26.188 21.447-47.332 47.919-47.332zM512 82.849c26.586 0 48.223 21.144 48.223 47.332 0 26.036-21.637 47.351-48.223 47.351-26.491 0-47.919-21.314-47.919-47.351 0-26.188 21.428-47.332 47.919-47.332zM258.37 82.849c26.605 0 48.223 21.144 48.223 47.332 0 26.036-21.618 47.351-48.223 47.351-26.491 0-47.919-21.314-47.919-47.351 0-26.188 21.428-47.332 47.919-47.332zM732.843 953.666h-451.47c-119.637 0-217.524-97.887-219.895-217.524l1.745-479.365h886.689l0.455 479.365c0 119.637-97.887 217.524-217.524 217.524z", - "M533.561 320.796h150.528v146.963h-150.528v-146.963z", - "M737.583 320.796h150.528v146.963h-150.528v-146.963z", - "M125.44 534.111h150.528v146.963h-150.528v-146.963z", - "M329.5 534.111h150.528v146.963h-150.528v-146.963z", - "M533.561 534.111h150.528v146.963h-150.528v-146.963z", - "M737.583 534.111h150.528v146.963h-150.528v-146.963z", - "M275.968 894.407v-146.963h-150.528c0 82.887 83.209 146.963 150.528 146.963z", - "M329.5 747.444h150.528v146.963h-150.528v-146.963z", - "M533.561 747.444h150.528v146.963h-150.528v-146.963z" - ], - "grid": 0, - "tags": [ - "calendar" - ] - }, - "properties": { - "order": 15, - "id": 0, - "prevSize": 32, - "code": 58894, - "name": "calendar", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM409.335 764.188c-52.679 0-95.384-42.705-95.384-95.403 0-9.956 1.972-19.38 4.798-28.425l-111.426-172.677 174.364 110.327c8.799-2.693 17.958-4.551 27.648-4.551 52.66 0 95.346 42.705 95.346 95.327 0 52.698-42.686 95.403-95.346 95.403zM409.335 323.205c-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283 35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.111-13.502-77.065-21.087-118.86-21.087zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" - ], - "grid": 0, - "tags": [ - "beginner" - ] - }, - "properties": { - "order": 16, - "id": 0, - "prevSize": 32, - "code": 58895, - "name": "beginner", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM508.207 127.583c35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.092-13.521-77.047-21.087-118.86-21.087-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM502.253 647.964c1.498 6.713 2.427 13.653 2.427 20.821 0 52.698-42.686 95.403-95.346 95.403-52.679 0-95.384-42.705-95.384-95.403 0-52.622 42.705-95.327 95.384-95.327 12.459 0 24.292 2.56 35.195 6.884l169.851-109.625-112.128 177.247zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" - ], - "grid": 0, - "tags": [ - "advanced" - ] - }, - "properties": { - "order": 17, - "id": 0, - "prevSize": 32, - "code": 58896, - "name": "advanced", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM197.215 189.212h279.078v-61.231h71.149v61.231h286.189v194.75h-286.189v61.668h-71.149v-61.687h-279.078l-103.329-96.18 103.329-98.551zM824.149 701.175h-276.708v255.64h-71.149v-255.64h-281.448v-193.517h629.305l103.367 97.337-103.367 96.18z" - ], - "grid": 0, - "tags": [ - "sitemap" - ] - }, - "properties": { - "order": 18, - "id": 0, - "prevSize": 32, - "code": 58897, - "name": "sitemap", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M190.843 190.445c-78.431 78.507-78.431 205.577-0.038 284.027 78.412 78.374 205.596 78.412 284.008-0.019s78.412-205.559-0.038-283.951c-78.374-78.431-205.521-78.431-283.932-0.057zM442.216 358.343c-0.095-75.34-60.966-136.211-136.23-136.306v-26.795c90.055 0 163.025 73.045 163.1 163.119h-26.871zM770.37-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM944.242 838.447l-104.695 104.676c-15.663 15.701-41.169 15.663-56.87-0.019l-253.421-253.421c-15.701-15.72-15.701-41.188 0-56.908l27.781-27.781-61.857-61.876c-104.448 80.668-254.843 73.311-350.587-22.433-103.993-103.974-103.993-272.517 0-376.491 103.955-103.936 272.517-103.936 376.491 0.019 95.441 95.46 103.007 245.286 23.078 349.677l61.971 61.952 27.8-27.8c15.72-15.663 41.207-15.644 56.908 0l253.402 253.44c15.72 15.758 15.739 41.244 0 56.965z" - ], - "grid": 0, - "tags": [ - "search" - ] - }, - "properties": { - "order": 19, - "id": 0, - "prevSize": 32, - "code": 58898, - "name": "search", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M190.843 190.445c-78.431 78.507-78.431 205.577-0.038 284.027 78.412 78.374 205.596 78.412 284.008-0.019s78.412-205.559-0.038-283.951c-78.374-78.431-205.521-78.431-283.932-0.057zM442.216 358.343c-0.095-75.34-60.966-136.211-136.23-136.306v-26.795c90.055 0 163.025 73.045 163.1 163.119h-26.871zM944.242 838.447l-104.695 104.676c-15.663 15.701-41.169 15.663-56.87-0.019l-253.421-253.421c-15.701-15.72-15.701-41.188 0-56.908l27.781-27.781-61.857-61.876c-104.448 80.668-254.843 73.311-350.587-22.433-103.993-103.974-103.993-272.517 0-376.491 103.955-103.936 272.517-103.936 376.491 0.019 95.441 95.46 103.007 245.286 23.078 349.677l61.971 61.952 27.8-27.8c15.72-15.663 41.207-15.644 56.908 0l253.402 253.44c15.72 15.758 15.739 41.244 0 56.965z" - ], - "grid": 0, - "tags": [ - "search-alt" - ] - }, - "properties": { - "order": 20, - "id": 0, - "prevSize": 32, - "code": 58899, - "name": "search-alt", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M607.991 863.573c20.309 0 36.788-16.744 36.788-37.509 0-20.632-16.479-37.262-36.788-37.262-20.29 0-36.807 16.631-36.807 37.262 0 20.764 16.517 37.509 36.807 37.509zM418.475 151.249c-20.328 0-36.826 16.858-36.826 37.528 0 20.613 16.498 37.3 36.826 37.3 20.309 0 36.864-16.687 36.845-37.3-0-20.67-16.555-37.528-36.845-37.528zM772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.038 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM285.279 609.735v89.714h-67.47c-57.079 0-90.377-41.434-104.334-99.556-18.849-78.014-18.053-124.719 0-199.509 15.607-65.195 65.593-99.537 122.652-99.537h269.995v-24.917h-196.343v-74.847c0-56.623 15.113-87.305 98.152-101.983 28.179-5.025 60.245-7.87 93.81-8.021 33.583-0.171 68.57 2.389 102.305 8.021 53.267 8.856 98.152 48.83 98.152 101.964v186.956c0 54.803-43.596 99.802-98.152 99.802h-196.134c-66.541 0.019-122.633 57.135-122.633 121.913zM912.991 614.438c-19.816 59.733-41.112 99.556-98.152 99.556h-294.21v24.879h196.077v74.828c0 56.642-48.735 85.466-98.152 99.783-74.373 21.542-133.973 18.242-196.115 0-51.902-15.284-98.133-46.573-98.133-99.783v-186.899c0-53.779 44.411-99.764 98.133-99.764h196.096c65.308 0 122.633-56.832 122.633-124.492v-87.173h73.69c57.116 0 84.044 42.761 98.152 99.518 19.627 78.943 20.48 138.069-0.019 199.547z" - ], - "grid": 0, - "tags": [ - "python" - ] - }, - "properties": { - "order": 21, - "id": 0, - "prevSize": 32, - "code": 58900, - "name": "python", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M653.672 373.077c-32.521 0-58.861 26.908-58.861 59.98 0 32.977 26.34 59.62 58.861 59.62 32.446 0 58.899-26.624 58.899-59.62 0-33.071-26.453-59.98-58.899-59.98zM393.216 373.077c-32.54 0-58.88 26.908-58.88 59.98 0 32.977 26.34 59.62 58.88 59.62 32.351 0 58.88-26.624 58.88-59.62 0-33.071-26.529-59.98-58.88-59.98zM772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM853.807 399.474c0 32.275-4.248 60.568-12.117 85.694l-2.882 9.14c-1.517 4.21-3.413 8.533-5.367 12.933l-4.229 9.083c-33.849 67.413-101.812 105.472-198.58 120.396l-11.719 1.801 7.927 8.761c19.361 21.39 28.843 43.653 30.303 67.47v171.672c0.057 13.502 5.404 24.614 13.672 33.887-34.854-2.313-58.785-15.227-58.823-37.054v-143.019c0-18.773-17.73-20.518-20.006-20.518-0.796 0-1.441 0.114-1.877 0.209l-4.798 1.176v5.006c0 0 0 153.6 0 169.586-0.19 11.928 2.465 22.509 9.178 31.801-38.381-1.877-53.267-19.589-53.855-40.695 0 0.038 0-147.949 0-156.331 0-8.306-7.471-12.667-13.047-12.667-5.784 0-13.16 4.399-13.16 12.667-0.038 8.268-0.038 164.087-0.038 164.087-0.74 23.097-24.102 31.801-56.548 32.787 5.158-7.301 9.254-16.194 9.235-28.065v-180.053l-6.808 0.531c-0.171 0-19.001 1.365-19.589 20.461v146.792c-0.057 18.318-21.011 36.75-54.405 38.4 6.428-8.078 10.335-18.375 10.202-30.663v-119.182h-57.742c-107.179 1.138-101.224-97.261-162.854-146.66 56.737 6.713 80.801 85.845 155.003 87.685 45.359 0 56.623 0 56.623 0h5.575l0.702-5.537c3.3-25.335 15.55-47.388 39.367-66.807l11.681-9.576-14.905-1.669c-105.946-12.629-176.981-51.655-213.883-117.153l-5.082-9.121c-1.953-3.906-3.812-8.363-5.727-13.028l-3.565-9.14c-9.633-26.624-14.943-57.135-15.436-91.61-0.019-1.46-0.019-2.788-0.019-4.172 0.057-58.482 16.194-110.345 56.908-153.562l2.446-2.655-0.891-3.356c-5.348-20.196-7.813-40.505-7.889-60.928 0.038-24.804 3.812-49.778 10.923-75.055 46.364 2.958 93.544 19.342 141.919 52.034l2.219 1.46 2.655-0.569c39.633-8.647 79.379-12.705 119.068-12.705 41.036 0 82.072 4.38 123.089 12.705l2.731 0.512 2.257-1.555c41.358-29.374 87.381-46.611 138.847-51.712 8.495 28.786 13.464 57.534 13.464 86.13 0 12.971-0.967 25.96-3.148 38.969l-0.436 2.788 1.82 2.238c37.395 46.156 60.928 101.205 61.705 172.544-0.133 1.081-0.095 2.276-0.095 3.413z" - ], - "grid": 0, - "tags": [ - "github" - ] - }, - "properties": { - "order": 22, - "id": 0, - "prevSize": 32, - "code": 58901, - "name": "github", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M511.924 578.37c33.489 0 60.7-24.367 60.7-63.147v-445.8c0-38.836-27.231-63.109-60.7-63.109-33.527 0-60.681 24.273-60.681 63.109v445.8c0 38.779 27.174 63.147 60.681 63.147zM703.924 104.107v146.015c95.554 62.407 158.853 169.965 158.853 292.599 0 193.214-156.691 349.886-349.98 349.886-193.308 0-350.018-156.672-350.018-349.886 0-122.292 62.957-229.623 158.056-292.124v-146.053c-168.77 74.012-286.853 242.157-286.853 438.272 0 264.439 214.376 478.815 478.815 478.815 264.42 0 478.796-214.376 478.796-478.815 0-196.418-118.424-364.904-287.668-438.708z" - ], - "grid": 0, - "tags": [ - "get-started" - ] - }, - "properties": { - "order": 23, - "id": 0, - "prevSize": 32, - "code": 58902, - "name": "get-started", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37 0h-521.481c-138.202 0-251.259 113.057-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.076-251.259-251.259-251.259zM299.255 842.183c-65.043 0-117.76-52.698-117.76-117.741s52.717-117.741 117.76-117.741c65.005 0 117.722 52.698 117.722 117.741s-52.736 117.741-117.722 117.741zM611.745 827.923h-145.351c18.679-30.113 29.62-65.479 29.62-103.481 0-108.658-88.102-196.817-196.76-196.817-39.993 0-77.084 12.004-108.146 32.484v-146.508c33.906-11.795 70.182-18.565 108.146-18.66 181.931 0.322 329.14 147.551 329.463 329.481-0.095 36.162-6.163 70.903-16.972 103.5zM843.036 827.923h-149.030c8.666-33.109 13.786-67.698 13.786-103.519-0.057-225.64-182.936-408.5-408.519-408.519-37.528 0-73.633 5.48-108.146 14.943v-149.352c34.987-6.903 71.111-10.638 108.146-10.638 305.759 0 553.567 247.865 553.567 553.567-0.019 35.366-3.508 69.973-9.804 103.519z" - ], - "grid": 0, - "tags": [ - "feed" - ] - }, - "properties": { - "order": 24, - "id": 0, - "prevSize": 32, - "code": 58903, - "name": "feed", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM677.812 507.563h-105.453v381.952h-157.999v-381.952h-79v-131.622h79v-79.038c0-107.368 44.601-171.255 171.179-171.255h105.472v131.641h-65.896c-49.323 0-52.584 18.413-52.584 52.717l-0.19 65.934h119.448l-13.976 131.622z" - ], - "grid": 0, - "tags": [ - "facebook" - ] - }, - "properties": { - "order": 25, - "id": 0, - "prevSize": 32, - "code": 58904, - "name": "facebook", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M896 188.056h-772.741c-69.101 0-125.63 56.529-125.63 125.63v5.177l509.63 253.193 514.37-255.545v-2.825c0-69.101-56.529-125.63-125.63-125.63zM1021.63 635.032v-252.169l-253.175 125.781 253.175 126.388zM-2.37 385.233v248.225l249.211-124.416-249.211-123.809zM507.259 638.426l-192.341-95.554-317.269 157.582c0.209 68.93 56.642 125.231 125.611 125.231h772.741c68.437 0 124.492-55.505 125.535-123.714l-321.138-159.497-193.138 95.953z" - ], - "grid": 0, - "tags": [ - "email" - ] - }, - "properties": { - "order": 26, - "id": 0, - "prevSize": 32, - "code": 58905, - "name": "email", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-2.37h-521.481c-138.183 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.076 251.259 251.259 251.259h521.481c138.202 0 251.278-113.057 251.278-251.259v-521.481c0-138.183-113.076-251.259-251.278-251.259zM705.252 507.885v320.057h-382.066v-320.057h-190.255l380.094-382.824 383.166 382.824h-190.938z" - ], - "grid": 0, - "tags": [ - "arrow-up" - ] - }, - "properties": { - "order": 27, - "id": 0, - "prevSize": 32, - "code": 58906, - "name": "arrow-up", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-2.37h-521.481c-138.221 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.038 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM511.374 896.19v-190.938h-320.076v-382.066h320.076v-190.255l382.824 380.075-382.824 383.185z" - ], - "grid": 0, - "tags": [ - "arrow-right" - ] - }, - "properties": { - "order": 28, - "id": 0, - "prevSize": 32, - "code": 58907, - "name": "arrow-right", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-2.389h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.038-251.278-251.259-251.278zM827.961 696.073h-320.076v190.255l-382.824-380.094 382.824-383.166v190.919h320.076v382.085z" - ], - "grid": 0, - "tags": [ - "arrow-left" - ] - }, - "properties": { - "order": 29, - "id": 0, - "prevSize": 32, - "code": 58908, - "name": "arrow-left", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.389-2.37h-521.481c-138.202 0-251.278 113.038-251.278 251.259v521.481c0 138.183 113.076 251.259 251.278 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.221-113.076-251.259-251.259-251.259zM506.254 894.18l-383.166-382.805h190.9v-320.076h382.085v320.076h190.255l-380.075 382.805z" - ], - "grid": 0, - "tags": [ - "arrow-down" - ] - }, - "properties": { - "order": 30, - "id": 0, - "prevSize": 32, - "code": 58909, - "name": "arrow-down", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.038 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM309.627 826.273c-99.859 0-180.812-80.953-180.812-180.793 0-99.821 80.953-180.774 180.812-180.774 27.364 0 53.267 6.277 76.535 17.18l-54.689 94.701c-6.884-2.238-14.241-3.451-21.845-3.451-39.936 0-72.325 32.37-72.325 72.306s32.389 72.344 72.325 72.344c35.537 0 65.062-25.714 71.111-59.506h109.037c-6.618 93.848-84.632 167.993-180.148 167.993zM438.234 306.593c0 19.456 7.737 37.035 20.215 50.081l-55.068 95.308c-44.563-32.92-73.652-85.694-73.652-145.389 0-99.821 80.953-180.774 180.812-180.774 99.84 0 180.774 80.934 180.774 180.774 0 59.582-28.937 112.318-73.406 145.237l-55.049-95.384c12.364-13.009 20.044-30.492 20.044-49.854 0-39.936-32.446-72.325-72.344-72.325-39.936 0-72.325 32.389-72.325 72.325zM708.475 826.216c-95.554 0-173.549-74.145-180.148-167.955h109.037c6.030 33.83 35.556 59.525 71.111 59.525 39.898 0 72.287-32.37 72.287-72.325 0-39.917-32.37-72.287-72.287-72.287-6.599 0-12.99 0.967-19.039 2.636l-54.917-95.175c22.585-10.145 47.597-15.948 73.956-15.948 99.859 0 180.774 80.934 180.774 180.755s-80.915 180.774-180.774 180.774z" - ], - "grid": 0, - "tags": [ - "freenode" - ] - }, - "properties": { - "order": 31, - "id": 0, - "prevSize": 32, - "code": 58910, - "name": "freenode", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M990.701 763.98l-336.175-688.014c-58.69-104.41-224.616-92.558-269.483-1.214l-345.353 690.479c-74.828 142.279-0.929 258.769 164.162 258.769h620.165c165.073 0 240.090-117.020 166.684-260.020zM607.744 891.259h-185.401v-189.573h185.401v189.573zM610.057 384l-33.716 253.080h-122.728l-33.185-253.080v-192h189.63v192z" - ], - "grid": 0, - "tags": [ - "alert" - ] - }, - "properties": { - "order": 32, - "id": 0, - "prevSize": 32, - "code": 58911, - "name": "alert", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M61.554 313.685l450.37-187.259 445.63 187.259-445.63 189.63z", - "M511.924 569.666l-297.415-125.212-152.955 63.602 450.37 189.611 445.63-189.611-151.343-63.602z", - "M511.924 761.666l-297.415-125.231-152.955 63.602 450.37 189.63 445.63-189.63-151.343-63.602z" - ], - "grid": 0, - "tags": [ - "versions" - ] - }, - "properties": { - "order": 33, - "id": 0, - "prevSize": 32, - "code": 58912, - "name": "versions", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M688.583 286.227c-24.728 0-44.715 20.461-44.715 45.587 0 25.012 19.987 45.246 44.715 45.246 24.595 0 44.753-20.252 44.734-45.246 0.019-25.126-20.139-45.587-44.734-45.587zM772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM816.488 392.021c10.449 231.519-162.588 475.136-468.158 475.136-92.956 0-179.428-27.269-252.302-73.937 87.324 10.278 174.497-13.995 243.674-68.134-72.002-1.365-132.836-48.962-153.771-114.328 25.79 4.93 51.181 3.489 74.354-2.769-79.132-15.929-133.803-87.268-132.001-163.499 22.168 12.288 47.597 19.759 74.562 20.556-73.311-48.962-94.094-145.768-50.972-219.705 81.18 99.537 202.505 165.092 339.285 171.918-24.064-102.912 54.101-202.107 160.275-202.107 47.369 0 90.112 20.025 120.187 52.034 37.509-7.396 112.924-60.833 144.706-79.682-12.288 38.438-78.26 119.353-112.299 139.7 33.375-3.944 92.786 5.613 122.292-7.509-22.092 33.015-77.596 49.133-109.833 72.325z" - ], - "grid": 0, - "tags": [ - "twitter" - ] - }, - "properties": { - "order": 34, - "id": 0, - "prevSize": 32, - "code": 58913, - "name": "twitter", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M770.37-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM382.028 837.385c-11.169 5.329-34.076 3.375-54.537 3.375h-114.65c-35.631 0-68.191 1.517-75.7-23.381-6.106-20.271-1.119-64.645-1.119-89.050v-180.319c0-42.856-9.273-100.58 23.362-110.213 11.548-3.432 31.744-1.1 46.763-1.1h47.863c44.297 0 91.913-7.111 109.682 15.113l34.114 364.961c-2.484 8.875-7.377 16.631-15.777 20.613zM857.335 628.11c34.816 21.656 18.413 91.231-14.488 102.419 19.475 16.194 13.103 52.527 0 67.906-45.796 53.779-181.305 37.831-284.937 37.831-23.438 0-48.109 2.788-64.55 0-15.246-2.617-26.662-11.264-38.381-19.589l-35.252-377.268c6.163-10.714 11.89-21.751 14.658-26.131 21.883-34.683 44.582-68.248 73.444-93.506 14.829-12.971 32.635-20.271 51.219-32.275 23.324-15.095 56.699-58.615 60.113-93.487 1.384-14.526-2.882-39.481 3.319-52.357 5.803-11.947 29.715-27.572 50.119-21.125 23.59 7.452 42.174 45.435 44.544 75.719 2.332 30.549-3.11 62.995-15.607 83.437-13.464 22.035-28.236 30.587-36.731 47.863-7.49 15.208-9.956 28.046-12.25 52.319 79.929 4.855 201.216-13.388 233.775 41.188 17.446 29.26-6.22 85.257-30.075 96.825 43.899 14.715 42.344 93.62 1.081 110.232zM258.181 686.478c-26.188 0-47.332 21.618-47.332 48.223 0 26.491 21.144 47.919 47.332 47.919 26.036 0 47.351-21.428 47.351-47.919-0-26.605-21.314-48.223-47.351-48.223z" - ], - "grid": 0, - "tags": [ - "thumbs-up" - ] - }, - "properties": { - "order": 35, - "id": 0, - "prevSize": 32, - "code": 58914, - "name": "thumbs-up", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M248.889 1024h521.481c138.202 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.057-251.278-251.259-251.278h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259zM637.231 186.596c11.169-5.329 34.076-3.375 54.537-3.375h114.65c35.631 0 68.191-1.517 75.7 23.381 6.106 20.271 1.119 64.645 1.119 89.050v180.319c0 42.856 9.254 100.58-23.362 110.213-11.548 3.432-31.744 1.1-46.763 1.1h-47.863c-44.297 0-91.932 7.092-109.682-15.113l-34.114-364.961c2.484-8.875 7.358-16.631 15.777-20.613zM161.925 395.871c-34.816-21.656-18.413-91.231 14.488-102.419-19.475-16.194-13.103-52.527 0-67.906 45.796-53.779 181.305-37.831 284.937-37.831 23.438 0 48.109-2.788 64.55 0 15.246 2.617 26.643 11.264 38.381 19.589l35.252 377.268c-6.163 10.714-11.89 21.751-14.658 26.131-21.883 34.683-44.582 68.248-73.444 93.506-14.829 12.971-32.635 20.271-51.219 32.275-23.324 15.095-56.699 58.615-60.113 93.487-1.384 14.526 2.882 39.481-3.319 52.357-5.803 11.947-29.715 27.572-50.119 21.125-23.59-7.452-42.174-45.435-44.544-75.719-2.332-30.549 3.11-62.995 15.607-83.437 13.464-22.035 28.236-30.587 36.731-47.863 7.49-15.208 9.956-28.046 12.25-52.319-79.929-4.855-201.216 13.388-233.775-41.188-17.446-29.26 6.22-85.257 30.075-96.825-43.899-14.715-42.344-93.62-1.081-110.232zM761.079 512.815c26.188 0 47.332-21.618 47.332-48.223 0-26.491-21.144-47.919-47.332-47.919-26.036 0-47.351 21.428-47.351 47.919 0 26.605 21.314 48.223 47.351 48.223z" - ], - "grid": 0, - "tags": [ - "thumbs-down" - ] - }, - "properties": { - "order": 36, - "id": 0, - "prevSize": 32, - "code": 58915, - "name": "thumbs-down", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M630.139 539.212h124.511l-61.668-234.837-62.843 234.837zM231.993 596.082h64.076l-31.611-147.399-32.465 147.399zM772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM344.955 763.354l-27.989-95.782h-106.97l-29.639 95.782h-88.235l135.604-422.798h72.306l131.736 422.798h-86.812zM820.452 764.321l-37.66-128.872h-182.234l-39.898 128.872h-99.631l182.5-568.984h97.318l177.304 568.984h-97.697z" - ], - "grid": 0, - "tags": [ - "text-resize" - ] - }, - "properties": { - "order": 37, - "id": 0, - "prevSize": 32, - "code": 58916, - "name": "text-resize", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M593.427 476.824l128.91-93.867h-152.292l-58.482-140.383-46.895 140.383h-152.102l128.74 93.867-58.615 163.859 128.872-105.396 128.683 105.396-46.82-163.859zM479.327 865.754c-12.535-1.271-24.86-3.167-36.997-5.613 7.073-44.146-1.764-89.695-16.498-124.511-15.607-35.157-33.849-51.333-57.192-54.177-18.489 38.153-29.582 81.408-16.308 120.282 5.158 16.137 14.45 29.449 26.207 39.671-41.719-16.194-79.796-39.519-113.076-68.267 22.812-30.208 36.978-67.186 41.908-100.902 4.741-36.807-2.2-61.402-19.191-78.412-30.417 20.992-57.116 51.086-64.455 90.491-3.527 17.048-2.503 33.773 1.801 49.019-22.206-25.638-41.131-54.101-56.092-84.935 28.236-13.843 51.731-39.177 66.238-67.584 14.791-30.398 16.251-57.742 7.945-83.437-29.961 2.996-59.62 17.105-77.122 48.811-10.638 18.413-14.962 40.183-13.824 61.478-14.127-40.258-22.168-83.399-22.168-128.493 0-6.618 0.531-13.103 0.853-19.646 25.998 3.508 52.698-5.803 74.183-24.026 22.528-20.063 34.456-46.061 39.31-75.34-23.192-13.179-50.991-15.455-76.724 4.134-12.25 8.913-22.225 21.921-29.544 36.978 8.325-40.865 22.831-79.493 42.894-114.593 18.148 16.005 42.837 20.499 69.044 13.767 28.027-7.851 52.11-26.719 74.088-50.574-11.093-21.732-33.052-36.257-64.645-30.91-16.194 2.295-32.465 9.956-47.028 21.371 24.595-31.479 53.893-58.994 86.907-81.617 9.69 17.92 30.644 27.553 60.226 27.667 31.953-0.474 68.191-11.074 107.501-24.595-0.076-19.646-17.692-36.409-54.632-39.974-17.863-2.105-37.755-0.171-57.325 5.101 26.889-12.497 55.315-22.281 85.125-28.388 8.875-1.839 14.583-10.468 12.781-19.342-1.839-8.875-10.468-14.583-19.342-12.781-24.595 5.044-48.375 12.269-71.206 21.39 9.406-6.751 18.508-13.634 26.984-20.651 30.758-24.538 45.189-46.459 35.821-64.512-55.334 7.433-104.638 31.004-130.522 60.738-22.964 27.288-24.102 51.693-13.786 68.267-30.929 21.182-58.918 46.251-83.153 74.695 5.385-11.7 10.297-23.514 13.995-35.518 11.34-35.233 10.031-64-6.903-81.56-39.045 24.424-68.551 64.417-76.079 103.424-6.542 36.466 5.329 62.445 24.329 76.667-20.385 35.404-35.385 74.202-44.809 115.124-1.517-14.962-3.982-29.772-8.344-44.070-10.543-35.631-29.355-60.113-55.031-66.844-19.608 41.169-24.311 91.212-10.012 128.133 13.426 33.849 37.945 49 63.431 50.953-0.55 8.799-1.176 17.598-1.176 26.529 0 40.638 5.803 79.91 16.536 117.077-7.396-9.766-15.436-19.058-25.012-27.117-27.117-23.381-58.311-32.939-87.704-23.040-0.076 47.18 17.958 93.431 48.981 115.845 29.62 20.992 62.123 16.915 89.41 0.607 21.713 44.772 51.124 85.011 86.509 119.239-20.366-15.986-44.525-26.377-72.761-29.696-37.092-4.722-73.652 5.215-101.205 31.991 17.427 43.71 54.367 75.985 95.706 77.748 42.060 1.422 76.023-26.169 97.811-61.762-1.062-1.176-2.2-2.219-3.3-3.356 44.734 38.969 97.564 68.93 155.913 86.319-25.998 1.062-51.75 7.964-77.483 21.732-38.628 20.442-69.006 53.039-81.806 94.265 40.031 26.377 95.516 30.53 138.505 5.139 41.434-24.841 59.525-68.077 61.497-111.332 12.079 2.332 24.311 4.248 36.75 5.499 0.55 0.057 1.1 0.076 1.65 0.076 8.306 0 15.436-6.258 16.289-14.715 0.872-8.988-5.689-17.048-14.677-17.939zM934.817 569.154c-9.595 8.078-17.673 17.37-25.050 27.174 10.752-37.186 16.536-76.478 16.555-117.134 0-8.951-0.626-17.749-1.176-26.548 25.505-1.953 50.024-17.086 63.469-50.953 14.298-36.921 9.595-86.945-10.012-128.133-25.676 6.732-44.506 31.213-55.031 66.844-4.38 14.317-6.827 29.165-8.306 44.127-9.425-40.96-24.443-79.777-44.828-115.2 19.001-14.222 30.891-40.201 24.348-76.686-7.509-39.007-37.035-79-76.079-103.424-16.953 17.56-18.242 46.327-6.903 81.56 3.679 12.023 8.609 23.874 14.014 35.593-24.235-28.482-52.243-53.589-83.191-74.771 10.335-16.574 9.178-40.979-13.786-68.267-25.884-29.734-75.188-53.305-130.522-60.738-9.368 18.053 5.063 39.974 35.821 64.512 8.495 7.035 17.636 13.919 27.060 20.708-22.869-9.121-46.668-16.384-71.301-21.409-8.875-1.839-17.541 3.906-19.361 12.781-1.801 8.837 3.925 17.503 12.8 19.323 29.81 6.106 58.216 15.872 85.125 28.388-19.57-5.272-39.462-7.187-57.325-5.101-36.94 3.565-54.556 20.328-54.632 39.974 39.31 13.502 75.548 24.102 107.501 24.595 29.582-0.114 50.536-9.747 60.226-27.667 32.958 22.604 62.236 50.1 86.831 81.541-14.564-11.378-30.815-19.001-46.971-21.314-31.592-5.329-53.551 9.197-64.645 30.91 21.978 23.874 46.080 42.724 74.088 50.574 26.188 6.732 50.897 2.238 69.025-13.748 20.044 35.081 34.532 73.652 42.856 114.479-7.32-15.019-17.256-27.989-29.487-36.883-25.714-19.589-53.532-17.313-76.724-4.134 4.855 29.279 16.801 55.277 39.31 75.34 21.466 18.204 48.166 27.534 74.145 24.045 0.341 6.542 0.872 13.028 0.872 19.646 0 45.056-8.040 88.14-22.13 128.398 1.119-21.276-3.224-43.027-13.824-61.383-17.522-31.706-47.161-45.815-77.122-48.811-8.306 25.695-6.846 53.058 7.945 83.437 14.507 28.407 37.983 53.741 66.2 67.584-14.943 30.796-33.868 59.24-56.055 84.859 4.305-15.208 5.31-31.934 1.801-48.943-7.358-39.405-34.039-69.499-64.455-90.491-16.991 16.991-23.931 41.586-19.191 78.412 4.93 33.716 19.115 70.694 41.889 100.883-33.28 28.748-71.339 52.053-113.038 68.267 11.757-10.221 21.011-23.514 26.188-39.652 13.255-38.874 2.162-82.129-16.308-120.282-23.324 2.844-41.567 19.039-57.192 54.177-14.715 34.816-23.571 80.365-16.479 124.511-12.174 2.427-24.5 4.343-37.035 5.613-9.026 0.91-15.55 8.951-14.639 17.977 0.872 8.439 8.021 14.734 16.327 14.734 0.531 0 1.1-0.038 1.65-0.095v-0.038c12.421-1.252 24.671-3.167 36.75-5.499 1.972 43.255 20.063 86.49 61.478 111.332 42.989 25.391 98.456 21.22 138.505-5.139-12.819-41.225-43.179-73.823-81.806-94.265-25.733-13.786-51.503-20.689-77.521-21.732 58.425-17.427 111.313-47.407 156.084-86.471-1.157 1.176-2.332 2.276-3.451 3.508 21.788 35.593 55.751 63.185 97.811 61.762 41.339-1.764 78.279-34.039 95.706-77.748-27.553-26.757-64.114-36.712-101.205-31.991-28.274 3.356-52.489 13.748-72.875 29.772 35.404-34.247 64.872-74.505 86.585-119.334 27.288 16.289 59.771 20.404 89.429-0.588 31.023-22.433 49.057-68.665 48.981-115.845-29.412-9.88-60.606-0.322-87.723 23.078z" - ], - "grid": 0, - "tags": [ - "success-stories" - ] - }, - "properties": { - "order": 38, - "id": 0, - "prevSize": 32, - "code": 58917, - "name": "success-stories", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M124.113 449.574h132.741v385.574h-132.741v-385.574z", - "M250.539 1023.204h521.481c93.127 0 174.668-51.465 218.055-127.241h-957.611c43.387 75.776 124.947 127.241 218.074 127.241z", - "M336.915 196.741h132.741v638.426h-132.741v-638.426z", - "M549.736 323.148h132.741v512h-132.741v-512z", - "M762.539 1.574h132.741v833.574h-132.741v-833.574z" - ], - "grid": 0, - "tags": [ - "statistics" - ] - }, - "properties": { - "order": 39, - "id": 0, - "prevSize": 32, - "code": 58918, - "name": "statistics", - "ligatures": "" - } - }, - { - "icon": { - "paths": [ - "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM376.055 250.842l269.065 175.066-36.693 57.989-273.484-168.107 41.112-64.948zM295.291 404.082l307.352 92.748-18.982 65.953-309.627-84.764 21.257-73.937zM260.437 551.064l319.052 35.821-6.789 68.248-319.848-27.553 7.585-76.516zM252.587 680.562h321.024v76.895h-321.024v-76.895zM698.804 890.558h-570.728v-351.118h65.517v290.873h441.799v-290.873h63.412v351.118zM653.047 419.176l-178.745-266.676 64.398-41.927 171.823 271.151-57.477 37.452zM717.577 378.709l-23.742-320.133 76.743-4.665 15.493 320.626-68.494 4.172z" - ], - "grid": 0, - "tags": [ - "stack-overflow" - ] - }, - "properties": { - "order": 40, - "id": 0, - "prevSize": 32, - "code": 58919, - "name": "stack-overflow", - "ligatures": "" - } - } - ], - "height": 1024, - "metadata": { - "name": "pythonicons" - } -} + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M1024 429.256c0-200.926-58.792-363.938-131.482-365.226 0.292-0.006 0.578-0.030 0.872-0.030h-82.942c0 0-194.8 146.336-475.23 203.754-8.56 45.292-14.030 99.274-14.030 161.502 0 62.228 5.466 116.208 14.030 161.5 280.428 57.418 475.23 203.756 475.23 203.756h82.942c-0.292 0-0.578-0.024-0.872-0.032 72.696-1.288 131.482-164.298 131.482-365.224zM864.824 739.252c-9.382 0-19.532-9.742-24.746-15.548-12.63-14.064-24.792-35.96-35.188-63.328-23.256-61.232-36.066-143.31-36.066-231.124 0-87.81 12.81-169.89 36.066-231.122 10.394-27.368 22.562-49.266 35.188-63.328 5.214-5.812 15.364-15.552 24.746-15.552 9.38 0 19.536 9.744 24.744 15.552 12.634 14.064 24.796 35.958 35.188 63.328 23.258 61.23 36.068 143.312 36.068 231.122 0 87.804-12.81 169.888-36.068 231.124-10.39 27.368-22.562 49.264-35.188 63.328-5.208 5.806-15.36 15.548-24.744 15.548zM251.812 429.256c0-51.95 3.81-102.43 11.052-149.094-47.372 6.554-88.942 10.324-140.34 10.324-67.058 0-67.058 0-67.058 0l-55.466 94.686v88.17l55.46 94.686c0 0 0 0 67.060 0 51.398 0 92.968 3.774 140.34 10.324-7.236-46.664-11.048-97.146-11.048-149.096zM368.15 642.172l-127.998-24.51 81.842 321.544c4.236 16.634 20.744 25.038 36.686 18.654l118.556-47.452c15.944-6.376 22.328-23.964 14.196-39.084l-123.282-229.152zM864.824 548.73c-3.618 0-7.528-3.754-9.538-5.992-4.87-5.42-9.556-13.86-13.562-24.408-8.962-23.6-13.9-55.234-13.9-89.078 0-33.844 4.938-65.478 13.9-89.078 4.006-10.548 8.696-18.988 13.562-24.408 2.010-2.24 5.92-5.994 9.538-5.994 3.616 0 7.53 3.756 9.538 5.994 4.87 5.42 9.556 13.858 13.56 24.408 8.964 23.598 13.902 55.234 13.902 89.078 0 33.842-4.938 65.478-13.902 89.078-4.004 10.548-8.696 18.988-13.56 24.408-2.008 2.238-5.92 5.992-9.538 5.992z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bullhorn", + "megaphone", + "announcement", + "advertisement", + "news" + ], + "grid": 16 + }, + "attrs": [], + "properties": { + "order": 1, + "id": 0, + "prevSize": 32, + "code": 58880, + "name": "bullhorn", + "ligatures": "" + }, + "setIdx": 0, + "setId": 0, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M620.62 12.098c-40.884-6.808-83.266-9.918-123.999-9.728-40.695 0.19-79.569 3.622-113.74 9.728-100.693 17.806-118.993 54.974-118.993 123.657v90.738h238.004v30.208h-327.282c-69.177 0-129.764 41.624-148.689 120.68-21.883 90.662-22.85 147.266 0 241.873 16.934 70.466 57.287 120.68 126.502 120.68h81.787v-108.753c0-78.583 68.001-147.797 148.67-147.797h237.739c66.143 0 118.955-54.556 118.955-120.984v-226.664c-0-64.455-54.405-112.905-118.955-123.639zM395.681 166.021c-24.671 0-44.658-20.215-44.658-45.227 0-25.050 19.987-45.473 44.658-45.473 24.557 0 44.658 20.423 44.658 45.473 0.019 24.993-20.082 45.227-44.658 45.227z", + "M995.157 394.923c-17.067-68.798-49.74-120.623-118.955-120.623h-89.335v105.662c0 82.034-69.48 150.945-148.67 150.945h-237.72c-65.119 0-118.974 55.732-118.974 120.927v226.588c0 64.493 56.073 102.438 118.974 120.946 75.34 22.13 147.589 26.131 237.739 0 59.885-17.332 118.993-52.281 118.993-120.946v-90.738h-237.701v-30.189h356.712c69.139 0 94.967-48.242 118.955-120.642 24.841-74.562 23.799-146.242-0.019-241.929zM625.417 848.194c24.652 0 44.639 20.177 44.639 45.189 0 25.145-19.987 45.454-44.639 45.454-24.614 0-44.658-20.309-44.658-45.454 0-24.993 20.063-45.189 44.658-45.189z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "python-alt" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 2, + "id": 0, + "prevSize": 24, + "code": 58881, + "name": "python-alt", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M770.37-2.37h-521.481c-138.221 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.038 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM958.369 763.183c0 100.447-95.63 195.489-195.508 195.489h-502.348c-97.033 0-195.527-95.042-195.527-195.489v-65.479h893.364v65.479zM958.369 636.075h-893.364v-253.649h893.364v253.649zM958.369 320.796h-893.364v-59.999c0-96.446 96.104-195.489 195.527-195.489h502.348c99.878 0 195.508 99.044 195.508 195.489v59.999zM383.924 223.611h260.741v-61.63h-260.741v61.63zM644.665 479.611h-260.741v61.63h260.741v-61.63zM644.665 797.26h-260.741v61.63h260.741v-61.63z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pypi" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 3, + "id": 1, + "prevSize": 24, + "code": 58882, + "name": "pypi", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 1 + }, + { + "icon": { + "paths": [ + "M957.63 189.212v574.805c0 94.853-64 128.531-64 128.531s0-730.624 0-895.962l-893.63 1.043v771.66c0 138.221 113.076 251.259 251.259 251.259h519.111c138.183 0 251.259-113.038 251.259-251.259v-580.286l-64 0.209zM831.393 930.74c0 0-25.998 23.514-72.59 23.514 0 0-426.515 1.157-497.436 1.157-91.041 0-196.058-97.527-196.058-192.891s0.967-700.094 0.967-700.094h765.118v868.314z", + "M770.37 173.511v-47.407h-636.833v125.63h636.833z", + "M133.537 378.937h315.24v65.574h-315.24v-65.574z", + "M133.537 761.363h635.24v65.574h-635.24v-65.574z", + "M133.537 506.937h315.24v65.574h-315.24v-65.574z", + "M133.537 632.567h315.24v65.574h-315.24v-65.574z", + "M770.37 630.215v-251.278h-259.963v320.019h259.963z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "news" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 4, + "id": 2, + "prevSize": 24, + "code": 58883, + "name": "news", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM409.335 764.188c-52.679 0-95.384-42.705-95.384-95.403 0-38.116 22.528-70.751 54.898-86.016l42.648-197.879 45.378 201.709c28.463 16.479 47.825 46.952 47.825 82.185-0.019 52.698-42.705 95.403-95.365 95.403zM409.335 323.205c-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283 35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.111-13.502-77.065-21.087-118.86-21.087zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "moderate" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 5, + "id": 3, + "prevSize": 24, + "code": 58884, + "name": "moderate", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 3 + }, + { + "icon": { + "paths": [ + "M855.249 128.341c23.211 0 42.78 19.608 42.78 42.78v680.941c0 23.211-19.57 42.78-42.78 42.78h-680.96c-23.192 0-42.78-19.57-42.78-42.78v-680.941c0-23.192 19.608-42.78 42.78-42.78h680.96M855.249 0h-680.96c-94.113 0-171.122 77.009-171.122 171.122v680.941c0 94.132 77.009 171.122 171.122 171.122h680.941c94.132 0 171.122-77.009 171.122-171.122v-680.941c0.019-94.094-76.99-171.122-171.103-171.122v0z", + "M421.812 682.401v-205.464h-118.519v205.464h-64.853v-464.915h64.853v203.321h118.519v-203.321h65.593v464.934h-65.593z", + "M666.131 839.054c-76.516 0-124.549-49.512-124.549-115.105 0-51.010 27.629-84.556 56.813-96.18l-29.886-32.047c0.702-21.144 16.043-40.789 32.047-49.55-26.226-19.646-42.249-48.792-42.249-90.321 0-64.152 41.51-110.099 104.922-110.099 15.322 0 26.965 2.219 35.707 5.12 10.942 3.622 22.604 5.803 37.129 5.803 16.043 0 31.346-5.803 40.088-11.605l8.761 51.75c-4.399 3.622-17.503 8.021-26.965 8.021 5.784 10.923 10.183 29.146 10.183 51.029 0 59.752-37.888 108.544-102.040 110.023-21.106 0-33.527 5.784-33.527 18.223 0 4.361 3.66 11.643 11.681 14.601l63.374 21.826c51.75 17.484 81.636 53.21 81.636 110.080 0.038 61.080-48.052 108.43-123.127 108.43zM690.195 671.497l-40.808-11.7c-31.308 2.939-51.75 26.245-51.75 64.834 0 33.545 22.604 65.65 67.755 65.65 43.748 0 65.612-30.625 65.612-59.733 0.019-27.743-13.843-51.75-40.808-59.051zM663.249 394.562c-27.743 0-48.090 26.965-48.090 61.25 0 34.949 20.347 61.175 48.090 61.175 26.226 0 48.773-26.226 48.773-61.175 0.019-34.285-20.347-61.25-48.773-61.25z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mercurial" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 6, + "id": 4, + "prevSize": 24, + "code": 58885, + "name": "mercurial", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 4 + }, + { + "icon": { + "paths": [ + "M899.167 678.665l-291.499 50.157v29.412c0 45.151-50.498 81.655-94.872 81.655-44.582 0-94.834-36.504-94.834-81.655v-29.412l-291.537-50.157c-69.101 0-125.63-63.962-125.63-63.962v282.074c0 69.12 56.529 125.63 125.63 125.63h772.741c69.101 0 125.63-56.51 125.63-125.63v-282.074c0 0-56.529 63.962-125.63 63.962z", + "M899.167 254.369h-194.37v-66.37c0.19-36.030-11.397-69.367-35.366-92.35-23.893-23.059-57.079-33.413-92.634-33.28h-130.37c-35.593-0.114-68.779 10.221-92.653 33.28-24.007 22.983-35.556 56.32-35.366 92.35v66.37h-191.981c-69.101 0-125.63 56.529-125.63 125.63v128c0 69.12 56.529 125.63 125.63 125.63l339.039 56.168v52.338c0 26.491 21.163 47.938 47.332 47.938 26.055 0 47.369-21.447 47.369-47.938v-52.357l339.001-56.149c69.101 0 125.63-56.51 125.63-125.63v-128c0-69.101-56.529-125.63-125.63-125.63zM384.777 187.999c0.19-23.268 6.466-36.143 15.019-44.582 8.704-8.306 22.907-14.601 46.63-14.715h130.37c23.666 0.114 37.907 6.391 46.573 14.715 8.571 8.439 14.81 21.314 15.057 44.582-0.019 21.902-0.019 45.416-0.019 66.37h-253.63c0-20.954 0-44.468 0-66.37z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "jobs" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 7, + "id": 5, + "prevSize": 24, + "code": 58886, + "name": "jobs", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 5 + }, + { + "icon": { + "paths": [ + "M772.741-0.019h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.038-251.278-251.259-251.278zM593.029 896.777h-185.401v-189.573h185.401v189.573zM748.791 409.429c-14.639 24.652-44.601 54.746-89.809 90.283-31.497 24.955-51.39 44.999-59.639 60.113-8.287 15.132-12.383 55.751-12.383 80.1h-177.778v-38.703c0-30.246 3.432-54.803 10.297-73.671 6.865-18.887 17.048-36.087 30.625-51.693 13.577-15.588 44.051-43.046 91.458-82.318 25.259-20.594 37.888-39.462 37.888-56.604s-5.082-30.473-15.208-39.993c-10.126-9.5-25.505-14.26-46.080-14.26-22.168 0-40.467 7.339-54.955 21.978-14.526 14.658-23.78 40.22-27.838 76.724l-181.495-22.452c6.239-66.731 30.473-120.453 72.742-161.166 42.268-40.695 107.046-61.042 194.351-61.042 68.001 0 122.861 14.184 164.693 42.572 56.737 38.362 85.106 89.505 85.106 153.429-0 26.51-7.301 52.072-21.978 76.705z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "help" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 8, + "id": 6, + "prevSize": 24, + "code": 63, + "name": "help", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M129.271 383.507l383.166 382.805 380.075-382.805h-190.255v-320.076h-382.085v320.076z", + "M736.484 635.657l-224.047 225.47-225.375-225.185h-288.161v135.149c0 138.202 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.057 251.259-251.259v-135.149l-286.417-0.284z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "download" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 10, + "id": 7, + "prevSize": 24, + "code": 58889, + "name": "download", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 7 + }, + { + "icon": { + "paths": [ + "M731.439 149.751l-25.031 39.329-90.529-57.628-186.292 292.636 39.974 25.467 160.825-252.644 50.574 32.161-331.473 520.742 9.937 51.333-36.162 57.666 6.201 30.853 30.891-7.623 35.669-56.889 52.148-12.516 381.933-600.064z", + "M772.741-2.37h-521.481c-138.202 0-251.259 113.057-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.076-251.259-251.259-251.259zM99.366 811.179c-26.169 0-47.332-21.447-47.332-47.919 0-26.624 21.163-48.223 47.332-48.223 26.055 0 47.369 21.599 47.369 48.223-0.019 26.472-21.314 47.919-47.369 47.919zM99.366 557.549c-26.169 0-47.332-21.447-47.332-47.938 0-26.605 21.163-48.223 47.332-48.223 26.055 0 47.369 21.618 47.369 48.223-0.019 26.491-21.314 47.938-47.369 47.938zM99.366 303.919c-26.169 0-47.332-21.428-47.332-47.938 0-26.605 21.163-48.223 47.332-48.223 26.055 0 47.369 21.618 47.369 48.223-0.019 26.51-21.314 47.938-47.369 47.938zM955.259 735.365c0 119.637-97.887 217.524-217.524 219.895l-543.365-1.745v-886.689l543.365-0.455c119.637 0 217.524 97.887 217.524 217.524v451.47z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "documentation" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 11, + "id": 8, + "prevSize": 24, + "code": 58890, + "name": "documentation", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 8 + }, + { + "icon": { + "paths": [ + "M512.986 682.989c57.647 0 104.277-46.592 104.277-104.183 0-57.496-46.63-104.145-104.277-104.145-57.458 0-104.164 46.649-104.164 104.145 0.019 57.591 46.706 104.183 104.164 104.183", + "M763.733 711.32c45.378 0 82.072-36.674 82.072-81.996 0-45.265-36.712-81.958-82.072-81.958-45.189 0-81.996 36.712-81.996 81.958 0 45.321 36.826 81.996 81.996 81.996", + "M785.749 748.791c-39.045 0-73.519 17.863-95.004 45.303 7.851 16.839 12.231 35.423 12.231 54.955v110.042h200.666v-99.556c-0.019-61.156-52.717-110.744-117.893-110.744", + "M260.305 711.32c45.189 0 81.996-36.674 81.996-81.996 0-45.265-36.807-81.958-81.996-81.958-45.359 0-82.091 36.712-82.091 81.958-0 45.321 36.731 81.996 82.091 81.996", + "M238.308 748.791c-65.195 0-117.893 49.569-117.893 110.744v99.556h200.666v-110.042c0-19.532 4.38-38.135 12.212-54.955-21.466-27.42-55.96-45.303-94.985-45.303", + "M512.986 714.562c-84.689 0-153.259 64.417-153.259 143.91v162.437h306.498v-162.437c0-79.493-68.494-143.91-153.24-143.91", + "M891.847 129.119c0-70.068-169.491-126.919-379.051-126.919-208.896-0-378.728 56.851-378.728 126.919 0 44.108 67.167 82.906 168.903 105.662l-16.801 173.018 96.332-159.611c25.429 3.129 52.072 5.385 79.72 6.637l49.247 193.858 49.19-193.726c28.729-1.214 56.358-3.527 82.697-6.751l96.332 159.592-16.801-172.999c101.888-22.737 168.96-61.554 168.96-105.681z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "community" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 12, + "id": 9, + "prevSize": 24, + "code": 58891, + "name": "community", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 9 + }, + { + "icon": { + "paths": [ + "M772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM316.151 402.015l-124.947 108.241 124.947 108.241v112.242l-254.521-220.482 254.521-220.482v112.242zM461.577 825.135l-76.383-0.265 170.591-630.803 77.103-0.91-171.311 631.979zM699.164 725.94v-112.242l119.41-103.443-119.41-103.443v-112.242l248.984 215.685-248.984 215.685z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "code" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 13, + "id": 10, + "prevSize": 24, + "code": 58892, + "name": "code", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 10 + }, + { + "icon": { + "paths": [ + "M770.37-2.37h-521.481c-138.183 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.038-251.259-251.259-251.259zM825.742 670.758l-155.117 155.098-160.18-160.18-160.199 160.218-155.136-155.136 160.199-160.218-160.199-160.218 155.136-155.098 160.18 160.199 160.18-160.199 155.117 155.098-160.18 160.218 160.199 160.218z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "close" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 14, + "id": 11, + "prevSize": 24, + "code": 88, + "name": "close", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 11 + }, + { + "icon": { + "paths": [ + "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM765.63 82.849c26.586 0 48.223 21.144 48.223 47.332 0 26.036-21.637 47.351-48.223 47.351-26.472 0-47.919-21.314-47.919-47.351 0-26.188 21.447-47.332 47.919-47.332zM512 82.849c26.586 0 48.223 21.144 48.223 47.332 0 26.036-21.637 47.351-48.223 47.351-26.491 0-47.919-21.314-47.919-47.351 0-26.188 21.428-47.332 47.919-47.332zM258.37 82.849c26.605 0 48.223 21.144 48.223 47.332 0 26.036-21.618 47.351-48.223 47.351-26.491 0-47.919-21.314-47.919-47.351 0-26.188 21.428-47.332 47.919-47.332zM732.843 953.666h-451.47c-119.637 0-217.524-97.887-219.895-217.524l1.745-479.365h886.689l0.455 479.365c0 119.637-97.887 217.524-217.524 217.524z", + "M533.561 320.796h150.528v146.963h-150.528v-146.963z", + "M737.583 320.796h150.528v146.963h-150.528v-146.963z", + "M125.44 534.111h150.528v146.963h-150.528v-146.963z", + "M329.5 534.111h150.528v146.963h-150.528v-146.963z", + "M533.561 534.111h150.528v146.963h-150.528v-146.963z", + "M737.583 534.111h150.528v146.963h-150.528v-146.963z", + "M275.968 894.407v-146.963h-150.528c0 82.887 83.209 146.963 150.528 146.963z", + "M329.5 747.444h150.528v146.963h-150.528v-146.963z", + "M533.561 747.444h150.528v146.963h-150.528v-146.963z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "calendar" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 15, + "id": 12, + "prevSize": 24, + "code": 58894, + "name": "calendar", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 12 + }, + { + "icon": { + "paths": [ + "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM409.335 764.188c-52.679 0-95.384-42.705-95.384-95.403 0-9.956 1.972-19.38 4.798-28.425l-111.426-172.677 174.364 110.327c8.799-2.693 17.958-4.551 27.648-4.551 52.66 0 95.346 42.705 95.346 95.327 0 52.698-42.686 95.403-95.346 95.403zM409.335 323.205c-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283 35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.111-13.502-77.065-21.087-118.86-21.087zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "beginner" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 16, + "id": 13, + "prevSize": 24, + "code": 58895, + "name": "beginner", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M508.207 66.882c-244.452 0-442.615 198.163-442.615 442.615 0 244.452 198.163 442.615 442.615 442.615 244.471 0 442.615-198.163 442.615-442.615-0-244.452-198.201-442.615-442.615-442.615zM508.207 127.583c35.992 0 70.751 5.139 103.765 14.45l-83.778 202.278c-37.092-13.521-77.047-21.087-118.86-21.087-23.571 0-46.554 2.408-68.779 6.884l-38.116-142.241c59.335-38.153 129.934-60.283 205.767-60.283zM164.485 424.467l-22.414-22.414c22.225-75.928 67.508-141.862 127.526-190.18l34.266 127.829c-53.134 17.010-100.712 46.364-139.378 84.764zM502.253 647.964c1.498 6.713 2.427 13.653 2.427 20.821 0 52.698-42.686 95.403-95.346 95.403-52.679 0-95.384-42.705-95.384-95.403 0-52.622 42.705-95.327 95.384-95.327 12.459 0 24.292 2.56 35.195 6.884l169.851-109.625-112.128 177.247zM731.932 540.52c-32.18-79.189-92.615-143.834-168.77-181.476l84.897-204.971c131.641 51.883 227.48 174.839 240.375 321.612l-156.501 64.834z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "advanced" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 17, + "id": 14, + "prevSize": 24, + "code": 58896, + "name": "advanced", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 14 + }, + { + "icon": { + "paths": [ + "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM197.215 189.212h279.078v-61.231h71.149v61.231h286.189v194.75h-286.189v61.668h-71.149v-61.687h-279.078l-103.329-96.18 103.329-98.551zM824.149 701.175h-276.708v255.64h-71.149v-255.64h-281.448v-193.517h629.305l103.367 97.337-103.367 96.18z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sitemap" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 18, + "id": 15, + "prevSize": 24, + "code": 58897, + "name": "sitemap", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 15 + }, + { + "icon": { + "paths": [ + "M190.843 190.445c-78.431 78.507-78.431 205.577-0.038 284.027 78.412 78.374 205.596 78.412 284.008-0.019s78.412-205.559-0.038-283.951c-78.374-78.431-205.521-78.431-283.932-0.057zM442.216 358.343c-0.095-75.34-60.966-136.211-136.23-136.306v-26.795c90.055 0 163.025 73.045 163.1 163.119h-26.871zM770.37-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM944.242 838.447l-104.695 104.676c-15.663 15.701-41.169 15.663-56.87-0.019l-253.421-253.421c-15.701-15.72-15.701-41.188 0-56.908l27.781-27.781-61.857-61.876c-104.448 80.668-254.843 73.311-350.587-22.433-103.993-103.974-103.993-272.517 0-376.491 103.955-103.936 272.517-103.936 376.491 0.019 95.441 95.46 103.007 245.286 23.078 349.677l61.971 61.952 27.8-27.8c15.72-15.663 41.207-15.644 56.908 0l253.402 253.44c15.72 15.758 15.739 41.244 0 56.965z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "search" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 19, + "id": 16, + "prevSize": 24, + "code": 58898, + "name": "search", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 16 + }, + { + "icon": { + "paths": [ + "M190.843 190.445c-78.431 78.507-78.431 205.577-0.038 284.027 78.412 78.374 205.596 78.412 284.008-0.019s78.412-205.559-0.038-283.951c-78.374-78.431-205.521-78.431-283.932-0.057zM442.216 358.343c-0.095-75.34-60.966-136.211-136.23-136.306v-26.795c90.055 0 163.025 73.045 163.1 163.119h-26.871zM944.242 838.447l-104.695 104.676c-15.663 15.701-41.169 15.663-56.87-0.019l-253.421-253.421c-15.701-15.72-15.701-41.188 0-56.908l27.781-27.781-61.857-61.876c-104.448 80.668-254.843 73.311-350.587-22.433-103.993-103.974-103.993-272.517 0-376.491 103.955-103.936 272.517-103.936 376.491 0.019 95.441 95.46 103.007 245.286 23.078 349.677l61.971 61.952 27.8-27.8c15.72-15.663 41.207-15.644 56.908 0l253.402 253.44c15.72 15.758 15.739 41.244 0 56.965z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "search-alt" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 20, + "id": 17, + "prevSize": 24, + "code": 58899, + "name": "search-alt", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 17 + }, + { + "icon": { + "paths": [ + "M607.991 863.573c20.309 0 36.788-16.744 36.788-37.509 0-20.632-16.479-37.262-36.788-37.262-20.29 0-36.807 16.631-36.807 37.262 0 20.764 16.517 37.509 36.807 37.509zM418.475 151.249c-20.328 0-36.826 16.858-36.826 37.528 0 20.613 16.498 37.3 36.826 37.3 20.309 0 36.864-16.687 36.845-37.3-0-20.67-16.555-37.528-36.845-37.528zM772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.038 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM285.279 609.735v89.714h-67.47c-57.079 0-90.377-41.434-104.334-99.556-18.849-78.014-18.053-124.719 0-199.509 15.607-65.195 65.593-99.537 122.652-99.537h269.995v-24.917h-196.343v-74.847c0-56.623 15.113-87.305 98.152-101.983 28.179-5.025 60.245-7.87 93.81-8.021 33.583-0.171 68.57 2.389 102.305 8.021 53.267 8.856 98.152 48.83 98.152 101.964v186.956c0 54.803-43.596 99.802-98.152 99.802h-196.134c-66.541 0.019-122.633 57.135-122.633 121.913zM912.991 614.438c-19.816 59.733-41.112 99.556-98.152 99.556h-294.21v24.879h196.077v74.828c0 56.642-48.735 85.466-98.152 99.783-74.373 21.542-133.973 18.242-196.115 0-51.902-15.284-98.133-46.573-98.133-99.783v-186.899c0-53.779 44.411-99.764 98.133-99.764h196.096c65.308 0 122.633-56.832 122.633-124.492v-87.173h73.69c57.116 0 84.044 42.761 98.152 99.518 19.627 78.943 20.48 138.069-0.019 199.547z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "python" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 21, + "id": 18, + "prevSize": 24, + "code": 58900, + "name": "python", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 18 + }, + { + "icon": { + "paths": [ + "M653.672 373.077c-32.521 0-58.861 26.908-58.861 59.98 0 32.977 26.34 59.62 58.861 59.62 32.446 0 58.899-26.624 58.899-59.62 0-33.071-26.453-59.98-58.899-59.98zM393.216 373.077c-32.54 0-58.88 26.908-58.88 59.98 0 32.977 26.34 59.62 58.88 59.62 32.351 0 58.88-26.624 58.88-59.62 0-33.071-26.529-59.98-58.88-59.98zM772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM853.807 399.474c0 32.275-4.248 60.568-12.117 85.694l-2.882 9.14c-1.517 4.21-3.413 8.533-5.367 12.933l-4.229 9.083c-33.849 67.413-101.812 105.472-198.58 120.396l-11.719 1.801 7.927 8.761c19.361 21.39 28.843 43.653 30.303 67.47v171.672c0.057 13.502 5.404 24.614 13.672 33.887-34.854-2.313-58.785-15.227-58.823-37.054v-143.019c0-18.773-17.73-20.518-20.006-20.518-0.796 0-1.441 0.114-1.877 0.209l-4.798 1.176v5.006c0 0 0 153.6 0 169.586-0.19 11.928 2.465 22.509 9.178 31.801-38.381-1.877-53.267-19.589-53.855-40.695 0 0.038 0-147.949 0-156.331 0-8.306-7.471-12.667-13.047-12.667-5.784 0-13.16 4.399-13.16 12.667-0.038 8.268-0.038 164.087-0.038 164.087-0.74 23.097-24.102 31.801-56.548 32.787 5.158-7.301 9.254-16.194 9.235-28.065v-180.053l-6.808 0.531c-0.171 0-19.001 1.365-19.589 20.461v146.792c-0.057 18.318-21.011 36.75-54.405 38.4 6.428-8.078 10.335-18.375 10.202-30.663v-119.182h-57.742c-107.179 1.138-101.224-97.261-162.854-146.66 56.737 6.713 80.801 85.845 155.003 87.685 45.359 0 56.623 0 56.623 0h5.575l0.702-5.537c3.3-25.335 15.55-47.388 39.367-66.807l11.681-9.576-14.905-1.669c-105.946-12.629-176.981-51.655-213.883-117.153l-5.082-9.121c-1.953-3.906-3.812-8.363-5.727-13.028l-3.565-9.14c-9.633-26.624-14.943-57.135-15.436-91.61-0.019-1.46-0.019-2.788-0.019-4.172 0.057-58.482 16.194-110.345 56.908-153.562l2.446-2.655-0.891-3.356c-5.348-20.196-7.813-40.505-7.889-60.928 0.038-24.804 3.812-49.778 10.923-75.055 46.364 2.958 93.544 19.342 141.919 52.034l2.219 1.46 2.655-0.569c39.633-8.647 79.379-12.705 119.068-12.705 41.036 0 82.072 4.38 123.089 12.705l2.731 0.512 2.257-1.555c41.358-29.374 87.381-46.611 138.847-51.712 8.495 28.786 13.464 57.534 13.464 86.13 0 12.971-0.967 25.96-3.148 38.969l-0.436 2.788 1.82 2.238c37.395 46.156 60.928 101.205 61.705 172.544-0.133 1.081-0.095 2.276-0.095 3.413z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "github" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 22, + "id": 19, + "prevSize": 24, + "code": 58901, + "name": "github", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 19 + }, + { + "icon": { + "paths": [ + "M511.924 578.37c33.489 0 60.7-24.367 60.7-63.147v-445.8c0-38.836-27.231-63.109-60.7-63.109-33.527 0-60.681 24.273-60.681 63.109v445.8c0 38.779 27.174 63.147 60.681 63.147zM703.924 104.107v146.015c95.554 62.407 158.853 169.965 158.853 292.599 0 193.214-156.691 349.886-349.98 349.886-193.308 0-350.018-156.672-350.018-349.886 0-122.292 62.957-229.623 158.056-292.124v-146.053c-168.77 74.012-286.853 242.157-286.853 438.272 0 264.439 214.376 478.815 478.815 478.815 264.42 0 478.796-214.376 478.796-478.815 0-196.418-118.424-364.904-287.668-438.708z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "get-started" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 23, + "id": 20, + "prevSize": 24, + "code": 58902, + "name": "get-started", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 20 + }, + { + "icon": { + "paths": [ + "M770.37 0h-521.481c-138.202 0-251.259 113.057-251.259 251.259v521.481c0 138.183 113.057 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.076-251.259-251.259-251.259zM299.255 842.183c-65.043 0-117.76-52.698-117.76-117.741s52.717-117.741 117.76-117.741c65.005 0 117.722 52.698 117.722 117.741s-52.736 117.741-117.722 117.741zM611.745 827.923h-145.351c18.679-30.113 29.62-65.479 29.62-103.481 0-108.658-88.102-196.817-196.76-196.817-39.993 0-77.084 12.004-108.146 32.484v-146.508c33.906-11.795 70.182-18.565 108.146-18.66 181.931 0.322 329.14 147.551 329.463 329.481-0.095 36.162-6.163 70.903-16.972 103.5zM843.036 827.923h-149.030c8.666-33.109 13.786-67.698 13.786-103.519-0.057-225.64-182.936-408.5-408.519-408.519-37.528 0-73.633 5.48-108.146 14.943v-149.352c34.987-6.903 71.111-10.638 108.146-10.638 305.759 0 553.567 247.865 553.567 553.567-0.019 35.366-3.508 69.973-9.804 103.519z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "feed" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 24, + "id": 21, + "prevSize": 24, + "code": 58903, + "name": "feed", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 21 + }, + { + "icon": { + "paths": [ + "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM677.812 507.563h-105.453v381.952h-157.999v-381.952h-79v-131.622h79v-79.038c0-107.368 44.601-171.255 171.179-171.255h105.472v131.641h-65.896c-49.323 0-52.584 18.413-52.584 52.717l-0.19 65.934h119.448l-13.976 131.622z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "facebook" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 25, + "id": 22, + "prevSize": 24, + "code": 58904, + "name": "facebook", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 22 + }, + { + "icon": { + "paths": [ + "M896 188.056h-772.741c-69.101 0-125.63 56.529-125.63 125.63v5.177l509.63 253.193 514.37-255.545v-2.825c0-69.101-56.529-125.63-125.63-125.63zM1021.63 635.032v-252.169l-253.175 125.781 253.175 126.388zM-2.37 385.233v248.225l249.211-124.416-249.211-123.809zM507.259 638.426l-192.341-95.554-317.269 157.582c0.209 68.93 56.642 125.231 125.611 125.231h772.741c68.437 0 124.492-55.505 125.535-123.714l-321.138-159.497-193.138 95.953z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "email" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 26, + "id": 23, + "prevSize": 24, + "code": 58905, + "name": "email", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 23 + }, + { + "icon": { + "paths": [ + "M770.37-2.37h-521.481c-138.183 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.076 251.259 251.259 251.259h521.481c138.202 0 251.278-113.057 251.278-251.259v-521.481c0-138.183-113.076-251.259-251.278-251.259zM705.252 507.885v320.057h-382.066v-320.057h-190.255l380.094-382.824 383.166 382.824h-190.938z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 27, + "id": 24, + "prevSize": 24, + "code": 58906, + "name": "arrow-up", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 24 + }, + { + "icon": { + "paths": [ + "M770.37-2.37h-521.481c-138.221 0-251.259 113.076-251.259 251.259v521.481c0 138.183 113.038 251.259 251.259 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.183-113.076-251.259-251.259-251.259zM511.374 896.19v-190.938h-320.076v-382.066h320.076v-190.255l382.824 380.075-382.824 383.185z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-right" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 28, + "id": 25, + "prevSize": 24, + "code": 58907, + "name": "arrow-right", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 25 + }, + { + "icon": { + "paths": [ + "M770.37-2.389h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259h521.481c138.221 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.038-251.278-251.259-251.278zM827.961 696.073h-320.076v190.255l-382.824-380.094 382.824-383.166v190.919h320.076v382.085z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-left" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 29, + "id": 26, + "prevSize": 24, + "code": 58908, + "name": "arrow-left", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 26 + }, + { + "icon": { + "paths": [ + "M770.389-2.37h-521.481c-138.202 0-251.278 113.038-251.278 251.259v521.481c0 138.183 113.076 251.259 251.278 251.259h521.481c138.183 0 251.259-113.076 251.259-251.259v-521.481c0-138.221-113.076-251.259-251.259-251.259zM506.254 894.18l-383.166-382.805h190.9v-320.076h382.085v320.076h190.255l-380.075 382.805z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 30, + "id": 27, + "prevSize": 24, + "code": 58909, + "name": "arrow-down", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 27 + }, + { + "icon": { + "paths": [ + "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.038 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM309.627 826.273c-99.859 0-180.812-80.953-180.812-180.793 0-99.821 80.953-180.774 180.812-180.774 27.364 0 53.267 6.277 76.535 17.18l-54.689 94.701c-6.884-2.238-14.241-3.451-21.845-3.451-39.936 0-72.325 32.37-72.325 72.306s32.389 72.344 72.325 72.344c35.537 0 65.062-25.714 71.111-59.506h109.037c-6.618 93.848-84.632 167.993-180.148 167.993zM438.234 306.593c0 19.456 7.737 37.035 20.215 50.081l-55.068 95.308c-44.563-32.92-73.652-85.694-73.652-145.389 0-99.821 80.953-180.774 180.812-180.774 99.84 0 180.774 80.934 180.774 180.774 0 59.582-28.937 112.318-73.406 145.237l-55.049-95.384c12.364-13.009 20.044-30.492 20.044-49.854 0-39.936-32.446-72.325-72.344-72.325-39.936 0-72.325 32.389-72.325 72.325zM708.475 826.216c-95.554 0-173.549-74.145-180.148-167.955h109.037c6.030 33.83 35.556 59.525 71.111 59.525 39.898 0 72.287-32.37 72.287-72.325 0-39.917-32.37-72.287-72.287-72.287-6.599 0-12.99 0.967-19.039 2.636l-54.917-95.175c22.585-10.145 47.597-15.948 73.956-15.948 99.859 0 180.774 80.934 180.774 180.755s-80.915 180.774-180.774 180.774z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "freenode" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 31, + "id": 28, + "prevSize": 24, + "code": 58910, + "name": "freenode", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 28 + }, + { + "icon": { + "paths": [ + "M990.701 763.98l-336.175-688.014c-58.69-104.41-224.616-92.558-269.483-1.214l-345.353 690.479c-74.828 142.279-0.929 258.769 164.162 258.769h620.165c165.073 0 240.090-117.020 166.684-260.020zM607.744 891.259h-185.401v-189.573h185.401v189.573zM610.057 384l-33.716 253.080h-122.728l-33.185-253.080v-192h189.63v192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "alert" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 32, + "id": 29, + "prevSize": 24, + "code": 58911, + "name": "alert", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 29 + }, + { + "icon": { + "paths": [ + "M61.554 313.685l450.37-187.259 445.63 187.259-445.63 189.63z", + "M511.924 569.666l-297.415-125.212-152.955 63.602 450.37 189.611 445.63-189.611-151.343-63.602z", + "M511.924 761.666l-297.415-125.231-152.955 63.602 450.37 189.63 445.63-189.63-151.343-63.602z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "versions" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 33, + "id": 30, + "prevSize": 24, + "code": 58912, + "name": "versions", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 30 + }, + { + "icon": { + "paths": [ + "M688.583 286.227c-24.728 0-44.715 20.461-44.715 45.587 0 25.012 19.987 45.246 44.715 45.246 24.595 0 44.753-20.252 44.734-45.246 0.019-25.126-20.139-45.587-44.734-45.587zM772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM816.488 392.021c10.449 231.519-162.588 475.136-468.158 475.136-92.956 0-179.428-27.269-252.302-73.937 87.324 10.278 174.497-13.995 243.674-68.134-72.002-1.365-132.836-48.962-153.771-114.328 25.79 4.93 51.181 3.489 74.354-2.769-79.132-15.929-133.803-87.268-132.001-163.499 22.168 12.288 47.597 19.759 74.562 20.556-73.311-48.962-94.094-145.768-50.972-219.705 81.18 99.537 202.505 165.092 339.285 171.918-24.064-102.912 54.101-202.107 160.275-202.107 47.369 0 90.112 20.025 120.187 52.034 37.509-7.396 112.924-60.833 144.706-79.682-12.288 38.438-78.26 119.353-112.299 139.7 33.375-3.944 92.786 5.613 122.292-7.509-22.092 33.015-77.596 49.133-109.833 72.325z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "twitter" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 34, + "id": 31, + "prevSize": 24, + "code": 58913, + "name": "twitter", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 31 + }, + { + "icon": { + "paths": [ + "M770.37-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM382.028 837.385c-11.169 5.329-34.076 3.375-54.537 3.375h-114.65c-35.631 0-68.191 1.517-75.7-23.381-6.106-20.271-1.119-64.645-1.119-89.050v-180.319c0-42.856-9.273-100.58 23.362-110.213 11.548-3.432 31.744-1.1 46.763-1.1h47.863c44.297 0 91.913-7.111 109.682 15.113l34.114 364.961c-2.484 8.875-7.377 16.631-15.777 20.613zM857.335 628.11c34.816 21.656 18.413 91.231-14.488 102.419 19.475 16.194 13.103 52.527 0 67.906-45.796 53.779-181.305 37.831-284.937 37.831-23.438 0-48.109 2.788-64.55 0-15.246-2.617-26.662-11.264-38.381-19.589l-35.252-377.268c6.163-10.714 11.89-21.751 14.658-26.131 21.883-34.683 44.582-68.248 73.444-93.506 14.829-12.971 32.635-20.271 51.219-32.275 23.324-15.095 56.699-58.615 60.113-93.487 1.384-14.526-2.882-39.481 3.319-52.357 5.803-11.947 29.715-27.572 50.119-21.125 23.59 7.452 42.174 45.435 44.544 75.719 2.332 30.549-3.11 62.995-15.607 83.437-13.464 22.035-28.236 30.587-36.731 47.863-7.49 15.208-9.956 28.046-12.25 52.319 79.929 4.855 201.216-13.388 233.775 41.188 17.446 29.26-6.22 85.257-30.075 96.825 43.899 14.715 42.344 93.62 1.081 110.232zM258.181 686.478c-26.188 0-47.332 21.618-47.332 48.223 0 26.491 21.144 47.919 47.332 47.919 26.036 0 47.351-21.428 47.351-47.919-0-26.605-21.314-48.223-47.351-48.223z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "thumbs-up" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 35, + "id": 32, + "prevSize": 24, + "code": 58914, + "name": "thumbs-up", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 32 + }, + { + "icon": { + "paths": [ + "M248.889 1024h521.481c138.202 0 251.259-113.076 251.259-251.259v-521.481c0-138.202-113.057-251.278-251.259-251.278h-521.481c-138.183 0-251.259 113.076-251.259 251.278v521.481c0 138.183 113.076 251.259 251.259 251.259zM637.231 186.596c11.169-5.329 34.076-3.375 54.537-3.375h114.65c35.631 0 68.191-1.517 75.7 23.381 6.106 20.271 1.119 64.645 1.119 89.050v180.319c0 42.856 9.254 100.58-23.362 110.213-11.548 3.432-31.744 1.1-46.763 1.1h-47.863c-44.297 0-91.932 7.092-109.682-15.113l-34.114-364.961c2.484-8.875 7.358-16.631 15.777-20.613zM161.925 395.871c-34.816-21.656-18.413-91.231 14.488-102.419-19.475-16.194-13.103-52.527 0-67.906 45.796-53.779 181.305-37.831 284.937-37.831 23.438 0 48.109-2.788 64.55 0 15.246 2.617 26.643 11.264 38.381 19.589l35.252 377.268c-6.163 10.714-11.89 21.751-14.658 26.131-21.883 34.683-44.582 68.248-73.444 93.506-14.829 12.971-32.635 20.271-51.219 32.275-23.324 15.095-56.699 58.615-60.113 93.487-1.384 14.526 2.882 39.481-3.319 52.357-5.803 11.947-29.715 27.572-50.119 21.125-23.59-7.452-42.174-45.435-44.544-75.719-2.332-30.549 3.11-62.995 15.607-83.437 13.464-22.035 28.236-30.587 36.731-47.863 7.49-15.208 9.956-28.046 12.25-52.319-79.929-4.855-201.216 13.388-233.775-41.188-17.446-29.26 6.22-85.257 30.075-96.825-43.899-14.715-42.344-93.62-1.081-110.232zM761.079 512.815c26.188 0 47.332-21.618 47.332-48.223 0-26.491-21.144-47.919-47.332-47.919-26.036 0-47.351 21.428-47.351 47.919 0 26.605 21.314 48.223 47.351 48.223z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "thumbs-down" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 36, + "id": 33, + "prevSize": 24, + "code": 58915, + "name": "thumbs-down", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 33 + }, + { + "icon": { + "paths": [ + "M630.139 539.212h124.511l-61.668-234.837-62.843 234.837zM231.993 596.082h64.076l-31.611-147.399-32.465 147.399zM772.741-0.019h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM344.955 763.354l-27.989-95.782h-106.97l-29.639 95.782h-88.235l135.604-422.798h72.306l131.736 422.798h-86.812zM820.452 764.321l-37.66-128.872h-182.234l-39.898 128.872h-99.631l182.5-568.984h97.318l177.304 568.984h-97.697z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "text-resize" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 37, + "id": 34, + "prevSize": 24, + "code": 58916, + "name": "text-resize", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 34 + }, + { + "icon": { + "paths": [ + "M593.427 476.824l128.91-93.867h-152.292l-58.482-140.383-46.895 140.383h-152.102l128.74 93.867-58.615 163.859 128.872-105.396 128.683 105.396-46.82-163.859zM479.327 865.754c-12.535-1.271-24.86-3.167-36.997-5.613 7.073-44.146-1.764-89.695-16.498-124.511-15.607-35.157-33.849-51.333-57.192-54.177-18.489 38.153-29.582 81.408-16.308 120.282 5.158 16.137 14.45 29.449 26.207 39.671-41.719-16.194-79.796-39.519-113.076-68.267 22.812-30.208 36.978-67.186 41.908-100.902 4.741-36.807-2.2-61.402-19.191-78.412-30.417 20.992-57.116 51.086-64.455 90.491-3.527 17.048-2.503 33.773 1.801 49.019-22.206-25.638-41.131-54.101-56.092-84.935 28.236-13.843 51.731-39.177 66.238-67.584 14.791-30.398 16.251-57.742 7.945-83.437-29.961 2.996-59.62 17.105-77.122 48.811-10.638 18.413-14.962 40.183-13.824 61.478-14.127-40.258-22.168-83.399-22.168-128.493 0-6.618 0.531-13.103 0.853-19.646 25.998 3.508 52.698-5.803 74.183-24.026 22.528-20.063 34.456-46.061 39.31-75.34-23.192-13.179-50.991-15.455-76.724 4.134-12.25 8.913-22.225 21.921-29.544 36.978 8.325-40.865 22.831-79.493 42.894-114.593 18.148 16.005 42.837 20.499 69.044 13.767 28.027-7.851 52.11-26.719 74.088-50.574-11.093-21.732-33.052-36.257-64.645-30.91-16.194 2.295-32.465 9.956-47.028 21.371 24.595-31.479 53.893-58.994 86.907-81.617 9.69 17.92 30.644 27.553 60.226 27.667 31.953-0.474 68.191-11.074 107.501-24.595-0.076-19.646-17.692-36.409-54.632-39.974-17.863-2.105-37.755-0.171-57.325 5.101 26.889-12.497 55.315-22.281 85.125-28.388 8.875-1.839 14.583-10.468 12.781-19.342-1.839-8.875-10.468-14.583-19.342-12.781-24.595 5.044-48.375 12.269-71.206 21.39 9.406-6.751 18.508-13.634 26.984-20.651 30.758-24.538 45.189-46.459 35.821-64.512-55.334 7.433-104.638 31.004-130.522 60.738-22.964 27.288-24.102 51.693-13.786 68.267-30.929 21.182-58.918 46.251-83.153 74.695 5.385-11.7 10.297-23.514 13.995-35.518 11.34-35.233 10.031-64-6.903-81.56-39.045 24.424-68.551 64.417-76.079 103.424-6.542 36.466 5.329 62.445 24.329 76.667-20.385 35.404-35.385 74.202-44.809 115.124-1.517-14.962-3.982-29.772-8.344-44.070-10.543-35.631-29.355-60.113-55.031-66.844-19.608 41.169-24.311 91.212-10.012 128.133 13.426 33.849 37.945 49 63.431 50.953-0.55 8.799-1.176 17.598-1.176 26.529 0 40.638 5.803 79.91 16.536 117.077-7.396-9.766-15.436-19.058-25.012-27.117-27.117-23.381-58.311-32.939-87.704-23.040-0.076 47.18 17.958 93.431 48.981 115.845 29.62 20.992 62.123 16.915 89.41 0.607 21.713 44.772 51.124 85.011 86.509 119.239-20.366-15.986-44.525-26.377-72.761-29.696-37.092-4.722-73.652 5.215-101.205 31.991 17.427 43.71 54.367 75.985 95.706 77.748 42.060 1.422 76.023-26.169 97.811-61.762-1.062-1.176-2.2-2.219-3.3-3.356 44.734 38.969 97.564 68.93 155.913 86.319-25.998 1.062-51.75 7.964-77.483 21.732-38.628 20.442-69.006 53.039-81.806 94.265 40.031 26.377 95.516 30.53 138.505 5.139 41.434-24.841 59.525-68.077 61.497-111.332 12.079 2.332 24.311 4.248 36.75 5.499 0.55 0.057 1.1 0.076 1.65 0.076 8.306 0 15.436-6.258 16.289-14.715 0.872-8.988-5.689-17.048-14.677-17.939zM934.817 569.154c-9.595 8.078-17.673 17.37-25.050 27.174 10.752-37.186 16.536-76.478 16.555-117.134 0-8.951-0.626-17.749-1.176-26.548 25.505-1.953 50.024-17.086 63.469-50.953 14.298-36.921 9.595-86.945-10.012-128.133-25.676 6.732-44.506 31.213-55.031 66.844-4.38 14.317-6.827 29.165-8.306 44.127-9.425-40.96-24.443-79.777-44.828-115.2 19.001-14.222 30.891-40.201 24.348-76.686-7.509-39.007-37.035-79-76.079-103.424-16.953 17.56-18.242 46.327-6.903 81.56 3.679 12.023 8.609 23.874 14.014 35.593-24.235-28.482-52.243-53.589-83.191-74.771 10.335-16.574 9.178-40.979-13.786-68.267-25.884-29.734-75.188-53.305-130.522-60.738-9.368 18.053 5.063 39.974 35.821 64.512 8.495 7.035 17.636 13.919 27.060 20.708-22.869-9.121-46.668-16.384-71.301-21.409-8.875-1.839-17.541 3.906-19.361 12.781-1.801 8.837 3.925 17.503 12.8 19.323 29.81 6.106 58.216 15.872 85.125 28.388-19.57-5.272-39.462-7.187-57.325-5.101-36.94 3.565-54.556 20.328-54.632 39.974 39.31 13.502 75.548 24.102 107.501 24.595 29.582-0.114 50.536-9.747 60.226-27.667 32.958 22.604 62.236 50.1 86.831 81.541-14.564-11.378-30.815-19.001-46.971-21.314-31.592-5.329-53.551 9.197-64.645 30.91 21.978 23.874 46.080 42.724 74.088 50.574 26.188 6.732 50.897 2.238 69.025-13.748 20.044 35.081 34.532 73.652 42.856 114.479-7.32-15.019-17.256-27.989-29.487-36.883-25.714-19.589-53.532-17.313-76.724-4.134 4.855 29.279 16.801 55.277 39.31 75.34 21.466 18.204 48.166 27.534 74.145 24.045 0.341 6.542 0.872 13.028 0.872 19.646 0 45.056-8.040 88.14-22.13 128.398 1.119-21.276-3.224-43.027-13.824-61.383-17.522-31.706-47.161-45.815-77.122-48.811-8.306 25.695-6.846 53.058 7.945 83.437 14.507 28.407 37.983 53.741 66.2 67.584-14.943 30.796-33.868 59.24-56.055 84.859 4.305-15.208 5.31-31.934 1.801-48.943-7.358-39.405-34.039-69.499-64.455-90.491-16.991 16.991-23.931 41.586-19.191 78.412 4.93 33.716 19.115 70.694 41.889 100.883-33.28 28.748-71.339 52.053-113.038 68.267 11.757-10.221 21.011-23.514 26.188-39.652 13.255-38.874 2.162-82.129-16.308-120.282-23.324 2.844-41.567 19.039-57.192 54.177-14.715 34.816-23.571 80.365-16.479 124.511-12.174 2.427-24.5 4.343-37.035 5.613-9.026 0.91-15.55 8.951-14.639 17.977 0.872 8.439 8.021 14.734 16.327 14.734 0.531 0 1.1-0.038 1.65-0.095v-0.038c12.421-1.252 24.671-3.167 36.75-5.499 1.972 43.255 20.063 86.49 61.478 111.332 42.989 25.391 98.456 21.22 138.505-5.139-12.819-41.225-43.179-73.823-81.806-94.265-25.733-13.786-51.503-20.689-77.521-21.732 58.425-17.427 111.313-47.407 156.084-86.471-1.157 1.176-2.332 2.276-3.451 3.508 21.788 35.593 55.751 63.185 97.811 61.762 41.339-1.764 78.279-34.039 95.706-77.748-27.553-26.757-64.114-36.712-101.205-31.991-28.274 3.356-52.489 13.748-72.875 29.772 35.404-34.247 64.872-74.505 86.585-119.334 27.288 16.289 59.771 20.404 89.429-0.588 31.023-22.433 49.057-68.665 48.981-115.845-29.412-9.88-60.606-0.322-87.723 23.078z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "success-stories" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 38, + "id": 35, + "prevSize": 24, + "code": 58917, + "name": "success-stories", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 35 + }, + { + "icon": { + "paths": [ + "M124.113 449.574h132.741v385.574h-132.741v-385.574z", + "M250.539 1023.204h521.481c93.127 0 174.668-51.465 218.055-127.241h-957.611c43.387 75.776 124.947 127.241 218.074 127.241z", + "M336.915 196.741h132.741v638.426h-132.741v-638.426z", + "M549.736 323.148h132.741v512h-132.741v-512z", + "M762.539 1.574h132.741v833.574h-132.741v-833.574z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "statistics" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 39, + "id": 36, + "prevSize": 24, + "code": 58918, + "name": "statistics", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 36 + }, + { + "icon": { + "paths": [ + "M772.741-2.37h-521.481c-138.202 0-251.259 113.076-251.259 251.259v521.481c0 138.202 113.057 251.278 251.259 251.278h521.481c138.183 0 251.259-113.076 251.259-251.278v-521.481c0-138.183-113.076-251.259-251.259-251.259zM376.055 250.842l269.065 175.066-36.693 57.989-273.484-168.107 41.112-64.948zM295.291 404.082l307.352 92.748-18.982 65.953-309.627-84.764 21.257-73.937zM260.437 551.064l319.052 35.821-6.789 68.248-319.848-27.553 7.585-76.516zM252.587 680.562h321.024v76.895h-321.024v-76.895zM698.804 890.558h-570.728v-351.118h65.517v290.873h441.799v-290.873h63.412v351.118zM653.047 419.176l-178.745-266.676 64.398-41.927 171.823 271.151-57.477 37.452zM717.577 378.709l-23.742-320.133 76.743-4.665 15.493 320.626-68.494 4.172z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stack-overflow" + ], + "grid": 0 + }, + "attrs": [], + "properties": { + "order": 40, + "id": 37, + "prevSize": 24, + "code": 58919, + "name": "stack-overflow", + "ligatures": "" + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 37 + }, + { + "icon": { + "paths": [ + "M251.262-2.371c-138.202 0-251.258 113.076-251.258 251.258v521.48c0 138.202 113.058 251.277 251.258 251.277h521.477c138.182 0 251.262-113.076 251.262-251.277v-521.48c0-138.182-113.078-251.258-251.262-251.258h-521.477zM502.934 122h0.969c129.617 0 185.568 7.873 200.336 10.035 87.534 12.798 161.375 78.841 172.773 162.648v0.004c6.202 62.253 0.829 163.576 0.789 180.203 0 4.892-0.717 49.558-1.004 54.273-7.671 119.756-83.16 167.050-162.484 182.117-1.076 0.319-2.331 0.529-3.586 0.777-50.291 9.714-104.166 12.305-155.281 13.723-12.224 0.319-24.41 0.316-36.633 0.316-50.823 0.013-101.466-5.938-150.871-17.727-0.262-0.070-0.537-0.080-0.801-0.020-0.264 0.057-0.513 0.175-0.723 0.344s-0.375 0.385-0.484 0.629c-0.105 0.245-0.155 0.514-0.145 0.781 1.397 15.91 4.892 31.569 10.395 46.582 6.847 17.372 30.757 59.098 119.652 59.098 51.655 0.094 103.141-5.857 153.383-17.727 0.255-0.052 0.517-0.060 0.773 0 0.255 0.057 0.497 0.168 0.703 0.328s0.371 0.362 0.488 0.594c0.112 0.232 0.18 0.487 0.184 0.746v58.777c-0.009 0.277-0.081 0.552-0.211 0.797s-0.314 0.456-0.539 0.621c-16.417 11.77-38.751 18.474-57.785 24.465-8.435 2.623-16.968 4.925-25.594 6.91-78.419 17.666-160.26 13.396-236.363-12.336-71.081-24.675-143.632-85.156-161.555-157.832-9.571-39.35-16.314-79.317-20.18-119.609-5.592-60.658-6.059-121.457-8.461-182.363-1.685-42.471-0.713-88.773 8.355-130.535 18.855-84.799 96.563-144.142 181.66-156.586 14.768-2.163 42.587-10.035 172.238-10.035zM398.371 246.082c-36.885 0-66.6 12.831-89.254 37.824-21.961 25.053-32.941 58.853-32.941 101.395v208.203h83.34v-202.070c0.036-42.542 18.139-64.238 54.379-64.238 40.075 0 60.184 25.665 60.184 76.359v110.609h82.91v-110.609c0-50.695 20.074-76.359 60.148-76.359 36.455 0 54.375 21.696 54.375 64.238v202.070h83.414l0.070-208.203c0-42.566-10.979-76.366-32.941-101.395-22.726-24.993-52.44-37.824-89.289-37.824-42.62 0-74.884 16.237-96.391 48.676l-20.789 34.457-20.754-34.457c-21.507-32.439-53.77-48.676-96.461-48.676z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "grid": 0, + "tags": [ + "mastodon" + ] + }, + "attrs": [ + {} + ], + "properties": { + "order": 48, + "id": 38, + "name": "mastodon", + "prevSize": 24, + "code": 59648 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 38 + } + ], + "height": 1024, + "metadata": { + "name": "Pythonicon" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "Pythonicon", + "majorVersion": 1, + "minorVersion": 0 + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "embed": false, + "resetPoint": 58880 + }, + "imagePref": { + "prefix": "icon-", + "png": true, + "useClassSelector": true, + "color": 0, + "bgColor": 16777215, + "classSelector": ".icon" + }, + "historySize": 50, + "showCodes": true, + "gridSize": 16 + } +} \ No newline at end of file diff --git a/static/fonts/Pythonicon.svg b/static/fonts/Pythonicon.svg old mode 100755 new mode 100644 index 513b029b5..a7441c98a --- a/static/fonts/Pythonicon.svg +++ b/static/fonts/Pythonicon.svg @@ -3,48 +3,48 @@ Generated by IcoMoon - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/fonts/Pythonicon.ttf b/static/fonts/Pythonicon.ttf old mode 100755 new mode 100644 index 9d69d57a3..5c57bd93d Binary files a/static/fonts/Pythonicon.ttf and b/static/fonts/Pythonicon.ttf differ diff --git a/static/fonts/Pythonicon.woff b/static/fonts/Pythonicon.woff old mode 100755 new mode 100644 index 7105049c8..1e9678a63 Binary files a/static/fonts/Pythonicon.woff and b/static/fonts/Pythonicon.woff differ diff --git a/static/fonts/demo.html b/static/fonts/demo.html new file mode 100644 index 000000000..2eec6ef68 --- /dev/null +++ b/static/fonts/demo.html @@ -0,0 +1,601 @@ + + + + + IcoMoon Demo + + + + + +
+

Font Name: Pythonicon (Glyphs: 40)

+
+
+

Grid Size: 16

+
+
+ + icon-bullhorn +
+
+ + +
+
+ liga: + +
+
+
+
+

Grid Size: Unknown

+
+
+ + icon-python-alt +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-pypi +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-news +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-moderate +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-mercurial +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-jobs +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-help +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-download +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-documentation +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-community +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-code +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-close +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-calendar +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-beginner +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-advanced +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-sitemap +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-search +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-search-alt +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-python +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-github +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-get-started +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-feed +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-facebook +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-email +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-arrow-up +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-arrow-right +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-arrow-left +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-arrow-down +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-freenode +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-alert +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-versions +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-twitter +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-thumbs-up +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-thumbs-down +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-text-resize +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-success-stories +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-statistics +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-stack-overflow +
+
+ + +
+
+ liga: + +
+
+
+
+ + icon-mastodon +
+
+ + +
+
+ liga: + +
+
+
+ + +
+

Font Test Drive

+ + +
  +
+
+ +
+

Generated by IcoMoon

+
+ + + + diff --git a/static/fonts/demo/demo.css b/static/fonts/demo/demo.css new file mode 100644 index 000000000..932837ba3 --- /dev/null +++ b/static/fonts/demo/demo.css @@ -0,0 +1,155 @@ +body { + padding: 0; + margin: 0; + font-family: sans-serif; + font-size: 1em; + line-height: 1.5; + color: #555; + background: #fff; +} +h1 { + font-size: 1.5em; + font-weight: normal; +} +small { + font-size: .66666667em; +} +a { + color: #e74c3c; + text-decoration: none; +} +a:hover, a:focus { + box-shadow: 0 1px #e74c3c; +} +.bshadow0, input { + box-shadow: inset 0 -2px #e7e7e7; +} +input:hover { + box-shadow: inset 0 -2px #ccc; +} +input, fieldset { + font-family: sans-serif; + font-size: 1em; + margin: 0; + padding: 0; + border: 0; +} +input { + color: inherit; + line-height: 1.5; + height: 1.5em; + padding: .25em 0; +} +input:focus { + outline: none; + box-shadow: inset 0 -2px #449fdb; +} +.glyph { + font-size: 16px; + width: 15em; + padding-bottom: 1em; + margin-right: 4em; + margin-bottom: 1em; + float: left; + overflow: hidden; +} +.liga { + width: 80%; + width: calc(100% - 2.5em); +} +.talign-right { + text-align: right; +} +.talign-center { + text-align: center; +} +.bgc1 { + background: #f1f1f1; +} +.fgc1 { + color: #999; +} +.fgc0 { + color: #000; +} +p { + margin-top: 1em; + margin-bottom: 1em; +} +.mvm { + margin-top: .75em; + margin-bottom: .75em; +} +.mtn { + margin-top: 0; +} +.mtl, .mal { + margin-top: 1.5em; +} +.mbl, .mal { + margin-bottom: 1.5em; +} +.mal, .mhl { + margin-left: 1.5em; + margin-right: 1.5em; +} +.mhmm { + margin-left: 1em; + margin-right: 1em; +} +.mls { + margin-left: .25em; +} +.ptl { + padding-top: 1.5em; +} +.pbs, .pvs { + padding-bottom: .25em; +} +.pvs, .pts { + padding-top: .25em; +} +.unit { + float: left; +} +.unitRight { + float: right; +} +.size1of2 { + width: 50%; +} +.size1of1 { + width: 100%; +} +.clearfix:before, .clearfix:after { + content: " "; + display: table; +} +.clearfix:after { + clear: both; +} +.hidden-true { + display: none; +} +.textbox0 { + width: 3em; + background: #f1f1f1; + padding: .25em .5em; + line-height: 1.5; + height: 1.5em; +} +#testDrive { + display: block; + padding-top: 24px; + line-height: 1.5; +} +.fs0 { + font-size: 16px; +} +.fs1 { + font-size: 32px; +} +.fs2 { + font-size: 24px; +} + diff --git a/static/fonts/demo/demo.js b/static/fonts/demo/demo.js new file mode 100644 index 000000000..6f45f1c40 --- /dev/null +++ b/static/fonts/demo/demo.js @@ -0,0 +1,30 @@ +if (!('boxShadow' in document.body.style)) { + document.body.setAttribute('class', 'noBoxShadow'); +} + +document.body.addEventListener("click", function(e) { + var target = e.target; + if (target.tagName === "INPUT" && + target.getAttribute('class').indexOf('liga') === -1) { + target.select(); + } +}); + +(function() { + var fontSize = document.getElementById('fontSize'), + testDrive = document.getElementById('testDrive'), + testText = document.getElementById('testText'); + function updateTest() { + testDrive.innerHTML = testText.value || String.fromCharCode(160); + if (window.icomoonLiga) { + window.icomoonLiga(testDrive); + } + } + function updateSize() { + testDrive.style.fontSize = fontSize.value + 'px'; + } + fontSize.addEventListener('change', updateSize, false); + testText.addEventListener('input', updateTest, false); + testText.addEventListener('change', updateTest, false); + updateSize(); +}()); diff --git a/static/fonts/index.html b/static/fonts/index.html deleted file mode 100644 index 703c351ee..000000000 --- a/static/fonts/index.html +++ /dev/null @@ -1,410 +0,0 @@ - - - -Your Font/Glyphs - - - - - -
-
-
-

Your font contains the following glyphs

-

The generated SVG font can be imported back to IcoMoon for modification.

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
-
-

Class Names

-
- - -  icon-alert - - - -  icon-arrow-down - - - -  icon-arrow-left - - - -  icon-arrow-right - - - -  icon-arrow-up - - - -  icon-calendar - - - -  icon-close - - - -  icon-code - - - -  icon-documentation - - - -  icon-email - - - -  icon-facebook - - - -  icon-feed - - - -  icon-freenode - - - -  icon-get-started - - - -  icon-github - - - -  icon-help - - - -  icon-pypi - - - -  icon-python - - - -  icon-python-alt - - - -  icon-search - - - -  icon-sitemap - - - -  icon-stack-overflow - - - -  icon-statistics - - - -  icon-success-stories - - - -  icon-text-resize - - - -  icon-thumbs-down - - - -  icon-thumbs-up - - - -  icon-twitter - - - -  icon-versions - - - -  icon-community - - - -  icon-download - - - -  icon-news - - - -  icon-jobs - - - -  icon-beginner - - - -  icon-moderate - - - -  icon-advanced - - - -  icon-search-alt - -
- -
- - - diff --git a/static/fonts/style.css b/static/fonts/style.css index 2f45ac8b0..dd31e10f7 100644 --- a/static/fonts/style.css +++ b/static/fonts/style.css @@ -4,148 +4,144 @@ } @font-face { font-family: 'Pythonicon'; - src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff'), - url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'); + src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff'), + url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBh4AAAC8AAAAYGNtYXDPws1/AAABHAAAAHxnYXNwAAAAEAAAAZgAAAAIZ2x5ZmlzfDUAAAGgAAArsGhlYWQmDfxCAAAtUAAAADZoaGVhB8MD6wAALYgAAAAkaG10eKYL/+kAAC2sAAAAsGxvY2HZ8NA+AAAuXAAAAFptYXhwADsBtAAALrgAAAAgbmFtZQhhTh0AAC7YAAABqnBvc3QAAwAAAAAwhAAAACAAAwP0AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAYAAAABQAEAADAAQAAQAgAD8AWOYG5gzmJ+kA//3//wAAAAAAIAA/AFjmAOYJ5g7pAP/9//8AAf/j/8X/rRoGGgQaAxcrAAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAA/8AAAAPAAAIAADc5AQAAAAABAAD/wAAAA8AAAgAANzkBAAAAAAEAAP/AAAADwAACAAA3OQEAAAAAAwAA/6sEAAPAAB8AIwBXAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgMjNTMTDgEHDgEHDgEVIzU0Njc+ATc+ATc+ATU0JicuASMiBgcOAQcnPgE3PgEzMhYXHgEVFAYHAwX99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi3oubmcCy0iGB0HBgayBQUGDwoKLiQTEgcIBxcQEBwLCw4DtQUkIB9hQjNSICorCwsDqxQURC4uNP33NC4tRRQTExRFLS40Agk0Li5EFBT8f70BKhItGxMeCwwyEiYXJQ4OGgwLKh0QHA0NFAcHBwsLCyYcFzJQHx4fFRYcTTAUJhMAAv/+/60D/gPAAB8ALAAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYTBycHJzcnNxc3FwcXAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi4Em6Ggm6Cgm6Chm6CgA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/V+boKCboKCboKCboKAAAAUAAP/ABAADwAAqAE4AYwBtAJEAAAE0Jy4BJyYnOAExIzAHDgEHBgcOARUUFhcWFx4BFxYxMzA0MTI3PgE3NjUDIiYnLgEnLgE1NDY3PgE3PgEzMhYXHgEXHgEVFAYHDgEHDgEBNDY3DgEjKgExBxUXMDIzMhYXLgEXJxMeAT8BPgEnASImJy4BJy4BNTQ2Nz4BNz4BMzIWFx4BFx4BFRQGBw4BBw4BBAAKCyMYGBtTIiN+V1hpBggIBmlYV34jIlMbGBgjCwqfBw4ECRIIEhISEggSCQQOBwcOBAkSCBETExEIEgkEDv2UBQYkQiYzETc3ETMmQiQGBXSAUgMWDHYMCQcBdgMFAgMHAwcHBwcDBwMCBQMDBQEEBwMHBwcHAwcEAQUCE0tCQ2MdHAEYGEEjIhYiUS4vUSIVIyJCGBgBHR1jQkJM/soLBAsgFS53QkJ3LhQhCgULCwUKIRQud0JCdy4VIAsECwE2J0sjBQVfWF8FBSNLrhj+vw0LBTAEFwwBQgUBBA0IES4aGS4SCAwEAgQEAgQMCBIuGRouEQgNBAEFAAQAAP/AA+MDwAAjAC8AUABcAAABLgEjIgYHDgEdATMVISIGBw4BFx4BOwE1NDY7ATI2PQE0JicHIiY1NDYzMhYVFAYFLgErARUUBisBIgYdARQWFx4BNz4BPQEjNSEyNjc2JicBMhYVFAYjIiY1NDYCbR8/Hh85Gkwr7v65NFMOEAERDT4zUlg97jFGRzDhExoaExIaGgJFDTY0WVk87jBGRy85ckMtSu0BZDQxEhMBEv6OExoaExIaGgOfBQQFBA47M1sePTxEZ0c0RGw7WUcy4zBECJoaExMaGhMTGuUzRWk+WUgx4zA7DhADEw05M1seQzY4ckj+OhoTExoaExMaAAAAB//+/60D/gPAAB8AMgA2AEkATQBRAFUAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmExQHDgEHBiMhIicuAScmPQEhFTUhNSE1ITU0Nz4BNzYzITIXHgEXFh0BJSE1IQEhFSERIRUhAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi6IEBE2IyQl/golIyM3EREDffyDA338gxEQNyMjJgH2JSQjNhEQ/cIBBf77AQX++wEF/vsBBQOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP0CJSMkNhEQEBE2JCMlQkKA/T48JCMjNxERERE3IyMkPGE+/sI+/wA9AAAAAAgAAP+uA/4DwAAeADkAPgBDAEgATQBSAFcAAAERFAYxMDU0EDU0NQURFBceARcWMyEyNz4BNzY1EQcDMAYjMCMqAQciIyInLgEnJjU0NTY0NTQxIREDNSEVIQUhFSE1ESEVITU1IRUhNRUhFSE1JTUhESEDvkD8ghQURC4tNAIHNC4uRBQUQH8lI0RErVFRGyIjIzgSEgEC/T39hAJ8/YQBO/7FAnv9hQE7/sUBO/7FAnz+/AEEAu39wkc6dXUBMZOUPgH8/DMuLkQUFBQURC4uMwJFAf0bGAERETYjIiQkcnL0YGD8nAL1MH5/QkL+gUFB/0JCfkFBAvz+wAAAAAAFAAD/wAO3A8AAHAAlADQAQwBQAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIwEnPgE3Fw4BBxMiJjU0Nj8BFx4BFRQGIxEiBgcnPgEzMhYXBy4BIwUuASc3FhceARcWFwcB/FtRUXgjIiIjeFFRW1xRUHgjIyMjeFFQXP6oFhFCLSIoRx31JzgfGCouFRs4KBEjECctaDkbNBlUHDsgAUMYWDlVMSoqPxQUBJwDaCMjeFFQXFtRUXgjIiIjeFFRW1xQUXgjI/6aFzlhJIANKx3+rDgoHC4MxsoMLBooOAG5AwOOHCAHB8sLCtk8XR3NFCAgUzIyN0EAAAAABgAA/6sEAgPAAA8AIAAtAF4AbAB5AAABMhYVERQGIyEiJjURNDYzJSEiBhURFBYzITI2NRE0JiMBNSMVIxEzFTM1MxEjFyImNTQ2Nyc0NjcuATU0NjMyFhceATMyNjcXDgEjHgEVFAYHIgYVFBYfAR4BFRQGIzcnDgEVFBYzMjY1NCYnAyIGFRQWMzI2NTQmIwNXEhkZEv1XERkZEQKp/VdGZWVGAqlHZGRH/k93QUF3QUH0OUMjFR0UDBQXOi8MEQcIEgsMFgYJAxEHBAY2MBARBQZAJitDOBgpFxwiISEhFRQbFRsbFRQdGxYDKhkR/VcSGRkSAqkRGYFlRv1XR2VlRwKpRmX9Vc7OAdHLy/4vnEIxJjEJIBAbBg8tHzA+AwIDAwcFNAMFCBsQLUABCQkECQIWDTYrLj6nDAIiHRkpJhYVIQUBFSMaGiMjGhojAAAAAAMAAP+sBAEDwAAZAEMAWAAAAQUVFAYjIiY9ASUiJjERFBYzITI2NREwBiMRIzU0JicuASsBIgYHDgEdASMiBh0BFBYzBRUUFjMyNj0BJTI2PQE0JiMlNDY3PgE7ATIWFx4BFRwBFSM8ATUDg/7dPiEiPf7cM0pKMwMFNEpKNMISEhExGoMaMBISEsAzSkozAVMcFBMcAVM0Sko0/f4IBwYXEYMSFgYHCP0BBDIeITAwIR4yQP7mNEpKNAEaQAGoQxswEREQEBERMBtDSjOANEo4NBQcHBQ0OEo0gDNKQxEVBgYJCQYGFRERIhAQIhEAAAL///+sA/8DwAAGABwAABMJASMRIREFBychFRQXHgEXFjMhMjc+ATc2PQEhgQF/AX2//oIBoODh/uAUFEQuLTQCCjMuLkQUFP7hAiv+gQF/AUD+wPzh4Yc0Li5EFBQUFEQuLjSHAAAABgAA/60EAAPAAA4ALgA7AEgAVQBnAAABBycDFzcXARcHFz8CASchIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmASImNTQ2MzIWFRQGIzUiJjU0NjMyFhUUBiM1IiY1NDYzMhYVFAYjARQHDgEHBgclESEyFx4BFxYVAtsZWroooDP+tAokBh8kNAF+Of32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLf0qExwcExQcHBQTHBwTFBwcFBMcHBMUHBwUA1gRETsoJy394AIgLScoOxERAxUnOf7cGv0g/fczOh8IOQwCWNcUFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/NIdExQdHRQTHf4cFBQcHBQUHP4cFBQcHBQUHP5QLScoOxISAQIDdxEROygnLQAABwAA/64DiAPAAAwAGQAmADMAQABKAGsAAAEyNjU0JiMiBhUUFjMXMjY1NCYjIgYVFBYzFyIGBx4BHQEzNTQmIyUyNjU0JiMiBhUUFjMHIgYdATM1NDY3LgEjJSIGHQEhNTQmIwE0Jy4BJyYjIgcOAQcGFRQWFwc3HgEfATc+ATcXJz4BNQIBKz09Kys9PSv7IjAwIiIwMCIWHjEQBgbJRTH98iIwMCIiMDAiFjFFyQYGEDEeARNAWQEyWUABex4eZ0VFTk9FRGceHl1MEWETJxUxMhUqE2ERTF0BAD0rKz09Kys9HTAiIjAwIiIwJRkUDRwObmMuQSUwIiIwMCIiMCVBLmNuDhwNFBkiVDyiojxUAkoaFxcjCQoKCSMXFxoiNxGtnwIDAcLCAQMCn60RNyIAAAAEAAD/qwQAA8AAHwAmACsAMQAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBBxcVJzcVEyMTNwM3NTcnNRcDBf32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLf4DfX3+/pJNq02r7Xh4+QOrFBRELi40/fc0Li1FFBMTFEUtLjQCCTQuLkQUFP5ubWxw3N1w/lkCdwH9iGNwZ2hw2AAAAAAOAAD/rQQAA8AAHwArADgARABWAFoAXgBjAGcAawBvAHQAeAB8AAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgcyFhUUBiMiJjU0NiMyFhUUBiMiJjU0NjMjMhYVFAYjIiY1NDYBISInLgEnJicTIREUBw4BBwYDMxUjNzMVIwUzFSM1OwEVIzczFSM3MxUjBTUjFBY3MxUjNzMVIwMF/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4tOxQcHBQUHBzqFBwcFBQcHBT+FB0dFBMdHQHu/jwsKCg7EhIBAgN3ERE7KCf0lpbMlpb9m5eXzJeWzJaWzJaW/jKXZGiXlsyWlgOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFFUcFBMcHBMUHBwUExwcExQcHBQTHBwTFBz8mREROygoLQHf/iEtKCg7ERECeZOTk0KTk5OTk5OT1pM+VZOTk5MAAAAABQAA/8ADtwPAABwAJQA3AEYAUwAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJiMBJz4BNxcOAQcTIiY1NDY3Jxc+ATMyFhUUBiMRIgYHJz4BMzIWFwcuASMFLgEnNxYXHgEXFhcHAfxbUVF4IyIiI3hRUVtcUVB4IyMjI3hRUFz+qBYRQi0iKEcd9Sc4AwJwrwYOByg4OCgRIxAnLWg5GzQZVBw7IAFDGFg5VTEqKj8UFAScA2gjI3hRUFxbUVF4IyIiI3hRUVtcUFF4IyP+mhc5YSSADSsd/qw4KAcPBq1uAgI4Jyg4AbkDA44cIAcHywsK2TxdHc0UICBTMjI3QQAFAAD/wAO3A8AAHAArADQARgBTAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIxUyFhcHLgEjIgYHJz4BMwEnPgE3Fw4BBwUeARUUBiMiJjU0NjMyFhc3BzcuASc3FhceARcWFwcB/FtRUXgjIiIjeFFRW1xRUHgjIyMjeFFQXBs0GVQcOyARIxAnLWg5/qgWEUItIihHHQFSAQI4KCc4OCcKEQmpcOYYWDlVMSoqPxQUBJwDaCMjeFFQXFtRUXgjIiIjeFFRW1xQUXgjIz0HB8sKCwMDjhwg/tcXOWEkgA0rHd8FCwUoODgoJzgDBG6xazxdHc0UICBTMjI3QQAAAAMAAP+tBAADwAAfAC0ANgAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYFITUzFSEVIRUjNSEnNwEhFSM1ITUhFwMF/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4t/YwBF0cBH/7hR/7pZ2cCc/7rR/7nAnVoA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQUwD4+wj4+YGL+AP//wmEAAAAE//7/qwP+A8AAHAAlAEUAdQAAEwYHBhQXFhcWFxYyNzY3Njc2NCcmJyYnJiIHBgcXNCYjNTIWFSMBISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJhMHBiIvASY0PwEnBgcGJicmJyYnJjQ3Njc2NzYyFxYXFhceAQcGBxc3NjIfARYUB78eDg8PDh4dJSVNJSUeHQ8PDw8dHiUlTSUlHftQOERfGwFI/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4uemgMIgv+DAwcPicuLl4tLSMnFBMTFCcnMTFmMTEnJBMUBQ0OHj4cDCEM/QwMAuwdJSVNJSUeHQ8PDw8dHiUlTSUlHR4ODw8OHqg5UBpfRAFnFBRELi40/fc0Li1FFBMTFEUtLjQCCTQuLkQUFPy5aAwM/QwhDBw+Hw0OBRQTJCcxMWYxMScnFBMTFCcjLSxeLi4nPhwLC/4MIQwAAAMAAP/AA7ADwAAcACUAVQAAEwYHBhQXFhcWFxYyNzY3Njc2NCcmJyYnJiIHBgcXNCYjNTIWFSMBBwYiLwEmND8BJwYHBiYnJicmJyY0NzY3Njc2MhcWFxYXHgEHBgcXNzYyHwEWFAe/Hg4PDw4eHSUlTSUlHh0PDw8PHR4lJU0lJR37UDhEXxsB9mgMIgv+DAwcPicuLl4tLSMnFBMTFCcnMTFmMTEnJBMUBQ0OHj4cDCEM/QwMAuwdJSVNJSUeHQ8PDw8dHiUlTSUlHR4ODw8OHqg5UBpfRP4gaAwM/QwhDBw+Hw0OBRQTJCcxMWYxMScnFBMTFCcjLSxeLi4nPhwLC/4MIQwAAAUAAP+tBAADwAAMABgAOABcAHwAACUyNjU0JiMiBhUUFjMDIgYVFBYzMjY1NCYlISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgEVIyImJyY2Nz4BMyE1IzU0Njc+ATcyFhceAR0BFAYrASIGFQUOASMhFTMVFAYHBiYnLgE9ATQ2OwEyNj0BMzIWFxYUAmAPFhYPDxYWD74PFRUPEBUVAVP99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi395EMrMwsOAQ0MRCsBDsQkPhUwGRk0GSg6OSnEMkkCdA8oK/7axD0lOF4vJjw6KMUxSUorLAsPSxYQDxYWDxAWAsgWDxAVFRAPFpoUFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/ZxaOCw6VTgxMxlLKjELAwQBBAQHOCe7KTtJMQUtNhlLKy4LEAMNDDAouyg8STNXOSo7XwAAAAAEAAD/qwQAA8AACwAXADcAyAAAASIGFRQWMzI2NTQmISIGFRQWMzI2NTQmASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYTFAYPAQ4BDwEOAQ8BFx4BFxUUFhcuAT0BNCYjKgExBxUwFBUUFhcuATUwNDU0JiMiBhUcATEUBgc+AT0BIzAGHQEUBgc+ASc1IwYmJx4BFzoBMTM3PgE/AScuAS8BLgEvAS4BJzwBNTQ2PwEnLgE1NDY3HgEfATc+ATMyFh8BNz4BNx4BFRQGDwEXHgEXHAEVAo4ZIiIZGCMj/uMYIyMYGCMjAWT99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi0dBgYDAQMCBBllSAwIDg8BCAYaIRICAQEFBAUcGQkEBQkgGAQFBxMeGQUGATlRJC4qOTgiFwUBAhMSDA9QahwFAgICAwgHARseAwEEBAUGIkclAgMdPB4ePh8CAx9FJgcHAgEBAhwhAQI2JBgZIyMZGCQkGBkjIxkYJAF1FBRELi40/fc0Li1FFBMTFEUtLjQCCTQuLkQUFP5wGCsTCQMGBAkyOwsCCRAhEqwKEQcCExCPDwYBBZ4MCRAHAhcQlgYGBwcGBp4RDwEGDQm0Bg+SDhgBBhAJdwFvJQVSAQYTIQ4KAgk7MQkDBgQJFC4aAQIBLE0gAwMQHg8TJRMCGRkBAQYGBgYBAhYZBBUrFgoTCgMCIlU1AQIBAAIAAP+tA+ADwAAOAEkAAAEyNjURNCYjIgYVERQWMxMVFhceARcWFRQHDgEHBiMiJy4BJyY1NDc+ATc2NzUGBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYnAgAZJCQZGSQkGcAkHR0qCwwcG19AQEhJP0BfHBsLCyodHSQ/NTVMFRUmJYJXWGNjV1eCJiYWFUw1NT8BaCIdAb4dIiId/kIdIgHbkhgfIEsqKy5JP0BfGxwcG19AP0kuKitLHyAXkhwsLHJDREljWFeCJSYmJYJXWGNKQ0NyLC0cAAAE//7/qwP+A8AAHwArAEgAZQAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBIiY1NDYzMhYVFAYlIz4BNTQnLgEnJiMiBgc1PgEzMhceARcWFRQGBzMjPgE1NCcuAScmIyIGBzU+ATMyFx4BFxYVFAYHAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi799TFFRTExRUUBCJIOEA8QNSQkKR43Fxo2HEQ8PFoaGgkI55UHByAgb0tKVRw2Gho2HHNlZZYrLAUFA6sUFEQuLjT99zQuLUUUExMURS0uNAIJNC4uRBQU/LVFMTFFRTExRQ8WNRwpJCQ1EA8RD5IJChoaWjw8RBs0GBkzG1VKS28gIAgHlQUGLCuWZWVzGjQZAAIAAP+tBAADwAAfADQAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmAyMRIxEjNTM1NDY7ARUjIgYVBzMHAwX99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi2Tap5PT01faUIlDwF4DgOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP4C/oIBfoRPUFuEGxlChAAAAAAE//7/wAP+A8AACwAPABMAHwAAASEiBh0BBSU1NCYjEzUHFyUVNycFJwUUFjMhMjY3JQcDgPz7NEkB/QIDSjR+/v78APn5Af3A/sNKMwMFM0oB/r7BAu9KNAX9/wM0Sv5B/H5++fh9e/1gnjNKSTOfYAAAAAL//v+tA/4DwAAfACcAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmAxEhESMJASMDAv33NC4tRRQTExRFLS40Agk0Li5EFBQUFEQuLnX+gr4BfAF/vwOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP4C/sABQAF//oEAAAAC//7/rQP+A8AAHwAnAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgE1IREhNQkBAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi7+yf7AAUABf/6BA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/H2/AX6//oT+gAAAAv/+/60D/gPAAB8AJwAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYTIRUJARUhEQMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4uBv7A/oEBfwFAA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/Ua/AXwBgL/+ggAAAAL//v+tA/4DwAAfACcAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmCQEzESERMwEDAv33NC4tRRQTExRFLS40Agk0Li5EFBQUFEQuLv7E/oG/AX6+/oQDrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT8fwF/AUD+wP6BAAAEAAD/rQQAA8AAHwA6AFUAcAAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBIiY1NDYzMhYXBy4BIyIGFRQWMzI2NzMOASMTFBYXBy4BNTQ2MzIWFRQGByc+ATU0JiMiBhUBIiYnMx4BMzI2NTQmIyIGByc+ATMyFhUUBiMDBf32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLf39S2pqSxQnETcFCwUeKyseGigFbQVoR4ALCTchKGpLSmooITcJCysdHisBDkdoBW0FKBoeKyseBAoFNhAmE0tqaksDrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT8w2pLS2oJCF8CAiseHioiGUZiAggPGQpfGEwtS2pqSy1LGV8KGg4eKioe/fhiRhkiKh4eKgEBXwgIaktLagAAAAADAAD/qwP7A8AAFwAbACIAACUBJicmBgcGBwEGBwYWFxYzITI3PgE1JgUjNTMTByMnNTMVA9/+sBYnJ1EkJBH+pxwBAi0sLD4CbD4sLC0B/ma6ugIieiK+rwKwJxISAhMTIv1NNS8vRhUUFBVGMC9KvgE+/f3AwAADAAD/wAO+A8AAAwAJAA8AABMlDQEVJQcFJScBJQcFJSc+AcIBvv5C/teZAcIBvpj+2v7XmQHCAb6YAnG7u75CfT++vj/+w30/vr4/AAAAAAMAAP+tBAADwAALACsAYQAAASIGFRQWMzI2NTQmEyEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYDFgcOAQcGIyImJxY2Ny4BJxY2Ny4BNx4BMy4BNxYXHgEXFhcmNjMyFhc+ATcOAQc2FjcOAQcCsRMaGhMSGhpC/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4tCQQdHnhZWXNFgDdCfjQ2VBATJhE7SgERJhQ3HCAeJiVXMDAzEmNPJD4XHFwYCU0aGUsWEEUZAowaExMaGhMTGgEhFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP52V1VVhyopJiMHIykBQDEEAgUMXjkJCySANyUfHi0NDQNOfR0YBjwOHV8QAwUKGR4RAAAAAAT//v+rA/4DwAAfADkAdQCBAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgEGJisBIiYnJjY9ATQmNzYWOwEyNhcTDgEHJRYGBxYGBwYHDgEnJiMiBicuAScDPgE3PgE3PgE3PgE3NiY3PgEXHgEXFgYHDgEHDgEHFjYXFgYHFgYHBSIGFRQWMzI2NTQmAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi7+SAgfEHIbKwYEAwEYCRsLMCE/DiICCAYB2xoPGQ4EChEgIU4rKycSIg0LEgkjBAgCESMWCxoOEigCAQIEBR4QERkCAggJCxQGBgUBPJUYDRkSIQEf/akTHBwTFBwcA6sUFEQuLjT99zQuLUUUExMURS0uNAIJNC4uRBQU/LoEAQUSDzgStSBHBwIBAhH+kwcLA9IRTQkMLAwUCAkEAgECAgIMBgF5CA8DGjETCg0JCzkaCx8KCREFBTAXFi4PERINCxcSBAQpFkMIC1cMOxwUFBwcFBQcAAAAAAT//v+rA/4DwAAfADkAdQCBAAAXITI3PgE3NjURNCcuAScmIyEiBw4BBwYVERQXHgEXFgE2FjsBMhYXFgYdARQWBwYmKwEiBicDPgE3BSY2NyY2NzY3PgEXFjMyNhceARcTDgEHDgEHDgEHDgEHBhYHDgEnLgEnJjY3PgE3PgE3JgYnJjY3JjY3BTI2NTQmIyIGFRQW+QIJNC4uRBQUFBRELi40/fc0Li1FFBMTFEUtLgG4CR4QchsrBgUEARgJGwswIT8NIwIIBv4lGhAYDgUJEiAgTysqJxIjDAsSCSQFCAIRIxYLGg4RKAMBAgQFHg8SGQICCAoKFAYGBQI8lhgNGRIhAR8CVxQbGxQTHBxVExRFLS40Agk0Li5EFBQUFEQuLjT99zQuLUUUEwNFBAEEEw84ErQgRwgCAQEQAW0HCwPREE4IDC0LFAkIBAECAgICCwf+hwgPAxoxEwkOCQs4GgsgCgkRBQYvFxctDxESDQwWEwMDKRZCCQtWDXUcFBQcHBQUHAAABQAA/6sEAAPAAAIABgAmAC8AOAAAATMnATMnBwEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmAScjByMTMxMjBScjByMTMxMjAnZ9Pv4zQCAgAh399jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi3+IBxrHliISIRXAdsltihkt2GxYgGP6/7dk5MCVBQURC4uNP33NC4tRRQTExRFLS40Agk0Li5EFBT9BGBgAaf+WQGBgQI5/ccAAAAAAwAA/78D/wPAAAoA3QGxAAABNyMnByMXBzcXJwMuASc2JicuAScOARceARcuASc+ATc2JicOAQcGFhcuASc+ATc+AScOAQcOARcuATU8ATUWNjc+ATcuAQcOAQc+ATceATc+ATcuAQcOAQc+ATceATM+ATc0JicmBgc+ATc+AScuAQcOAQc+ATc+AScOAQcOARcOAQc+ATc2JicOAQcGFhcOAQcuAScuAScOARceARcGFBUUFhcuAScuAQcGFhcWNjceARcuAScmBgceARcWNjciJiceARcOAQcOAQceATc+ATceARcwMjMyNjc2JicBDgEHPgE1PAEnPgE3NiYnDgEHDgEHLgEnPgEnLgEnDgEXHgEXLgEnNiYnLgEnBhYXHgEXLgEnJgYHBhYXHgEXLgEHDgEVHgEXMjY3HgEXLgEnJgYHHgEXFjY3HgEXLgEnJgYHHgEXHgE3FBYVFAYHNiYnLgEnBhYXHgEXDgEHPgEnLgEnDgEXHgEXDgEHPgE3NiYnDgEHDgEXDgEHDgEXHgEzOgE5AT4BNx4BFxY2Ny4BJy4BJz4BNw4BBx4BNz4BNy4BBw4BBz4BNx4BNz4BNSYGBwJRgZg6L5iAOoGAL3IJEwkGCwsMHBEODQoEDgkgORkSFQMECg0XJAUDAQQRHAwWIgsLAwYXKQ4HBwELCxQmERATBBIoEwkPBQYVDw4kFBUkEQkgGAwYCxIsGQcfFhg2HhscDR4OFCoXBggBAgsHEiQRBw4GFxQHKkUUEQQHFyoSBAgCCQMNHSkGBQ8PEBYHAQQDCBwUDgYKCyITAQgIBQ0HFC0WARoYFi4VECwaDyQVHDUVDjMfIDIQAQEBIU8sFCcTHSsKHk0gHx0BCRMJAQEGCQEBCQcByAcNBQgIARMjCgoGDhQcBwQEAQcWEA8PBQYpHQ0DCQMHBBIqFwcEERRFKgcUFwcNBxEkEgcLAQIIBhcqFA4dDhwaHTYYFh8HGSwSCxgMGCAJESUVEyQODxUGBQ8JEygSBBMRECYUAQwLAQYIDikXBgMLCyIWDBwQAwEDBSQXDQoEAxYRGTkfCA4ECg0OERwMCwsGCRMJBwkBAQkGAQEJEwkBHR8hTB4KKx0TJxQsTyIBAgEQMiAfNA0VNRwVJA8aLBAVLhcXGhctFAHOXoyMXqRpaaT+ewEDAiFBGhoaAhw/HQwUCAwjFhY1GRwmDRAtHgwZDBQqFwskFRcpEwIXGA0gEB5BIQUKBQIMDg8nFgkBDwYTDB86GgwHBQYbEhATBAILCRgpEQ0PAQ4KDxYDAQIECQ8EAgsGBwgCBAoHBQoGEiAOBiAXFCQMECUWCRIJGioNEjgdGycLGjofCxcKGyMFH0UcGRkBBw0HHjscCA0HEQ0HJD8REAMMITwaDA8DAw8UISwBASQbAgEdLA0BCwoPMB8UBRQSPCECAwEJBgcKAQEpBw0IHDseBw0HARkZHEUfBSMbChcLHzoaCycbHTgSDSoaCRIJFiUQDCQUFyAGDSESBgoFBwoEAggHBgsCBA8JBAIBAxYPCg4BDw0RKRgJCwIEExASGwYFBwwaOh4LEwYPAQkWJw8NDQIFCgQiQR4QIA0YFwITKRcVJAsXKhQMGQweLRANJhwZNRYWIwwIFAwdPxwCGhoaQSECAwEBCgcGCQEDAiE8EhQFFB8wDwoLAQ0sHQEBARskAQEsIRQPAwMPDBo8IQwDEBE/JAcNEQAFAAD/qwPeA8AABAANABIAFgAaAAATMxEjERMhMjY3IR4BMxMzESMRFzMRIxMzESN8hYV/AglGdCD8QiF0RlaFhdWEhNWEhAHp/n8Bgf3CRzk5RwM7/YECf37+AANB/L8AAAAACAAA/60EAAPAAB8AJAApAC4AMgA7AEAARAAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYNAQclNwcFByU3BwUHJTcHIRUhBSERMxEhETMRCwE3Ewc3AzcTAwX99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi3+PwENJf7vKVEBNBP+yhUjAT8G/sAHBwFB/r8Bvv3FQgG5QC6zQaw6QRhNDwOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP2vOqhBmV1CVUqTJEQbTYJNhQFf/t0BI/6hAdcBCyr+8SYpAUAF/r8AAwAA/60EAAPAACAAgQCqAAATIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmIyEXMzIWFx4BFzEWBhUUBhUOAQcwIiMOAQcqASMiJicwIjE4ASM4ARU4ATEeARceATMyNjcwMjEwFjE4ATEwFDEVOAEVOAExDgEHDgEHBiYnLgEnLgEnLgEnJjY3PgE3PgEzByIGBw4BHQEzNTQ2MzIWHQEzNTQ2MzIWHQEzNTQmJy4BIyIGDwEnLgH7NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLTT99vwBYVwLQmIJBQQBBmE8AgEmTycJEgkmTCUBAQEFBAUwQydNJQEBDR8OBg0HO3g5NV8OBwoDBAMBAgMHDmhAC0BhaRstERARVBsbHh5THh4bHFMQEREtGyAwERQVEDEDrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBR8CQEKWj8veQwELwNaUQwIBQEICQEMGAsNLgkJAQE7AQkLBQIDAg0GFBJVNx08Hi5bLh9EH0BTCgEJfBMTEzMg0MogICYmbm4mJiAgytAgMxMTExkYIyMYGQAAAQAAAAEAAEDJ37dfDzz1AAsEAAAAAADhd1vtAAAAAOF3W+3//v+rBAIDwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAP/+//4EAgABAAAAAAAAAAAAAAAAAAAALAQAAAAAAAAAAAAAAAIAAAAEAAAABAD//gQAAAAEAAAABAD//gQAAAAEAAAABAAAAAQAAAAEAP//BAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQA//4EAAAABAAAAAQAAAAEAAAABAD//gQAAAAEAP/+BAD//gQA//4EAP/+BAD//gQAAAAEAAAABAAAAAQAAAAEAP/+BAD//gQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAKABQAHgCiAOwBvgJAAsYDRgPGBHAE6AUcBbgGUgamB1wH3ghgCLYJaAnsCpwLrgwcDLANAA06DX4Nwg4GDkoO7A8oD1AP5hCsEXAR0BRWFIgVABXYAAAAAQAAACwBsgAOAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAoAAAABAAAAAAACAAcAewABAAAAAAADAAoAPwABAAAAAAAEAAoAkAABAAAAAAAFAAsAHgABAAAAAAAGAAoAXQABAAAAAAAKABoArgADAAEECQABABQACgADAAEECQACAA4AggADAAEECQADABQASQADAAEECQAEABQAmgADAAEECQAFABYAKQADAAEECQAGABQAZwADAAEECQAKADQAyFB5dGhvbmljb24AUAB5AHQAaABvAG4AaQBjAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMFB5dGhvbmljb24AUAB5AHQAaABvAG4AaQBjAG8AblB5dGhvbmljb24AUAB5AHQAaABvAG4AaQBjAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAclB5dGhvbmljb24AUAB5AHQAaABvAG4AaQBjAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'); font-weight: normal; font-style: normal; } -/* Use the following CSS code if you want to use data attributes for inserting your icons */ -[data-icon]:before { - font-family: 'Pythonicon'; - content: attr(data-icon); - speak: none; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'Pythonicon' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } -/* Use the following CSS code if you want to have a class per icon */ -/* -Instead of a list of all class selectors, -you can use the generic selector below, but it's slower: -[class*="icon-"]:before { -*/ -.icon-alert:before, .icon-arrow-down:before, .icon-arrow-left:before, .icon-arrow-right:before, .icon-arrow-up:before, .icon-calendar:before, .icon-close:before, .icon-code:before, .icon-documentation:before, .icon-email:before, .icon-facebook:before, .icon-feed:before, .icon-freenode:before, .icon-get-started:before, .icon-github:before, .icon-help:before, .icon-pypi:before, .icon-python:before, .icon-python-alt:before, .icon-search:before, .icon-sitemap:before, .icon-stack-overflow:before, .icon-statistics:before, .icon-success-stories:before, .icon-text-resize:before, .icon-thumbs-down:before, .icon-thumbs-up:before, .icon-twitter:before, .icon-versions:before, .icon-community:before, .icon-download:before, .icon-news:before, .icon-jobs:before, .icon-beginner:before, .icon-moderate:before, .icon-advanced:before, .icon-search-alt:before { - font-family: 'Pythonicon'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; +.icon-bullhorn:before { + content: "\e600"; } -.icon-alert:before { - content: "\e000"; +.icon-python-alt:before { + content: "\e601"; } -.icon-arrow-down:before { - content: "\e001"; +.icon-pypi:before { + content: "\e602"; } -.icon-arrow-left:before { - content: "\e002"; +.icon-news:before { + content: "\e603"; } -.icon-arrow-right:before { - content: "\e003"; +.icon-moderate:before { + content: "\e604"; } -.icon-arrow-up:before { - content: "\e004"; +.icon-mercurial:before { + content: "\e605"; } -.icon-calendar:before { - content: "\e005"; +.icon-jobs:before { + content: "\e606"; } -.icon-close:before { - content: "\e006"; +.icon-help:before { + content: "\3f"; } -.icon-code:before { - content: "\e007"; +.icon-download:before { + content: "\e609"; } .icon-documentation:before { - content: "\e008"; + content: "\e60a"; } -.icon-email:before { - content: "\e00a"; +.icon-community:before { + content: "\e60b"; } -.icon-facebook:before { - content: "\e00b"; +.icon-code:before { + content: "\e60c"; } -.icon-feed:before { - content: "\e00c"; +.icon-close:before { + content: "\58"; } -.icon-freenode:before { - content: "\e00d"; +.icon-calendar:before { + content: "\e60e"; } -.icon-get-started:before { - content: "\e00e"; +.icon-beginner:before { + content: "\e60f"; } -.icon-github:before { - content: "\e00f"; +.icon-advanced:before { + content: "\e610"; } -.icon-help:before { - content: "\e011"; +.icon-sitemap:before { + content: "\e611"; } -.icon-pypi:before { - content: "\e014"; +.icon-search:before { + content: "\e612"; +} +.icon-search-alt:before { + content: "\e613"; } .icon-python:before { - content: "\e015"; + content: "\e614"; } -.icon-python-alt:before { - content: "\e016"; +.icon-github:before { + content: "\e615"; } -.icon-search:before { - content: "\e017"; +.icon-get-started:before { + content: "\e616"; } -.icon-sitemap:before { - content: "\e018"; +.icon-feed:before { + content: "\e617"; } -.icon-stack-overflow:before { - content: "\e019"; +.icon-facebook:before { + content: "\e618"; } -.icon-statistics:before { - content: "\e01a"; +.icon-email:before { + content: "\e619"; } -.icon-success-stories:before { - content: "\e01b"; +.icon-arrow-up:before { + content: "\e61a"; } -.icon-text-resize:before { - content: "\e01c"; +.icon-arrow-right:before { + content: "\e61b"; } -.icon-thumbs-down:before { - content: "\e01d"; +.icon-arrow-left:before { + content: "\e61c"; } -.icon-thumbs-up:before { - content: "\e01e"; +.icon-arrow-down:before { + content: "\e61d"; } -.icon-twitter:before { - content: "\e01f"; +.icon-freenode:before { + content: "\e61e"; +} +.icon-alert:before { + content: "\e61f"; } .icon-versions:before { - content: "\e020"; + content: "\e620"; } -.icon-community:before { - content: "\e021"; +.icon-twitter:before { + content: "\e621"; } -.icon-download:before { - content: "\e009"; +.icon-thumbs-up:before { + content: "\e622"; } -.icon-news:before { - content: "\e012"; +.icon-thumbs-down:before { + content: "\e623"; } -.icon-jobs:before { - content: "\e013"; +.icon-text-resize:before { + content: "\e624"; } -.icon-beginner:before { - content: "\e022"; +.icon-success-stories:before { + content: "\e625"; } -.icon-moderate:before { - content: "\e023"; +.icon-statistics:before { + content: "\e626"; } -.icon-advanced:before { - content: "\e024"; +.icon-stack-overflow:before { + content: "\e627"; } -.icon-search-alt:before { - content: "\e025"; +.icon-mastodon:before { + content: "\e900"; } diff --git a/static/sass/_fonts.scss b/static/sass/_fonts.scss index 6154dcef1..a12d69881 100644 --- a/static/sass/_fonts.scss +++ b/static/sass/_fonts.scss @@ -5,134 +5,137 @@ */ -@font-face { + @font-face { font-family: 'Pythonicon'; - src: url('../fonts/Pythonicon.eot'); + src:url('../fonts/Pythonicon.eot'); } @font-face { font-family: 'Pythonicon'; - src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), - url(data:application/font-woff;charset=utf-8;base64,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) format('woff'); + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADDwAAsAAAAAMKQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIGHmNtYXAAAAFoAAAAfAAAAHzPws1/Z2FzcAAAAeQAAAAIAAAACAAAABBnbHlmAAAB7AAAK7AAACuwaXN8NWhlYWQAAC2cAAAANgAAADYmDfxCaGhlYQAALdQAAAAkAAAAJAfDA+tobXR4AAAt+AAAALAAAACwpgv/6WxvY2EAAC6oAAAAWgAAAFrZ8NA+bWF4cAAALwQAAAAgAAAAIAA7AbRuYW1lAAAvJAAAAaoAAAGqCGFOHXBvc3QAADDQAAAAIAAAACAAAwAAAAMD9AGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QADwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAGAAAAAUABAAAwAEAAEAIAA/AFjmBuYM5ifpAP/9//8AAAAAACAAPwBY5gDmCeYO6QD//f//AAH/4//F/60aBhoEGgMXKwADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAP/AAAADwAACAAA3OQEAAAAAAQAA/8AAAAPAAAIAADc5AQAAAAABAAD/wAAAA8AAAgAANzkBAAAAAAMAAP+rBAADwAAfACMAVwAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYDIzUzEw4BBw4BBw4BFSM1NDY3PgE3PgE3PgE1NCYnLgEjIgYHDgEHJz4BNz4BMzIWFx4BFRQGBwMF/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4t6Lm5nAstIhgdBwYGsgUFBg8KCi4kExIHCAcXEBAcCwsOA7UFJCAfYUIzUiAqKwsLA6sUFEQuLjT99zQuLUUUExMURS0uNAIJNC4uRBQU/H+9ASoSLRsTHgsMMhImFyUODhoMCyodEBwNDRQHBwcLCwsmHBcyUB8eHxUWHE0wFCYTAAL//v+tA/4DwAAfACwAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmEwcnByc3JzcXNxcHFwMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4uBJuhoJugoJugoZugoAOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP1fm6Cgm6Cgm6Cgm6CgAAAFAAD/wAQAA8AAKgBOAGMAbQCRAAABNCcuAScmJzgBMSMwBw4BBwYHDgEVFBYXFhceARcWMTMwNDEyNz4BNzY1AyImJy4BJy4BNTQ2Nz4BNz4BMzIWFx4BFx4BFRQGBw4BBw4BATQ2Nw4BIyoBMQcVFzAyMzIWFy4BFycTHgE/AT4BJwEiJicuAScuATU0Njc+ATc+ATMyFhceARceARUUBgcOAQcOAQQACgsjGBgbUyIjfldYaQYICAZpWFd+IyJTGxgYIwsKnwcOBAkSCBISEhIIEgkEDgcHDgQJEggRExMRCBIJBA79lAUGJEImMxE3NxEzJkIkBgV0gFIDFgx2DAkHAXYDBQIDBwMHBwcHAwcDAgUDAwUBBAcDBwcHBwMHBAEFAhNLQkNjHRwBGBhBIyIWIlEuL1EiFSMiQhgYAR0dY0JCTP7KCwQLIBUud0JCdy4UIQoFCwsFCiEULndCQncuFSALBAsBNidLIwUFX1hfBQUjS64Y/r8NCwUwBBcMAUIFAQQNCBEuGhkuEggMBAIEBAIEDAgSLhkaLhEIDQQBBQAEAAD/wAPjA8AAIwAvAFAAXAAAAS4BIyIGBw4BHQEzFSEiBgcOARceATsBNTQ2OwEyNj0BNCYnByImNTQ2MzIWFRQGBS4BKwEVFAYrASIGHQEUFhceATc+AT0BIzUhMjY3NiYnATIWFRQGIyImNTQ2Am0fPx4fORpMK+7+uTRTDhABEQ0+M1JYPe4xRkcw4RMaGhMSGhoCRQ02NFlZPO4wRkcvOXJDLUrtAWQ0MRITARL+jhMaGhMSGhoDnwUEBQQOOzNbHj08RGdHNERsO1lHMuMwRAiaGhMTGhoTExrlM0VpPllIMeMwOw4QAxMNOTNbHkM2OHJI/joaExMaGhMTGgAAAAf//v+tA/4DwAAfADIANgBJAE0AUQBVAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJhMUBw4BBwYjISInLgEnJj0BIRU1ITUhNSE1NDc+ATc2MyEyFx4BFxYdASUhNSEBIRUhESEVIQMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4uiBARNiMkJf4KJSMjNxERA338gwN9/IMREDcjIyYB9iUkIzYREP3CAQX++wEF/vsBBf77AQUDrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT9AiUjJDYREBARNiQjJUJCgP0+PCQjIzcRERERNyMjJDxhPv7CPv8APQAAAAAIAAD/rgP+A8AAHgA5AD4AQwBIAE0AUgBXAAABERQGMTA1NBA1NDUFERQXHgEXFjMhMjc+ATc2NREHAzAGIzAjKgEHIiMiJy4BJyY1NDU2NDU0MSERAzUhFSEFIRUhNREhFSE1NSEVITUVIRUhNSU1IREhA75A/IIUFEQuLTQCBzQuLkQUFEB/JSNERK1RURsiIyM4EhIBAv09/YQCfP2EATv+xQJ7/YUBO/7FATv+xQJ8/vwBBALt/cJHOnV1ATGTlD4B/PwzLi5EFBQUFEQuLjMCRQH9GxgBERE2IyIkJHJy9GBg/JwC9TB+f0JC/oFBQf9CQn5BQQL8/sAAAAAABQAA/8ADtwPAABwAJQA0AEMAUAAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJiMBJz4BNxcOAQcTIiY1NDY/ARceARUUBiMRIgYHJz4BMzIWFwcuASMFLgEnNxYXHgEXFhcHAfxbUVF4IyIiI3hRUVtcUVB4IyMjI3hRUFz+qBYRQi0iKEcd9Sc4HxgqLhUbOCgRIxAnLWg5GzQZVBw7IAFDGFg5VTEqKj8UFAScA2gjI3hRUFxbUVF4IyIiI3hRUVtcUFF4IyP+mhc5YSSADSsd/qw4KBwuDMbKDCwaKDgBuQMDjhwgBwfLCwrZPF0dzRQgIFMyMjdBAAAAAAYAAP+rBAIDwAAPACAALQBeAGwAeQAAATIWFREUBiMhIiY1ETQ2MyUhIgYVERQWMyEyNjURNCYjATUjFSMRMxUzNTMRIxciJjU0NjcnNDY3LgE1NDYzMhYXHgEzMjY3Fw4BIx4BFRQGByIGFRQWHwEeARUUBiM3Jw4BFRQWMzI2NTQmJwMiBhUUFjMyNjU0JiMDVxIZGRL9VxEZGRECqf1XRmVlRgKpR2RkR/5Pd0FBd0FB9DlDIxUdFAwUFzovDBEHCBILDBYGCQMRBwQGNjAQEQUGQCYrQzgYKRccIiEhIRUUGxUbGxUUHRsWAyoZEf1XEhkZEgKpERmBZUb9V0dlZUcCqUZl/VXOzgHRy8v+L5xCMSYxCSAQGwYPLR8wPgMCAwMHBTQDBQgbEC1AAQkJBAkCFg02Ky4+pwwCIh0ZKSYWFSEFARUjGhojIxoaIwAAAAADAAD/rAQBA8AAGQBDAFgAAAEFFRQGIyImPQElIiYxERQWMyEyNjURMAYjESM1NCYnLgErASIGBw4BHQEjIgYdARQWMwUVFBYzMjY9ASUyNj0BNCYjJTQ2Nz4BOwEyFhceARUcARUjPAE1A4P+3T4hIj3+3DNKSjMDBTRKSjTCEhIRMRqDGjASEhLAM0pKMwFTHBQTHAFTNEpKNP3+CAcGFxGDEhYGBwj9AQQyHiEwMCEeMkD+5jRKSjQBGkABqEMbMBEREBARETAbQ0ozgDRKODQUHBwUNDhKNIAzSkMRFQYGCQkGBhURESIQECIRAAAC////rAP/A8AABgAcAAATCQEjESERBQcnIRUUFx4BFxYzITI3PgE3Nj0BIYEBfwF9v/6CAaDg4f7gFBRELi00AgozLi5EFBT+4QIr/oEBfwFA/sD84eGHNC4uRBQUFBRELi40hwAAAAYAAP+tBAADwAAOAC4AOwBIAFUAZwAAAQcnAxc3FwEXBxc/AgEnISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgEiJjU0NjMyFhUUBiM1IiY1NDYzMhYVFAYjNSImNTQ2MzIWFRQGIwEUBw4BBwYHJREhMhceARcWFQLbGVq6KKAz/rQKJAYfJDQBfjn99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi39KhMcHBMUHBwUExwcExQcHBQTHBwTFBwcFANYERE7KCct/eACIC0nKDsREQMVJzn+3Br9IP33MzofCDkMAljXFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFPzSHRMUHR0UEx3+HBQUHBwUFBz+HBQUHBwUFBz+UC0nKDsSEgECA3cRETsoJy0AAAcAAP+uA4gDwAAMABkAJgAzAEAASgBrAAABMjY1NCYjIgYVFBYzFzI2NTQmIyIGFRQWMxciBgceAR0BMzU0JiMlMjY1NCYjIgYVFBYzByIGHQEzNTQ2Ny4BIyUiBh0BITU0JiMBNCcuAScmIyIHDgEHBhUUFhcHNx4BHwE3PgE3Fyc+ATUCASs9PSsrPT0r+yIwMCIiMDAiFh4xEAYGyUUx/fIiMDAiIjAwIhYxRckGBhAxHgETQFkBMllAAXseHmdFRU5PRURnHh5dTBFhEycVMTIVKhNhEUxdAQA9Kys9PSsrPR0wIiIwMCIiMCUZFA0cDm5jLkElMCIiMDAiIjAlQS5jbg4cDRQZIlQ8oqI8VAJKGhcXIwkKCgkjFxcaIjcRrZ8CAwHCwgEDAp+tETciAAAABAAA/6sEAAPAAB8AJgArADEAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmAQcXFSc3FRMjEzcDNzU3JzUXAwX99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi3+A319/v6STatNq+14ePkDqxQURC4uNP33NC4tRRQTExRFLS40Agk0Li5EFBT+bm1scNzdcP5ZAncB/YhjcGdocNgAAAAADgAA/60EAAPAAB8AKwA4AEQAVgBaAF4AYwBnAGsAbwB0AHgAfAAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYHMhYVFAYjIiY1NDYjMhYVFAYjIiY1NDYzIzIWFRQGIyImNTQ2ASEiJy4BJyYnEyERFAcOAQcGAzMVIzczFSMFMxUjNTsBFSM3MxUjNzMVIwU1IxQWNzMVIzczFSMDBf32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLTsUHBwUFBwc6hQcHBQUHBwU/hQdHRQTHR0B7v48LCgoOxISAQIDdxEROygn9JaWzJaW/ZuXl8yXlsyWlsyWlv4yl2Rol5bMlpYDrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBRVHBQTHBwTFBwcFBMcHBMUHBwUExwcExQc/JkRETsoKC0B3/4hLSgoOxERAnmTk5NCk5OTk5OTk9aTPlWTk5OTAAAAAAUAAP/AA7cDwAAcACUANwBGAFMAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYjASc+ATcXDgEHEyImNTQ2NycXPgEzMhYVFAYjESIGByc+ATMyFhcHLgEjBS4BJzcWFx4BFxYXBwH8W1FReCMiIiN4UVFbXFFQeCMjIyN4UVBc/qgWEUItIihHHfUnOAMCcK8GDgcoODgoESMQJy1oORs0GVQcOyABQxhYOVUxKio/FBQEnANoIyN4UVBcW1FReCMiIiN4UVFbXFBReCMj/poXOWEkgA0rHf6sOCgHDwatbgICOCcoOAG5AwOOHCAHB8sLCtk8XR3NFCAgUzIyN0EABQAA/8ADtwPAABwAKwA0AEYAUwAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJiMVMhYXBy4BIyIGByc+ATMBJz4BNxcOAQcFHgEVFAYjIiY1NDYzMhYXNwc3LgEnNxYXHgEXFhcHAfxbUVF4IyIiI3hRUVtcUVB4IyMjI3hRUFwbNBlUHDsgESMQJy1oOf6oFhFCLSIoRx0BUgECOCgnODgnChEJqXDmGFg5VTEqKj8UFAScA2gjI3hRUFxbUVF4IyIiI3hRUVtcUFF4IyM9BwfLCgsDA44cIP7XFzlhJIANKx3fBQsFKDg4KCc4AwRusWs8XR3NFCAgUzIyN0EAAAADAAD/rQQAA8AAHwAtADYAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmBSE1MxUhFSEVIzUhJzcBIRUjNSE1IRcDBf32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLf2MARdHAR/+4Uf+6WdnAnP+60f+5wJ1aAOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFMA+PsI+PmBi/gD//8JhAAAABP/+/6sD/gPAABwAJQBFAHUAABMGBwYUFxYXFhcWMjc2NzY3NjQnJicmJyYiBwYHFzQmIzUyFhUjASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYTBwYiLwEmND8BJwYHBiYnJicmJyY0NzY3Njc2MhcWFxYXHgEHBgcXNzYyHwEWFAe/Hg4PDw4eHSUlTSUlHh0PDw8PHR4lJU0lJR37UDhEXxsBSP33NC4tRRQTExRFLS40Agk0Li5EFBQUFEQuLnpoDCIL/gwMHD4nLi5eLS0jJxQTExQnJzExZjExJyQTFAUNDh4+HAwhDP0MDALsHSUlTSUlHh0PDw8PHR4lJU0lJR0eDg8PDh6oOVAaX0QBZxQURC4uNP33NC4tRRQTExRFLS40Agk0Li5EFBT8uWgMDP0MIQwcPh8NDgUUEyQnMTFmMTEnJxQTExQnIy0sXi4uJz4cCwv+DCEMAAADAAD/wAOwA8AAHAAlAFUAABMGBwYUFxYXFhcWMjc2NzY3NjQnJicmJyYiBwYHFzQmIzUyFhUjAQcGIi8BJjQ/AScGBwYmJyYnJicmNDc2NzY3NjIXFhcWFx4BBwYHFzc2Mh8BFhQHvx4ODw8OHh0lJU0lJR4dDw8PDx0eJSVNJSUd+1A4RF8bAfZoDCIL/gwMHD4nLi5eLS0jJxQTExQnJzExZjExJyQTFAUNDh4+HAwhDP0MDALsHSUlTSUlHh0PDw8PHR4lJU0lJR0eDg8PDh6oOVAaX0T+IGgMDP0MIQwcPh8NDgUUEyQnMTFmMTEnJxQTExQnIy0sXi4uJz4cCwv+DCEMAAAFAAD/rQQAA8AADAAYADgAXAB8AAAlMjY1NCYjIgYVFBYzAyIGFRQWMzI2NTQmJSEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBFSMiJicmNjc+ATMhNSM1NDY3PgE3MhYXHgEdARQGKwEiBhUFDgEjIRUzFRQGBwYmJy4BPQE0NjsBMjY9ATMyFhcWFAJgDxYWDw8WFg++DxUVDxAVFQFT/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4t/eRDKzMLDgENDEQrAQ7EJD4VMBkZNBkoOjkpxDJJAnQPKCv+2sQ9JTheLyY8OijFMUlKKywLD0sWEA8WFg8QFgLIFg8QFRUQDxaaFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP2cWjgsOlU4MTMZSyoxCwMEAQQEBzgnuyk7STEFLTYZSysuCxADDQwwKLsoPEkzVzkqO18AAAAABAAA/6sEAAPAAAsAFwA3AMgAAAEiBhUUFjMyNjU0JiEiBhUUFjMyNjU0JgEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmExQGDwEOAQ8BDgEPARceARcVFBYXLgE9ATQmIyoBMQcVMBQVFBYXLgE1MDQ1NCYjIgYVHAExFAYHPgE9ASMwBh0BFAYHPgEnNSMGJiceARc6ATEzNz4BPwEnLgEvAS4BLwEuASc8ATU0Nj8BJy4BNTQ2Nx4BHwE3PgEzMhYfATc+ATceARUUBg8BFx4BFxwBFQKOGSIiGRgjI/7jGCMjGBgjIwFk/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4tHQYGAwEDAgQZZUgMCA4PAQgGGiESAgEBBQQFHBkJBAUJIBgEBQcTHhkFBgE5USQuKjk4IhcFAQITEgwPUGocBQICAgMIBwEbHgMBBAQFBiJHJQIDHTweHj4fAgMfRSYHBwIBAQIcIQECNiQYGSMjGRgkJBgZIyMZGCQBdRQURC4uNP33NC4tRRQTExRFLS40Agk0Li5EFBT+cBgrEwkDBgQJMjsLAgkQIRKsChEHAhMQjw8GAQWeDAkQBwIXEJYGBgcHBgaeEQ8BBg0JtAYPkg4YAQYQCXcBbyUFUgEGEyEOCgIJOzEJAwYECRQuGgECASxNIAMDEB4PEyUTAhkZAQEGBgYGAQIWGQQVKxYKEwoDAiJVNQECAQACAAD/rQPgA8AADgBJAAABMjY1ETQmIyIGFREUFjMTFRYXHgEXFhUUBw4BBwYjIicuAScmNTQ3PgE3Njc1BgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmJwIAGSQkGRkkJBnAJB0dKgsMHBtfQEBIST9AXxwbCwsqHR0kPzU1TBUVJiWCV1hjY1dXgiYmFhVMNTU/AWgiHQG+HSIiHf5CHSIB25IYHyBLKisuST9AXxscHBtfQD9JLiorSx8gF5IcLCxyQ0RJY1hXgiUmJiWCV1hjSkNDciwtHAAABP/+/6sD/gPAAB8AKwBIAGUAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmASImNTQ2MzIWFRQGJSM+ATU0Jy4BJyYjIgYHNT4BMzIXHgEXFhUUBgczIz4BNTQnLgEnJiMiBgc1PgEzMhceARcWFRQGBwMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4u/fUxRUUxMUVFAQiSDhAPEDUkJCkeNxcaNhxEPDxaGhoJCOeVBwcgIG9LSlUcNhoaNhxzZWWWKywFBQOrFBRELi40/fc0Li1FFBMTFEUtLjQCCTQuLkQUFPy1RTExRUUxMUUPFjUcKSQkNRAPEQ+SCQoaGlo8PEQbNBgZMxtVSktvICAIB5UFBiwrlmVlcxo0GQACAAD/rQQAA8AAHwA0AAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgMjESMRIzUzNTQ2OwEVIyIGFQczBwMF/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4tk2qeT09NX2lCJQ8BeA4DrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT+Av6CAX6ET1BbhBsZQoQAAAAABP/+/8AD/gPAAAsADwATAB8AAAEhIgYdAQUlNTQmIxM1BxclFTcnBScFFBYzITI2NyUHA4D8+zRJAf0CA0o0fv7+/AD5+QH9wP7DSjMDBTNKAf6+wQLvSjQF/f8DNEr+Qfx+fvn4fXv9YJ4zSkkzn2AAAAAC//7/rQP+A8AAHwAnAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgMRIREjCQEjAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi51/oK+AXwBf78DrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT+Av7AAUABf/6BAAAAAv/+/60D/gPAAB8AJwAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBNSERITUJAQMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4u/sn+wAFAAX/+gQOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFPx9vwF+v/6E/oAAAAL//v+tA/4DwAAfACcAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmEyEVCQEVIREDAv33NC4tRRQTExRFLS40Agk0Li5EFBQUFEQuLgb+wP6BAX8BQAOtFBRELi00/fY0LS5EFBQUFEQuLTQCCjQtLkQUFP1GvwF8AYC//oIAAAAC//7/rQP+A8AAHwAnAAABISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgkBMxEhETMBAwL99zQuLUUUExMURS0uNAIJNC4uRBQUFBRELi7+xP6BvwF+vv6EA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/H8BfwFA/sD+gQAABAAA/60EAAPAAB8AOgBVAHAAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmASImNTQ2MzIWFwcuASMiBhUUFjMyNjczDgEjExQWFwcuATU0NjMyFhUUBgcnPgE1NCYjIgYVASImJzMeATMyNjU0JiMiBgcnPgEzMhYVFAYjAwX99jQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi39/UtqaksUJxE3BQsFHisrHhooBW0FaEeACwk3IShqS0pqKCE3CQsrHR4rAQ5HaAVtBSgaHisrHgQKBTYQJhNLampLA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQU/MNqS0tqCQhfAgIrHh4qIhlGYgIIDxkKXxhMLUtqakstSxlfChoOHioqHv34YkYZIioeHioBAV8ICGpLS2oAAAAAAwAA/6sD+wPAABcAGwAiAAAlASYnJgYHBgcBBgcGFhcWMyEyNz4BNSYFIzUzEwcjJzUzFQPf/rAWJydRJCQR/qccAQItLCw+Amw+LCwtAf5muroCInoivq8CsCcSEgITEyL9TTUvL0YVFBQVRjAvSr4BPv39wMAAAwAA/8ADvgPAAAMACQAPAAATJQ0BFSUHBSUnASUHBSUnPgHCAb7+Qv7XmQHCAb6Y/tr+15kBwgG+mAJxu7u+Qn0/vr4//sN9P76+PwAAAAADAAD/rQQAA8AACwArAGEAAAEiBhUUFjMyNjU0JhMhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmAxYHDgEHBiMiJicWNjcuAScWNjcuATceATMuATcWFx4BFxYXJjYzMhYXPgE3DgEHNhY3DgEHArETGhoTEhoaQv32NC0uRBQUFBRELi00Ago0LS5EFBQUFEQuLQkEHR54WVlzRYA3Qn40NlQQEyYRO0oBESYUNxwgHiYlVzAwMxJjTyQ+FxxcGAlNGhlLFhBFGQKMGhMTGhoTExoBIRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT+dldVVYcqKSYjByMpAUAxBAIFDF45CQskgDclHx4tDQ0DTn0dGAY8Dh1fEAMFChkeEQAAAAAE//7/qwP+A8AAHwA5AHUAgQAAASEiBw4BBwYVERQXHgEXFjMhMjc+ATc2NRE0Jy4BJyYBBiYrASImJyY2PQE0Jjc2FjsBMjYXEw4BByUWBgcWBgcGBw4BJyYjIgYnLgEnAz4BNz4BNz4BNz4BNzYmNz4BFx4BFxYGBw4BBw4BBxY2FxYGBxYGBwUiBhUUFjMyNjU0JgMC/fc0Li1FFBMTFEUtLjQCCTQuLkQUFBQURC4u/kgIHxByGysGBAMBGAkbCzAhPw4iAggGAdsaDxkOBAoRICFOKysnEiINCxIJIwQIAhEjFgsaDhIoAgECBAUeEBEZAgIICQsUBgYFATyVGA0ZEiEBH/2pExwcExQcHAOrFBRELi40/fc0Li1FFBMTFEUtLjQCCTQuLkQUFPy6BAEFEg84ErUgRwcCAQIR/pMHCwPSEU0JDCwMFAgJBAIBAgICDAYBeQgPAxoxEwoNCQs5GgsfCgkRBQUwFxYuDxESDQsXEgQEKRZDCAtXDDscFBQcHBQUHAAAAAAE//7/qwP+A8AAHwA5AHUAgQAAFyEyNz4BNzY1ETQnLgEnJiMhIgcOAQcGFREUFx4BFxYBNhY7ATIWFxYGHQEUFgcGJisBIgYnAz4BNwUmNjcmNjc2Nz4BFxYzMjYXHgEXEw4BBw4BBw4BBw4BBwYWBw4BJy4BJyY2Nz4BNz4BNyYGJyY2NyY2NwUyNjU0JiMiBhUUFvkCCTQuLkQUFBQURC4uNP33NC4tRRQTExRFLS4BuAkeEHIbKwYFBAEYCRsLMCE/DSMCCAb+JRoQGA4FCRIgIE8rKicSIwwLEgkkBQgCESMWCxoOESgDAQIEBR4PEhkCAggKChQGBgUCPJYYDRkSIQEfAlcUGxsUExwcVRMURS0uNAIJNC4uRBQUFBRELi40/fc0Li1FFBMDRQQBBBMPOBK0IEcIAgEBEAFtBwsD0RBOCAwtCxQJCAQBAgICAgsH/ocIDwMaMRMJDgkLOBoLIAoJEQUGLxcXLQ8REg0MFhMDAykWQgkLVg11HBQUHBwUFBwAAAUAAP+rBAADwAACAAYAJgAvADgAAAEzJwEzJwcBISIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJgEnIwcjEzMTIwUnIwcjEzMTIwJ2fT7+M0AgIAId/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4t/iAcax5YiEiEVwHbJbYoZLdhsWIBj+v+3ZOTAlQUFEQuLjT99zQuLUUUExMURS0uNAIJNC4uRBQU/QRgYAGn/lkBgYECOf3HAAAAAAMAAP+/A/8DwAAKAN0BsQAAATcjJwcjFwc3FycDLgEnNiYnLgEnDgEXHgEXLgEnPgE3NiYnDgEHBhYXLgEnPgE3PgEnDgEHDgEXLgE1PAE1FjY3PgE3LgEHDgEHPgE3HgE3PgE3LgEHDgEHPgE3HgEzPgE3NCYnJgYHPgE3PgEnLgEHDgEHPgE3PgEnDgEHDgEXDgEHPgE3NiYnDgEHBhYXDgEHLgEnLgEnDgEXHgEXBhQVFBYXLgEnLgEHBhYXFjY3HgEXLgEnJgYHHgEXFjY3IiYnHgEXDgEHDgEHHgE3PgE3HgEXMDIzMjY3NiYnAQ4BBz4BNTwBJz4BNzYmJw4BBw4BBy4BJz4BJy4BJw4BFx4BFy4BJzYmJy4BJwYWFx4BFy4BJyYGBwYWFx4BFy4BBw4BFR4BFzI2Nx4BFy4BJyYGBx4BFxY2Nx4BFy4BJyYGBx4BFx4BNxQWFRQGBzYmJy4BJwYWFx4BFw4BBz4BJy4BJw4BFx4BFw4BBz4BNzYmJw4BBw4BFw4BBw4BFx4BMzoBOQE+ATceARcWNjcuAScuASc+ATcOAQceATc+ATcuAQcOAQc+ATceATc+ATUmBgcCUYGYOi+YgDqBgC9yCRMJBgsLDBwRDg0KBA4JIDkZEhUDBAoNFyQFAwEEERwMFiILCwMGFykOBwcBCwsUJhEQEwQSKBMJDwUGFQ8OJBQVJBEJIBgMGAsSLBkHHxYYNh4bHA0eDhQqFwYIAQILBxIkEQcOBhcUBypFFBEEBxcqEgQIAgkDDR0pBgUPDxAWBwEEAwgcFA4GCgsiEwEICAUNBxQtFgEaGBYuFRAsGg8kFRw1FQ4zHyAyEAEBASFPLBQnEx0rCh5NIB8dAQkTCQEBBgkBAQkHAcgHDQUICAETIwoKBg4UHAcEBAEHFhAPDwUGKR0NAwkDBwQSKhcHBBEURSoHFBcHDQcRJBIHCwECCAYXKhQOHQ4cGh02GBYfBxksEgsYDBggCRElFRMkDg8VBgUPCRMoEgQTERAmFAEMCwEGCA4pFwYDCwsiFgwcEAMBAwUkFw0KBAMWERk5HwgOBAoNDhEcDAsLBgkTCQcJAQEJBgEBCRMJAR0fIUweCisdEycULE8iAQIBEDIgHzQNFTUcFSQPGiwQFS4XFxoXLRQBzl6MjF6kaWmk/nsBAwIhQRoaGgIcPx0MFAgMIxYWNRkcJg0QLR4MGQwUKhcLJBUXKRMCFxgNIBAeQSEFCgUCDA4PJxYJAQ8GEwwfOhoMBwUGGxIQEwQCCwkYKRENDwEOCg8WAwECBAkPBAILBgcIAgQKBwUKBhIgDgYgFxQkDBAlFgkSCRoqDRI4HRsnCxo6HwsXChsjBR9FHBkZAQcNBx47HAgNBxENByQ/ERADDCE8GgwPAwMPFCEsAQEkGwIBHSwNAQsKDzAfFAUUEjwhAgMBCQYHCgEBKQcNCBw7HgcNBwEZGRxFHwUjGwoXCx86GgsnGx04Eg0qGgkSCRYlEAwkFBcgBg0hEgYKBQcKBAIIBwYLAgQPCQQCAQMWDwoOAQ8NESkYCQsCBBMQEhsGBQcMGjoeCxMGDwEJFicPDQ0CBQoEIkEeECANGBcCEykXFSQLFyoUDBkMHi0QDSYcGTUWFiMMCBQMHT8cAhoaGkEhAgMBAQoHBgkBAwIhPBIUBRQfMA8KCwENLB0BAQEbJAEBLCEUDwMDDwwaPCEMAxARPyQHDREABQAA/6sD3gPAAAQADQASABYAGgAAEzMRIxETITI2NyEeATMTMxEjERczESMTMxEjfIWFfwIJRnQg/EIhdEZWhYXVhITVhIQB6f5/AYH9wkc5OUcDO/2BAn9+/gADQfy/AAAAAAgAAP+tBAADwAAfACQAKQAuADIAOwBAAEQAAAEhIgcOAQcGFREUFx4BFxYzITI3PgE3NjURNCcuAScmDQEHJTcHBQclNwcFByU3ByEVIQUhETMRIREzEQsBNxMHNwM3EwMF/fY0LS5EFBQUFEQuLTQCCjQtLkQUFBQURC4t/j8BDSX+7ylRATQT/soVIwE/Bv7ABwcBQf6/Ab79xUIBuUAus0GsOkEYTQ8DrRQURC4tNP32NC0uRBQUFBRELi00Ago0LS5EFBT9rzqoQZldQlVKkyREG02CTYUBX/7dASP+oQHXAQsq/vEmKQFABf6/AAMAAP+tBAADwAAgAIEAqgAAEyIHDgEHBhURFBceARcWMyEyNz4BNzY1ETQnLgEnJiMhFzMyFhceARcxFgYVFAYVDgEHMCIjDgEHKgEjIiYnMCIxOAEjOAEVOAExHgEXHgEzMjY3MDIxMBYxOAExMBQxFTgBFTgBMQ4BBw4BBwYmJy4BJy4BJy4BJyY2Nz4BNz4BMwciBgcOAR0BMzU0NjMyFh0BMzU0NjMyFh0BMzU0JicuASMiBg8BJy4B+zQtLkQUFBQURC4tNAIKNC0uRBQUFBRELi00/fb8AWFcC0JiCQUEAQZhPAIBJk8nCRIJJkwlAQEBBQQFMEMnTSUBAQ0fDgYNBzt4OTVfDgcKAwQDAQIDBw5oQAtAYWkbLREQEVQbGx4eUx4eGxxTEBERLRsgMBEUFRAxA60UFEQuLTT99jQtLkQUFBQURC4tNAIKNC0uRBQUfAkBClo/L3kMBC8DWlEMCAUBCAkBDBgLDS4JCQEBOwEJCwUCAwINBhQSVTcdPB4uWy4fRB9AUwoBCXwTExMzINDKICAmJm5uJiYgIMrQIDMTExMZGCMjGBkAAAEAAAABAABAyd+3Xw889QALBAAAAAAA4Xdb7QAAAADhd1vt//7/qwQCA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAD//v/+BAIAAQAAAAAAAAAAAAAAAAAAACwEAAAAAAAAAAAAAAACAAAABAAAAAQA//4EAAAABAAAAAQA//4EAAAABAAAAAQAAAAEAAAABAD//wQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAP/+BAAAAAQAAAAEAAAABAAAAAQA//4EAAAABAD//gQA//4EAP/+BAD//gQA//4EAAAABAAAAAQAAAAEAAAABAD//gQA//4EAAAABAAAAAQAAAAEAAAABAAAAAAAAAAACgAUAB4AogDsAb4CQALGA0YDxgRwBOgFHAW4BlIGpgdcB94IYAi2CWgJ7AqcC64MHAywDQANOg1+DcIOBg5KDuwPKA9QD+YQrBFwEdAUVhSIFQAV2AAAAAEAAAAsAbIADgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAKAAAAAQAAAAAAAgAHAHsAAQAAAAAAAwAKAD8AAQAAAAAABAAKAJAAAQAAAAAABQALAB4AAQAAAAAABgAKAF0AAQAAAAAACgAaAK4AAwABBAkAAQAUAAoAAwABBAkAAgAOAIIAAwABBAkAAwAUAEkAAwABBAkABAAUAJoAAwABBAkABQAWACkAAwABBAkABgAUAGcAAwABBAkACgA0AMhQeXRob25pY29uAFAAeQB0AGgAbwBuAGkAYwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBQeXRob25pY29uAFAAeQB0AGgAbwBuAGkAYwBvAG5QeXRob25pY29uAFAAeQB0AGgAbwBuAGkAYwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJQeXRob25pY29uAFAAeQB0AGgAbwBuAGkAYwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff'), + url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'); font-weight: normal; font-style: normal; } - -.icon-megaphone:before { - content: "\e600"; + +.icon-bullhorn:before { + content: "\e600"; } .icon-python-alt:before { - content: "\e601"; + content: "\e601"; } .icon-pypi:before { - content: "\e602"; + content: "\e602"; } .icon-news:before { - content: "\e603"; + content: "\e603"; } .icon-moderate:before { - content: "\e604"; + content: "\e604"; } .icon-mercurial:before { - content: "\e605"; + content: "\e605"; } .icon-jobs:before { - content: "\e606"; + content: "\e606"; } .icon-help:before { - content: "\3f"; + content: "\3f"; } .icon-download:before { - content: "\e609"; + content: "\e609"; } .icon-documentation:before { - content: "\e60a"; + content: "\e60a"; } .icon-community:before { - content: "\e60b"; + content: "\e60b"; } .icon-code:before { - content: "\e60c"; + content: "\e60c"; } .icon-close:before { - content: "\58"; + content: "\58"; } .icon-calendar:before { - content: "\e60e"; + content: "\e60e"; } .icon-beginner:before { - content: "\e60f"; + content: "\e60f"; } .icon-advanced:before { - content: "\e610"; + content: "\e610"; } .icon-sitemap:before { - content: "\e611"; + content: "\e611"; } .icon-search-alt:before { - content: "\e612"; + content: "\e612"; } .icon-search:before { - content: "\e613"; + content: "\e613"; } .icon-python:before { - content: "\e614"; + content: "\e614"; } .icon-github:before { - content: "\e615"; + content: "\e615"; } .icon-get-started:before { - content: "\e616"; + content: "\e616"; } .icon-feed:before { - content: "\e617"; + content: "\e617"; } .icon-facebook:before { - content: "\e618"; + content: "\e618"; } .icon-email:before { - content: "\e619"; + content: "\e619"; } .icon-arrow-up:before { - content: "\e61a"; + content: "\e61a"; } .icon-arrow-right:before { - content: "\e61b"; + content: "\e61b"; } .icon-arrow-left:before { - content: "\e61c"; + content: "\e61c"; } .icon-arrow-down:before { - content: "\e61d"; + content: "\e61d"; } .icon-freenode:before { - content: "\e61e"; + content: "\e61e"; } .icon-alert:before { - content: "\e61f"; + content: "\e61f"; } .icon-versions:before { - content: "\e620"; + content: "\e620"; } .icon-twitter:before { - content: "\e621"; + content: "\e621"; } .icon-thumbs-up:before { - content: "\e622"; + content: "\e622"; } .icon-thumbs-down:before { - content: "\e623"; + content: "\e623"; } .icon-text-resize:before { - content: "\e624"; + content: "\e624"; } .icon-success-stories:before { - content: "\e625"; + content: "\e625"; } .icon-statistics:before { - content: "\e626"; + content: "\e626"; } .icon-stack-overflow:before { - content: "\e627"; + content: "\e627"; +} +.icon-mastodon:before { + content: "\e900"; } @@ -143,7 +146,7 @@ */ /*modernizr*/ .no-fontface, .no-svg, .no-generatedcontent { - .icon-megaphone, .icon-python-alt, .icon-pypi, .icon-news, .icon-moderate, .icon-mercurial, .icon-jobs, .icon-help, .icon-download, .icon-documentation, .icon-community, .icon-code, .icon-close, .icon-calendar, .icon-beginner, .icon-advanced, .icon-sitemap, .icon-search, .icon-search-alt, .icon-python, .icon-github, .icon-get-started, .icon-feed, .icon-facebook, .icon-email, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-freenode, .icon-alert, .icon-versions, .icon-twitter, .icon-thumbs-up, .icon-thumbs-down, .icon-text-resize, .icon-success-stories, .icon-statistics, .icon-stack-overflow { + .icon-megaphone, .icon-python-alt, .icon-pypi, .icon-news, .icon-moderate, .icon-mercurial, .icon-jobs, .icon-help, .icon-download, .icon-documentation, .icon-community, .icon-code, .icon-close, .icon-calendar, .icon-beginner, .icon-advanced, .icon-sitemap, .icon-search, .icon-search-alt, .icon-python, .icon-github, .icon-get-started, .icon-feed, .icon-facebook, .icon-email, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-freenode, .icon-alert, .icon-versions, .icon-twitter, .icon-thumbs-up, .icon-thumbs-down, .icon-text-resize, .icon-success-stories, .icon-statistics, .icon-stack-overflow, .icon-mastodon { &:before { display: none; @@ -159,7 +162,7 @@ /* Show in IE8: supports FontFace (eot) but not SVG. */ .ie8 { - .icon-megaphone, .icon-python-alt, .icon-pypi, .icon-news, .icon-moderate, .icon-mercurial, .icon-jobs, .icon-help, .icon-download, .icon-documentation, .icon-community, .icon-code, .icon-close, .icon-calendar, .icon-beginner, .icon-advanced, .icon-sitemap, .icon-search, .icon-search-alt, .icon-python, .icon-github, .icon-get-started, .icon-feed, .icon-facebook, .icon-email, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-freenode, .icon-alert, .icon-versions, .icon-twitter, .icon-thumbs-up, .icon-thumbs-down, .icon-text-resize, .icon-success-stories, .icon-statistics, .icon-stack-overflow { + .icon-megaphone, .icon-python-alt, .icon-pypi, .icon-news, .icon-moderate, .icon-mercurial, .icon-jobs, .icon-help, .icon-download, .icon-documentation, .icon-community, .icon-code, .icon-close, .icon-calendar, .icon-beginner, .icon-advanced, .icon-sitemap, .icon-search, .icon-search-alt, .icon-python, .icon-github, .icon-get-started, .icon-feed, .icon-facebook, .icon-email, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-freenode, .icon-alert, .icon-versions, .icon-twitter, .icon-thumbs-up, .icon-thumbs-down, .icon-text-resize, .icon-success-stories, .icon-statistics, .icon-stack-overflow, .icon-mastodon { &:before { display: inline; diff --git a/static/sass/style.css b/static/sass/style.css index 472737c2a..a58863817 100644 --- a/static/sass/style.css +++ b/static/sass/style.css @@ -2771,10 +2771,6 @@ p.quote-by-organization { /* {% endblock left_sidebar %} diff --git a/templates/python/documentation.html b/templates/python/documentation.html index c5779323c..7db3662d2 100644 --- a/templates/python/documentation.html +++ b/templates/python/documentation.html @@ -81,7 +81,7 @@

P
  • FAQ: Sunsetting Python 2
  • Final Python 2.7 Release Schedule
  • -
  • Python 3 Statement
  • +
  • Python 3 Statement
  • Porting Python 2 Code to Python 3
      diff --git a/templates/python/inner.html b/templates/python/inner.html index 06b1ad99e..542e6cb64 100644 --- a/templates/python/inner.html +++ b/templates/python/inner.html @@ -623,40 +623,9 @@

      Form Example

      {% block left_sidebar %} {% endblock left_sidebar %} diff --git a/templates/users/membership_form.html b/templates/users/membership_form.html index cef557897..ecc032467 100644 --- a/templates/users/membership_form.html +++ b/templates/users/membership_form.html @@ -19,6 +19,18 @@

      Register to become a PSF Basic Member

      {% endif %}
      +

      + Basic membership is not a voting membership class.
      For more information see Article IV + of the PSF Bylaws. +

      +

      + All other membership classes are recorded on psfmember.org.
      + Please log in there and review your user profile + to see your membership status.
      + If you believe you are a member but do not have an account on psfmember.org, please + create an account and verify your + email, then email psf-donations@python.org to get your account linked to your membership. +

      For more information and to sign up for other kinds of PSF membership, visit our Membership Page.

      diff --git a/templates/users/sponsor_info_update.html b/templates/users/sponsor_info_update.html index 3ae2e720c..1312fb782 100644 --- a/templates/users/sponsor_info_update.html +++ b/templates/users/sponsor_info_update.html @@ -17,6 +17,7 @@ {% block user_content %}

      Edit {{ sponsor }}

      +

      Basics

      {% if form.errors %} The form has one or more errors @@ -36,7 +37,31 @@

      Sponsor Information

      {% endif %} {% render_field form.name %}

      +
      +
      +

      + + {% render_field form.country_of_incorporation %} + {% if form.country_of_incorporation.help_text %} +
      + {{ form.country_of_incorporation.help_text }} + {% endif %} +

      +
      +
      +

      + + {% render_field form.state %} + {% if form.state_of_incorporation.help_text %} +
      + {{ form.state_of_incorporation.help_text }} + {% endif %} +

      +
      +

      @@ -68,17 +93,42 @@

      Sponsor Information

      {% endif %}

      - +
      +

      + + {% render_field form.linked_in_page_url%} + {% if form.linked_in_page_url.help_text %} +
      + {{ form.linked_in_page_url.help_text }} + {% endif %} +

      +
      + +
      +

      {% render_field form.country %} {% if form.country.help_text %} -
      {{ form.country.help_text }} {% endif %}

      +
      +
      +

      + + {% render_field form.country_of_incorporation %} + {% if form.country_of_incorporation.help_text %} +
      + {{ form.country_of_incorporation.help_text }} + {% endif %} +

      +
      +
      @@ -131,8 +181,19 @@

      Sponsor Information

      {{ form.state.help_text }} {% endif %}

      +
      +
      +

      + + {% render_field form.state %} + {% if form.state_of_incorporation.help_text %} +
      + {{ form.state_of_incorporation.help_text }} + {% endif %} +

      +
      -
      diff --git a/templates/users/sponsor_select.html b/templates/users/sponsor_select.html new file mode 100644 index 000000000..7c8185b8b --- /dev/null +++ b/templates/users/sponsor_select.html @@ -0,0 +1,30 @@ +{% extends "users/base.html" %} +{% load humanize pipeline %} + +{% block head %} + {% stylesheet 'font-awesome' %} +{% endblock %} + +{% block page_title %} + Select Sponsor | {{ SITE_INFO.site_name }} +{% endblock %} + +{% block body_attributes %}class="psf signup default-page"{% endblock %} + + +{% block main-nav_attributes %}psf-navigation{% endblock %} + +{% block user_content %} +

      Select Sponsor to edit

      + +
      +
        + {% for sponsor in sponsors %} +
      • {{ sponsor }}
      • + {% endfor %} +
      +{% endblock %} + +{% block javascript %} + {{ block.super }} +{% endblock %} diff --git a/templates/users/user_detail.html b/templates/users/user_detail.html index f584af139..ce2f5ee90 100644 --- a/templates/users/user_detail.html +++ b/templates/users/user_detail.html @@ -21,7 +21,23 @@

      Name: {% firstof object.get_full_name object %}

      {% comment %}