614 Commits
Author SHA1 Message Date
marc a1eb7e14d5 3.7
Pylint / build (push) Canceled after 0s
2022-05-30 10:34:59 +02:00
marc cdd6cf3b01 start src entrypoint 2022-05-30 02:56:47 +02:00
marc eca04cfd5f update 2022-05-30 02:55:29 +02:00
marc 1cfd54557f clean 2022-05-30 02:50:21 +02:00
marc 5ec0571552 no avatar url 2022-05-30 02:47:22 +02:00
marc 1b2fee869d pyyaml 2022-05-30 02:46:47 +02:00
marc 7154c5cf0b djangorestframework 2022-05-30 02:46:05 +02:00
marc c3346147b8 rich 2022-05-30 02:45:40 +02:00
marc 6be82d3dd5 pillow 2022-05-30 02:44:56 +02:00
marc 0cc1bfaf43 remove django avatar since not kept up to date 2022-05-30 02:44:31 +02:00
marc 2b25ee52f4 remove django-cors-middleware since not up to date 2022-05-30 02:41:51 +02:00
marc 29dc4867ca django-jsonfield-backport 2022-05-30 02:34:42 +02:00
marc 99d9d06031 django-shortuuidfield 2022-05-30 02:34:16 +02:00
marc 75a480a45d shortuuid 2022-05-30 02:33:39 +02:00
marc 3bafa8fefc django-robots 2022-05-30 02:33:17 +02:00
marc 0df9968808 django-avatar 2022-05-30 02:32:38 +02:00
marc 9726ad5bb0 django-q 2022-05-30 02:32:12 +02:00
marc 8645d24040 django-sql-explorer 2022-05-30 02:31:55 +02:00
marc 6fc875415e django-ftpserver 2022-05-30 02:30:37 +02:00
marc b497b18061 django-mdeditor 2022-05-30 02:30:08 +02:00
marc d2f576f580 django-markdown-view 2022-05-30 02:29:23 +02:00
marc 8544c7133b django compressor 2022-05-30 02:28:21 +02:00
marc 63fe396e04 django cors 2022-05-30 02:27:49 +02:00
marc 52e1ae87f3 django allauth 2022-05-30 02:27:17 +02:00
marc e13499b4b8 django extensions 2022-05-30 02:26:48 +02:00
marc 6896adf094 django crispy forms 2022-05-30 02:26:26 +02:00
marc 04673d4668 django storages 2022-05-30 02:25:50 +02:00
marc b9be118a96 channels 2022-05-30 02:25:12 +02:00
marc a2f34cdbd2 django heroku just in case 2022-05-30 02:24:21 +02:00
marc e7faf43580 dev dependencies for myself 2022-05-30 02:19:44 +02:00
marc cbd4e82f57 python-dotenv 2022-05-30 02:18:53 +02:00
marc f70c43eb99 django 2022-05-30 02:15:59 +02:00
marc a475ceb36f poetry first 2022-05-30 02:12:15 +02:00
marc fae9d8c7f3 move 2022-05-30 02:11:28 +02:00
marc a702e9f516 docker-compose rename 2022-05-29 03:02:02 +02:00
marc 9bbde03fbd pipfile.lock 2022-05-29 03:00:17 +02:00
marc c0dc586058 update 2022-05-24 15:35:07 +02:00
marc ddd7c04e12 update 2022-05-24 15:28:34 +02:00
marc f220c5b596 pipfile 2022-05-24 15:15:25 +02:00
marc 1eafde9735 update 2022-04-23 01:22:01 +02:00
marc 96433c7f41 update 2022-04-23 01:10:25 +02:00
marc 6ddcf0380b update 2022-03-31 18:34:08 +02:00
marc ff8f5b64db fix 2022-03-31 18:15:12 +02:00
marc 00e5f58014 update again 2022-03-30 21:42:11 +02:00
marc 2a5635039b big update 2022-03-30 21:37:40 +02:00
marc 282bb58bc3 funding 2022-02-24 00:02:02 +01:00
marc 1f25080a36 walrus or not walrus 2022-02-07 14:35:40 +01:00
marc 33c828fd99 update 2022-01-30 23:35:07 +01:00
marc 6ae02e1bcb fix cd 2022-01-30 23:27:21 +01:00
marc e8a3f845f1 cleaner readme 2022-01-30 23:26:53 +01:00
marc 75629e9fe5 updated readme with actual info 2022-01-30 23:23:11 +01:00
marc 68d3df2af7 deploy 2022-01-30 23:15:06 +01:00
marc 14f804c0ad registering models in admin panel 2022-01-30 23:12:23 +01:00
marc 0709a971dd upodate 2022-01-30 21:52:40 +01:00
marc 1b9c936e00 store
Pylint / build (push) Canceled after 0s
2022-01-30 21:20:37 +01:00
marc d1ae6957a2 first store migration 2022-01-30 16:49:10 +01:00
marc ce9ada5b2b positive integer field 2022-01-30 16:48:59 +01:00
marc dcc7837940 store 2022-01-30 16:44:15 +01:00
marc 79eef3adad wtf 2022-01-30 16:20:39 +01:00
marc 403067a728 pipfile.lock 2022-01-30 16:18:45 +01:00
marc b6ec49e108 gpl3 2022-01-22 16:09:08 +01:00
marc 83e1b50151 pipfile.lock 2022-01-18 10:59:54 +01:00
marc a6f119b6c0 bye run
Pylint / build (push) Canceled after 0s
2022-01-17 20:45:19 +01:00
marc 735450f4b0 runtest 2022-01-17 20:45:09 +01:00
marc 03a587bec9 kill 2022-01-17 20:42:58 +01:00
marc 41f53d1ae2 nosetup 2022-01-17 20:35:35 +01:00
marc 49d360a942 nosetup 2022-01-17 20:28:45 +01:00
marc 1983e73e14 nosetup 2022-01-17 20:27:37 +01:00
marc d82992c8a1 start pipenv 2022-01-17 20:23:22 +01:00
marc 151a44f366 production false 2022-01-17 20:12:59 +01:00
marc f4c572a8a2 generate .env if it does not exist 2022-01-17 20:12:03 +01:00
marc 351f04c859 pipfile.lock 2022-01-17 19:52:34 +01:00
marc db9ca12b4c headless 2022-01-17 19:46:40 +01:00
marc b3ddaae5f2 phony + make list 2022-01-17 19:36:47 +01:00
marc 2c69c495fc pipenv update 2022-01-17 19:17:36 +01:00
marc defde3ff28 pipenv update 2022-01-17 19:15:10 +01:00
marc 512c19746d commenting entrypoint 2022-01-17 19:15:05 +01:00
marc 2d9af7b785 bye useless log 2022-01-17 19:14:39 +01:00
marc 4c669d624d selenium 2022-01-17 19:14:07 +01:00
marc 32bee56dad Merge branch 'master' into test 2022-01-17 18:57:57 +01:00
marc 80391aa894 pipfile.lock 2022-01-17 18:57:51 +01:00
marc 345312a259 testing homepage 2022-01-17 18:57:27 +01:00
marc 889914403c init setup start entrypoint.sh 2022-01-15 20:19:04 +01:00
marc 12297520da pipeline with make to avoid redundancy 2022-01-15 20:01:30 +01:00
marc 2b57f624c5 bye healhthcheck 2022-01-15 19:52:22 +01:00
marc f8380267df updated cv 2022-01-15 19:18:32 +01:00
marc 451ccd8a7d start period for healthcheck + more silent 2022-01-15 19:13:27 +01:00
marc ff569bee10 bye build and deploy 2022-01-15 19:10:57 +01:00
marc bded141624 bye down 2022-01-15 19:10:28 +01:00
marc 552b5d3afe bye up 2022-01-15 19:09:55 +01:00
marc 2989138fac pipenv update 2022-01-15 19:08:24 +01:00
marc fca1b6dfab no ignore files neither 2022-01-11 13:18:48 +01:00
marc b06cf4b749 no .travis.yml 2022-01-11 13:18:09 +01:00
marc d34ca52c4d no pipfile in docker image 2022-01-11 13:16:44 +01:00
marc 09c83fa203 dockerignore 2022-01-11 12:55:08 +01:00
marc 41ebca2bb9 healthcheck secret key docker-compose 2022-01-11 12:52:18 +01:00
marc bce91cc538 updated dependencies 2022-01-11 03:56:05 +01:00
marc 41f5518faa collectstatict 2022-01-11 03:52:42 +01:00
marc a3baef397b added healthcheck 2021-12-30 13:13:51 +01:00
marc df3c691847 host 2021-12-30 01:42:20 +01:00
marc 5a0a585389 update requirements.txt 2021-12-25 01:16:26 +01:00
marc 82232f74ec labels 2021-12-25 01:14:20 +01:00
marc 52856ca529 using established conventions for makefile 2021-12-22 21:18:56 +01:00
marc 781c8db3d3 updatepip
Pylint / build (push) Canceled after 0s
2021-12-22 03:34:57 +01:00
marc f0a115b1c5 update 2021-12-13 22:01:12 +01:00
marc fd225cd372 Makefile with command dependencies 2021-12-13 22:01:08 +01:00
marc 3a94f97e92 pipfile.lock 2021-12-11 04:15:53 +01:00
marc fadbe2feb9 pipfile.lock 2021-12-10 21:51:37 +01:00
marc 4a6a2cc2bd 127.0.0.1 2021-12-10 02:22:31 +01:00
marc 24ca19756f makefile 2021-12-10 02:16:30 +01:00
marc 3c9a0b8d57 renamed 2021-12-10 02:15:56 +01:00
marc 7b5ed373e2 pipfile.lock 2021-11-29 09:53:26 +01:00
marc b2493a8b1f deploy config 2021-11-29 09:43:43 +01:00
marc 8fafb18fcc pipfile.lock 2021-11-29 02:38:40 +01:00
marc c620ee05f2 new entrypoint 2021-11-29 00:51:01 +01:00
marc f1bc97fb5d stream 2021-11-29 00:03:59 +01:00
marc f02fde398a fix case by case 2021-11-28 23:33:40 +01:00
marc b620f75ccc pipfile.lock 2021-11-28 23:22:59 +01:00
marc a97a622595 update 2021-11-27 13:21:37 +01:00
marc 937c087b1e dev yml that works 2021-11-27 00:28:19 +01:00
marc c92fc99dee new pipfile.lock 2021-11-22 09:33:12 +01:00
marc 10769c634f collectstatic for no reason 2021-11-19 09:57:34 +01:00
marc 8a1579b966 pipfile.lock 2021-11-19 09:40:03 +01:00
marc 9cd2391a21 bye pipfile.lock 2021-11-19 08:31:49 +01:00
marc db9dd94055 new makefile 2021-11-19 08:06:01 +01:00
marc 6e1f752655 bye 500 2021-11-18 19:29:03 +01:00
marc 5ce132a6f2 pipfile.lokc 2021-11-15 14:20:37 +01:00
marc 06755ce98f ppfile.lock 2021-11-15 02:11:41 +01:00
marc cc8ecb3cb2 python 3.7.12 2021-11-15 01:57:29 +01:00
marc 68a7fbde07 better entrypoint.sh 2021-11-15 01:31:32 +01:00
marc 1d89673a92 Update README.md 2021-11-14 21:32:47 +01:00
marc dc4ffff6cb secret key env 2021-11-14 19:59:32 +01:00
marc d9b704b522 pipenv run stuff 2021-11-14 19:51:56 +01:00
marc 311fa257e8 npm and makemigrations 2021-11-14 19:04:53 +01:00
marc bacb20b160 collect static not input pipeline 2021-11-14 18:59:10 +01:00
marc 3ae4d01239 pipfile.lock 2021-11-14 17:31:34 +01:00
marc 54e916c665 Create codeql-analysis.yml 2021-11-14 16:16:53 +01:00
marc c4ff09e93f pipfile.lock 2021-11-14 15:17:47 +01:00
marc e6446c7638 ok 2021-11-14 02:49:19 +01:00
marc 1334e12f74 if this does not work i don t know what will 2021-11-14 02:33:10 +01:00
marc f14b1879cf python3.7 2021-11-13 23:54:51 +01:00
marc 4608d5d304 trying pipfile 2021-11-13 23:33:46 +01:00
marc 752264aac2 trying 3.7.12 2021-11-13 18:40:18 +01:00
marc 72b2039221 3.7 2021-11-13 18:01:42 +01:00
marc b5fe6f2607 github action python3.7 installation 2021-11-13 18:00:04 +01:00
marc f7f978e1d0 ppa 2021-11-13 17:56:31 +01:00
marc c48bef25bd workflow 2021-11-13 17:52:43 +01:00
marc 0eed827580 more restrictive dockerignore 2021-10-25 17:09:50 -04:00
marc c15f6feb47 good docker-compose.dev.yml with default arbitrary logins 2021-10-25 16:46:36 -04:00
marc 04350a89ee entrypoint that works 2021-10-25 16:41:53 -04:00
marc a92b86ac05 settings.py 2021-10-25 16:19:20 -04:00
marc 4ab52902f0 good db settings.py 2021-10-25 15:36:19 -04:00
marc b4a94f2890 database 2021-10-25 15:30:34 -04:00
marc 507fe0c52c responsive settings 2021-10-25 15:29:23 -04:00
marc 7848103e38 healthcheck network env var 2021-10-25 15:12:55 -04:00
marc 8a12afb8ca pipfile 2021-10-25 14:17:22 -04:00
marc bb91932435 updating deployment files 2021-10-25 13:46:57 -04:00
marc ca02f288aa docker-compose.dev.yml 2021-10-25 13:25:09 -04:00
marc 351fd1664b docker-compose.dev.yml 2021-10-25 19:03:35 +02:00
marc 22db838497 entrypoint.sh without makemigrations and with createsuperuser 2021-10-25 18:23:04 +02:00
marc 55980d9286 brew start and stop 2021-10-25 18:12:26 +02:00
marc 2c95c2d582 migrating ip address field 2021-10-25 18:10:31 +02:00
marc 6333cea237 make brew 2021-10-25 18:07:58 +02:00
marc ddd51b468e pipfile.lock 2021-10-25 18:05:42 +02:00
marc c442790e2c pipfile.lock 2021-09-29 17:05:44 +02:00
marc a4ab372b4b pipfile.lock update 2021-09-29 14:50:35 +02:00
marc 891ad298f3 updated pipfile.lock 2021-08-22 18:20:30 +02:00
marc e19d37fbc6 adding notifications support 2021-08-18 17:59:41 +02:00
marc b2d785c4be pipfile.lock 2021-08-18 17:50:25 +02:00
marc 281c1bf8f1 pipfile.lock 2021-08-16 22:40:58 +02:00
marc f863de91e3 not depending on github
Pylint / build (push) Canceled after 0s
2021-07-16 01:17:24 +00:00
marc 0e68386226 fixed https when not needed 2021-07-16 01:47:28 +02:00
marc 8e13e131e5 updated packge-lock.json 2021-07-14 12:00:18 +02:00
marc 99f84b8187 updated pipfile.lock 2021-07-14 11:54:12 +02:00
marc ff3292c2bb api port 2021-07-10 08:39:31 +00:00
marc 20b287826b no more commands.yml 2021-07-09 11:52:45 +00:00
marc 666f97fabc business 2021-07-07 16:02:31 +00:00
marc acbe2d0a84 api port endpoint 2021-07-07 17:56:18 +02:00
marc 0b07285cf7 attempt to run shell scripts 2021-06-26 15:30:08 +02:00
marc 7170b805c7 port 2021-06-21 11:42:34 +02:00
marc 423aaf84f4 lang 2021-06-19 21:45:16 +02:00
marc a6fc46290e 1 character that makes all the difference 2021-06-01 16:25:26 +00:00
marc d68080e0ab double slash for shortener 2021-06-01 16:17:43 +00:00
marc 923aae1c9a makefile 2021-06-01 16:14:54 +00:00
marc eb7e45d4db new makefile 2021-06-01 14:18:32 +02:00
marc 71a69d4317 little protection with authentication 2021-05-21 11:12:49 +00:00
marc 6b378de86b delete url migrations files 2021-05-21 01:25:16 +00:00
marc 23017bd737 light datetimes 2021-05-21 01:22:03 +00:00
marc 8cbf1146e2 requests added 2021-05-21 01:12:22 +00:00
marc 2760f0316f makefile, docker-compose.yml, run.sh 2021-05-21 00:17:50 +00:00
marc 837093d0a5 request model 2021-05-21 00:09:38 +00:00
marc 11b96b3996 request model\ 2021-05-21 00:09:28 +00:00
marc a4e51938cd postgres 2021-05-21 00:08:32 +00:00
marc d125d6f782 default url too long 2021-05-17 04:33:46 +02:00
marc 7e6680649b build and push in makefile 2021-05-17 02:05:57 +00:00
marc 589348b25e urls done 2021-05-17 03:57:31 +02:00
marc f69227b855 good dependencie usage 2021-05-17 02:17:49 +02:00
marc 4c4ae37833 url 2021-05-17 01:42:43 +02:00
marc a018141f94 lock cmd 2021-05-09 14:06:31 +02:00
marc 88be83d86e empty test key 2021-05-09 12:02:28 +00:00
marc 5b2595bf8f dont need 2 requirements files 2021-05-09 11:26:34 +00:00
marc 4078bbf4bb makefile and travis 2021-05-09 11:04:54 +00:00
marc 6bafc9c3dd entrypoint 2021-05-09 00:17:15 +00:00
marc b752bf4b17 new requirements 2021-05-09 00:17:00 +00:00
marc 141715659f healthcheck? 2021-05-05 23:15:31 +00:00
marc 9094e683a7 good docker-compose.yml 2021-05-05 21:50:41 +00:00
marc 5d6b778e57 not need for staticfiles in fact 2021-05-05 01:12:48 +02:00
marc 44a6ffa859 pipenv in run.sh 2021-05-05 00:59:55 +02:00
marc 0c20d4315a shell scripts from github 2021-04-16 02:43:53 +02:00
marc e7b771344b readme up to date 2021-04-05 15:27:07 +02:00
marc 5436e48333 reseting all file migrations 2021-04-04 21:41:16 +02:00
marc a632eb6272 article as pdf 2021-04-04 20:01:18 +02:00
marc c84478cc01 view count first 2021-04-04 20:01:18 +02:00
marc 5457abcf62 robots in requirements 2021-04-04 16:10:00 +00:00
marc 956e76a5dd default layout 2021-04-04 17:44:00 +02:00
marc 4adf2e8cc2 gotta go fast 2021-04-04 17:14:22 +02:00
marc eb7da12d40 Create docker-publish.yml 2021-04-04 00:47:27 +02:00
marc 312158230c Create python-app.yml 2021-04-04 00:46:19 +02:00
marc 0826c4b66a Update pylint.yml 2021-04-04 00:45:03 +02:00
marc fad36a29e6 Create pylint.yml 2021-04-04 00:41:59 +02:00
marc 87d153a3b1 no pipfile3 2021-04-03 19:41:04 +00:00
marc 4ef4efe194 instant home page load 2021-04-03 21:39:09 +02:00
marc a5f829ff43 ignoring node modules content 2021-04-03 18:57:11 +02:00
marc d221310b6c added black 2021-04-03 18:56:36 +02:00
marc 63a351f793 stop tracking files it should track 2021-04-02 15:38:17 +02:00
marc 606a4fb2df not tracking node_modules anymore 2021-04-02 15:32:49 +02:00
marc fb5c6409f4 better gitignore and updated pipfile.lock 2021-04-02 15:25:22 +02:00
marc 1d01c42312 Create docker-image.yml 2021-04-02 14:30:32 +02:00
marc 0c527908e4 updated dependencies graph 2021-04-01 12:49:37 +00:00
marc cabd8072c0 not ignoring pipfiles 2021-04-01 12:05:17 +00:00
marc f4d84d071a better requirements management with pipfile 2021-04-01 12:02:06 +00:00
marc 957e19306c trying pipenv 2021-04-01 13:40:19 +02:00
marc 4b1384442f no need for database_url 2021-03-30 20:30:05 +02:00
marc 090538ecad new migration 2021-03-30 18:28:17 +00:00
marc 2ad8e20cfe collected static 2021-03-30 18:27:56 +00:00
marc 76908f4fb6 added commands build and push 2021-03-30 18:27:38 +00:00
marc 567708c500 dockerfile with nodejs and collecstatic 2021-03-30 18:27:21 +00:00
marc d3f95d68f9 explorer connection fixed 2021-03-28 16:56:19 +00:00
marc df97c4faf8 better commands in run.sh 2021-03-28 16:49:11 +00:00
marc 9ed4194777 choose good database 2021-03-28 16:48:09 +00:00
marc 7956c7d90e very simple redis url 2021-03-27 22:19:28 +01:00
marc 499741c3fe no apple-touch-icon.png 2021-03-27 13:36:46 +01:00
marc 21b134841b updated staticfiles 2021-03-27 13:10:00 +01:00
marc 9aad62bbf0 updated collectstatic 2021-03-27 11:27:31 +00:00
marc 1294f24d3b Website link to marcpartensky.com 2021-03-27 11:59:47 +01:00
marc 96e2d2fd00 updated run.sh 2021-03-24 20:21:17 +00:00
marc a1b620a848 changed redis config 2021-03-24 10:06:52 +00:00
marc 857cfa46cd not ignoring folders anymore 2021-03-22 22:29:36 +00:00
marc d6b82458d7 changed 1 static file 2021-03-16 23:55:17 +01:00
marc 0cdf4b2d21 self hosted calendar 2021-03-16 23:53:14 +01:00
marc a9f1a5b11f changed readme 2021-03-16 22:28:32 +00:00
marc 545bf2ada6 changing editor models.py 2021-03-16 20:51:50 +01:00
marc b45639fa87 better dockerfile 2021-03-14 19:50:39 +00:00
marc e2417b8f10 new dockerfile 2021-03-14 17:18:47 +00:00
marc 2f41755e94 updated readme 2021-03-02 23:50:28 +01:00
marc 137134c6e8 working dockerfile but no path for certificates 2021-03-02 19:04:56 +00:00
marc 0349b1cf1a no planning at all 2021-03-02 15:19:43 +00:00
marc 1f43666b12 update deploy files 2021-03-02 15:14:39 +00:00
marc 381afe3ac9 dockerfile without entrypoint 2021-02-27 14:47:35 +00:00
marc dd94364030 dockerfile without entrypoint 2021-02-27 14:42:46 +00:00
marc 4bb8ba4ed1 changed port to 7000 2021-02-27 14:27:43 +00:00
marc 6a4c99cbcf using dockerfile with port 8000 2021-02-27 14:00:15 +00:00
marc 94a0b7e2ca removed coc-settings.json from cache 2021-02-26 22:19:13 +01:00
marc 4ed4e4a026 new readme 2021-02-25 12:06:25 +01:00
marc 5b98682a80 not merging app with system + no migrations and collect static 2021-02-24 01:19:24 +00:00
marc 42b385c36f solved dependency hell with requirements 2021-02-23 23:17:54 +00:00
marc a563059ff9 solved dependency hell 2021-02-23 23:17:25 +00:00
root e85d93d9ee no planning anymore 2021-02-23 23:16:41 +00:00
root 290c20e0c1 new dockerignore 2021-02-23 22:32:19 +00:00
marc 43d07bb0f3 business 2021-02-23 22:29:20 +01:00
marc 4c3c4cc6c8 new migrations 2021-02-20 16:57:57 +01:00
marc 4cd6fb9947 new default avatar 2021-02-18 14:42:22 +01:00
marc 2673fa9ffa avatar dependency addd 2021-02-16 14:40:06 +01:00
marc f6c8c2e938 no file count in readme 2021-02-15 00:30:23 +01:00
marc fe093d43e1 migrations commands in procfile 2021-02-15 00:16:07 +01:00
marc 8e6b1a0925 updated requirements 2021-02-15 00:06:37 +01:00
marc 6f553ea617 migration in procfile 2021-02-15 00:02:40 +01:00
marc 517ea91785 remove useless file 2021-02-14 23:58:12 +01:00
marc 0a41813a6c share and fetch done 2021-02-14 23:58:01 +01:00
marc e5784617b7 new file app for share and fetch command 2021-02-14 15:49:24 +01:00
marc a2d45f384b Merge pull request #5 from MarcPartensky/dependabot/pip/cryptography-3.3.2
Bump cryptography from 3.3.1 to 3.3.2
2021-02-11 21:30:48 +01:00
dependabot[bot] 0bcd3cdfde Bump cryptography from 3.3.1 to 3.3.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 3.3.1 to 3.3.2.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/3.3.1...3.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-10 02:29:56 +00:00
marc f81939f98c Merge branch 'master' of github.com:MarcPartensky/Website 2021-02-09 12:27:08 +01:00
marc 63c868c661 better handling of path 2021-02-09 12:27:02 +01:00
marc faa5a0c29c nginx conf 2021-02-08 14:52:42 +00:00
marc 67c07a4d8a requirements 2021-02-08 15:21:24 +01:00
marc c30ffdfea4 updated Dockerfile and added heroku.yml 2021-02-07 12:46:44 +01:00
marc ca46ce2ad4 Merge branch 'master' of https://github.com/MarcPartensky/website 2021-02-07 11:34:58 +00:00
marc cd892e0e17 new dockerfile 2021-02-07 11:34:52 +00:00
marc 94d6f98298 my code in black 2021-02-07 02:36:34 +01:00
marc f6584f2f4e collected static 2021-02-05 23:23:25 +01:00
marc 1365dc5ab1 started build business app 2021-02-05 23:19:40 +01:00
marc 930b062c72 fake update 2021-02-05 16:59:31 +01:00
marc b5b4392a00 update preference 2021-02-05 16:58:27 +01:00
marc b1dafb0379 reindexing 2021-02-05 14:40:32 +01:00
marc 103c3682d9 tried new dockerfile 2021-02-05 02:21:41 +00:00
marc 83637b1946 reindexing all 2021-02-04 23:34:22 +00:00
marc 71b3c90229 fix gitignore conflict 2021-02-04 23:19:14 +00:00
marc c298fc6b15 no cache no media tracked 2021-02-04 23:14:34 +00:00
marc 65994fbef6 ignoring dumps 2021-02-03 18:11:09 +01:00
marc 20f3462243 migrated task manager + dislike count article 2021-02-01 23:53:56 +01:00
marc d728ebc122 added meta data to articles 2021-02-01 23:53:02 +01:00
marc db04c41d96 multi user code editing working but still got cursor bug 2021-01-31 17:59:47 +01:00
marc b6deded4b6 articles 2021-01-27 03:49:18 +01:00
marc 3ae2503d17 collected static 2021-01-27 03:21:03 +01:00
marc 9f81b759d4 full article system 2021-01-27 03:18:10 +01:00
marc 1f70f099f7 collected static 2021-01-26 22:57:13 +01:00
marc 975136affd making article models from scratch + rich module 2021-01-26 22:44:00 +01:00
marc 45f0aae0b1 graphviz anostic 2021-01-26 22:18:32 +01:00
marc eb13007824 heroku buildpack graphviz 2021-01-26 20:28:28 +01:00
marc f2d8effff4 added django extensions library + added graph url + changed article 2021-01-26 20:07:36 +01:00
marc 38461dc35b added todo pages + corrected github and nav bar links 2021-01-25 21:06:08 +01:00
marc 3deb1a3c1b update commands.yml 2021-01-25 17:47:36 +01:00
marc 03050a6404 notification system done 2021-01-24 20:14:11 +01:00
marc 858a72e85f refactored main js script + added valid form system for subscribing by mail address to my events 2021-01-24 18:46:06 +01:00
marc 99ff3976c5 better navbar and notified mail almost done 2021-01-23 15:05:36 +01:00
marc 88078e4da5 made models and made migrations 2021-01-22 13:56:18 +01:00
marc 9c75fb9f8e Lots of models 2021-01-20 19:11:37 +01:00
marc 0959e71c4b no need to hydrate the context for layout/home.html 2021-01-19 23:48:48 +01:00
marc 09362702b9 started app todo 2021-01-19 22:45:10 +01:00
marc 77b7e58201 started home forms.py 2021-01-19 22:40:23 +01:00
marc 2d26aa928c hydrated context for isep subfolder 2021-01-18 19:47:11 +01:00
marc 0663b11571 pages de paul + valentin 2021-01-17 18:07:56 +01:00
marc c7a1867131 added possibility to change admin's theme 2021-01-17 00:21:11 +01:00
marc 2af927074e added django jsonfield backport to requirements.txt 2021-01-16 12:57:52 +01:00
marc cbadc3177b env variables + test views docs + websocket + preferences 2021-01-16 00:56:09 +01:00
marc 29a1ceda85 env variables for production database 2021-01-14 23:52:21 +01:00
marc 9fdd60e98d mbeditor config 2021-01-13 22:51:08 +01:00
marc 85c311dafa forgot to update requirements while being in venv 2021-01-13 00:57:31 +01:00
marc 3c1e8c6989 forgot to update requirements.txt 2021-01-13 00:57:01 +01:00
marc 7a53775fb5 mdeditor in admin interface 2021-01-13 00:40:17 +01:00
marc afd7c57db9 fixed fatal error by importing allauth 2021-01-12 19:47:32 +01:00
marc 3abcffecd1 notifed + donation 2021-01-11 11:04:30 +01:00
marc 0e9bfb3fe2 trying to use explorer in production 2021-01-10 16:42:07 +01:00
marc e6169428db view count and meta data header 2021-01-08 02:50:55 +01:00
marc f561acc2c7 trying stunner friendly settings.py 2021-01-06 22:50:54 +01:00
marc d7a5002ee3 redis url 2021-01-06 20:25:04 +01:00
marc e7d710952c changed procfile 2021-01-06 20:15:29 +01:00
marc 1bee505372 running workers cause i can 2021-01-06 20:08:02 +01:00
marc e099438f15 if debug add debug host else dont again 2021-01-06 19:52:15 +01:00
marc 1bf3f63fa9 if debug add debug host else dont 2021-01-06 19:50:24 +01:00
marc 9222624950 tring other procfile 2021-01-06 19:42:08 +01:00
marc d7b9b562d9 setting port to not default 8000 value 2021-01-06 19:33:16 +01:00
marc 3e52667376 run.sh with daphne asgi 2021-01-06 19:30:40 +01:00
marc a837a390b1 launching asgi as i should was not the case 2021-01-06 19:28:02 +01:00
marc 705152ae7f literally added one s to ws connexion for more security 2021-01-06 18:41:58 +01:00
marc 801daa7675 tls redis connexion 2021-01-06 18:35:51 +01:00
marc 33c867be8f messing with websocket and asgi 2021-01-06 18:19:17 +01:00
marc b51af63716 forgot to change websocket endpoint 2021-01-06 15:07:05 +01:00
marc be6739398e trying to use websocket 2021-01-06 14:54:26 +01:00
marc 420bce9271 code editor 2020-12-27 19:53:01 +01:00
marc 7b486a1f02 better users views 2020-12-27 01:12:49 +01:00
marc 3001b7974a code app, npm update, commands.yml 2020-12-26 14:29:28 +01:00
marc 2d6ce3ee62 code editor advancements 2020-12-26 00:51:12 +01:00
marc e8f45795cb added : in ftp command in procfile 2020-12-25 17:09:38 +01:00
marc 87def1e885 better procfile 2020-12-25 17:00:13 +01:00
marc 984b899a51 adding context to article 2020-12-25 16:19:44 +01:00
marc 999255b4bb new procfifle 2020-12-25 12:08:53 +01:00
marc 7f0378d97d collecting static 2020-12-25 02:05:27 +01:00
marc b03373c4c9 hydrating some views a little 2020-12-25 01:39:06 +01:00
marc 75fe5b71b5 why us padding not nul 2020-12-25 01:22:49 +01:00
marc 4acda86f6f fixed invisible button : more about me 2020-12-25 01:10:55 +01:00
marc 9450942d50 fixed disappearing content with on ready event and removed resume main.js dependency 2020-12-25 01:07:30 +01:00
marc 1c8ef8bf23 network in comment 2020-12-24 19:36:10 +01:00
marc 1287a8f4b7 docker not composing 2020-12-23 09:44:27 +01:00
marc 8fef5a3662 explanation for deployment 2020-12-22 23:15:48 +01:00
marc 33a9d3d7ed build minutes 2020-12-22 23:09:35 +01:00
marc 90a1073a08 better read me 2020-12-22 23:04:34 +01:00
marc 7de9f234bc decorator + asgi + docker compose 2020-12-22 23:02:26 +01:00
marc 73d5bbc6f5 dockerfile working and readme up to date 2020-12-18 23:50:33 +01:00
marc 7dfc0e1514 dockerfile 2020-12-16 02:26:56 +01:00
marc 74ee9f2c01 allauth 2020-12-15 09:10:08 +01:00
marc 1942c0f7b0 theme toggle 2020-12-08 12:30:25 +01:00
marc b494d16609 forgot to collectstatic for cv 2020-12-08 12:03:38 +01:00
marc ddc9c7ebac cv 2020-12-08 12:00:58 +01:00
marc a99579a3b4 iframe > pre? 2020-12-07 14:41:34 +01:00
marc 1b7b26e128 tired of lack of twig logs 2020-12-02 02:50:09 +01:00
marc 295c253aaa twig is dangerous 2020-12-02 02:23:53 +01:00
marc e2583125e1 compliant home view 2020-12-02 01:06:22 +01:00
marc 9a22849074 github activity with github icon and link 2020-12-02 00:54:03 +01:00
marc 24bdebc391 corrected dumb html regex on github page parsing 2020-12-02 00:28:23 +01:00
marc b4f7d9b96e forgot to freeze and collectstatic 2020-11-29 21:38:18 +01:00
marc b73f241e97 added explorer, removed old make article, added fields to article model 2020-11-29 21:34:33 +01:00
marc 752028b350 safe cookie now 2020-11-29 16:06:17 +01:00
marc cdd5b631e7 sending terminal with cheat and python api 2020-11-29 02:17:32 +01:00
marc 99ede24739 added cheat to terminal 2020-11-28 21:44:05 +01:00
marc 6b29ae4f7f dark and light themes 2020-11-28 21:03:03 +01:00
marc 286ec2ea54 filled revised meta tag with last commit date 2020-11-28 20:37:32 +01:00
marc cd870525a1 meta collectstaitc 2020-11-28 18:06:18 +01:00
marc 1561197aec too much meta kills the meta 2020-11-28 18:00:28 +01:00
marc aabd44ade0 more specific og meta for video preview of website on discord and others 2020-11-28 17:21:05 +01:00
marc 184ce175fc meta properties og 2020-11-28 17:09:16 +01:00
marc e44d91b297 button enabled article 2020-11-28 16:31:15 +01:00
marc fb3d8331e6 added djangoftpserver and added index to demo app 2020-11-28 15:15:08 +01:00
marc 1d25a7435b collect static no input and renamed static filenames from space to dash 2020-11-27 18:01:45 +01:00
marc 81ac9069a1 collecting static once again 2020-11-27 17:29:30 +01:00
marc 4d7cefc24d orasa beaute 4 pages 2020-11-27 17:28:19 +01:00
marc 9d4bc084b7 going back to the good old codes 2020-11-27 17:09:55 +01:00
marc 637fb74fbb orasa beaute waiting for photos, email and fb 2020-11-27 15:02:09 +01:00
marc 205a1f4530 trying stuff 2020-11-27 13:07:50 +01:00
marc 62adb44652 fixed responsive design 2020-11-27 10:42:00 +01:00
marc 7fcd75ee90 lots of changes in styles for nav bar marc theme 2020-11-27 01:40:21 +01:00
marc e2a39d3189 messed with template cache system so that post new article = show new article too 2020-11-26 17:12:50 +01:00
marc 11e45b35be cache in gitignore 2020-11-26 12:54:29 +01:00
marc d9e75bd64f not ignoring cache folder but file inside it 2020-11-26 11:47:13 +01:00
marc f3782b831a trying desperately to disable templates name caching 2020-11-26 00:56:21 +01:00
marc 7e10abf57b changed gitignore and added cache reset for article templates 2020-11-26 00:05:10 +01:00
marc 408a7de166 added orasa beauté 2020-11-25 16:49:35 +01:00
marc 3b18887226 works in prodution locally at least 2020-11-25 02:40:16 +01:00
marc 27e2867155 printing more stuff for debugging in production which is dumb 2020-11-24 15:58:42 +01:00
marc c35454e0dc gimme my apt 2020-11-23 14:18:09 +01:00
marc 34f12d0988 cleaning the templates folder 2020-11-23 13:41:04 +01:00
marc 2ef563075b preprocessed static files 2020-11-23 13:31:33 +01:00
marc 0a25e272d8 forgot to collecstatic once again 2020-11-23 11:04:55 +01:00
marc cc43f5a278 pushing whole markdown styles superset 2020-11-23 11:01:27 +01:00
marc 05843474ab not ignoring markdown styles 2020-11-21 11:24:52 +01:00
marc 018e78958b except markdown styles layouts when ignoring node_modules 2020-11-21 11:21:28 +01:00
marc d3489d4309 added 18 possible article layouts 2020-11-21 03:52:10 +01:00
marc 181fb0a49b faster homepage loading 2020-11-20 23:52:13 +01:00
marc 29236c42b4 refactoring for multiple layout choices 2020-11-19 13:02:30 +01:00
marc 364dee862b good title 2020-11-19 02:18:40 +01:00
marc 5516472d7e wrong index page for some unknow reason 2020-11-19 00:00:20 +01:00
marc 482d08006b pushing new index page 2020-11-18 23:51:46 +01:00
marc f89ff4ed62 added smooth scroll and adapted font size somehow responsively 2020-11-18 22:24:02 +01:00
marc 2ac354a1d7 best responsive behaviour possible 2020-11-18 16:11:29 +01:00
marc 425393d61b fixed text too long bug 2020-11-18 14:37:55 +01:00
marc 7591eb4a5e adding lots of markdown files 2020-11-18 14:23:29 +01:00
marc d6dadc5586 forgot to collect static as freaking usual 2020-11-18 12:35:01 +01:00
marc 0dbcb9fc9a working article project 2020-11-18 12:32:41 +01:00
marc c1d36efb84 added article app 2020-11-18 02:44:57 +01:00
marc 2f2fac7127 made the website an npm package too 2020-11-16 19:18:44 +01:00
marc 201abb0aa1 new article app 2020-11-16 19:14:00 +01:00
marc ed83e180ad if there was a competition of useless commits i'd win 2020-11-16 18:56:18 +01:00
marc e61fc11efe added .buildpacks file 2020-11-16 14:16:35 +01:00
marc 88e61a2593 started working on terminal 2020-11-16 13:43:55 +01:00
marc 89ae0e5d29 collected static 2020-11-16 00:30:40 +01:00
marc dbdc39bc70 created super user 2020-11-16 00:01:00 +01:00
marc 94cab538dd added example view 2020-11-15 21:18:12 +01:00
marc 5ba4918875 even better looking markdown2html 2020-11-15 18:45:22 +01:00
marc 5cb56b963b added dark theme preview in readme 2020-11-15 02:54:38 +01:00
marc c7101c78ee added dark theme on homepage and collected static 2020-11-15 02:49:54 +01:00
marc f0355248a3 added dark theme on homepage 2020-11-15 02:49:10 +01:00
marc 06b97f9791 im a lot of things 2020-11-15 00:36:55 +01:00
marc 3c0bd8b35e wrong requirements.txt 2020-11-14 23:59:31 +01:00
marc 5e5b233ca6 forgot to collect static as usual 2020-11-14 23:56:26 +01:00
marc ed74190cde started working on resume section not done yet 2020-11-14 23:50:55 +01:00
marc 5caef15c08 started rest api app 2020-11-13 19:56:10 +01:00
marc 88d1794c43 markdown like style 2020-11-13 18:23:10 +01:00
marc fb18a924e6 channels to requirements.txt 2020-11-10 01:06:28 +01:00
marc a8d199389a chat system working 2020-11-10 01:02:51 +01:00
marc 06fa324ff7 done making room system i guess 2020-11-10 00:53:33 +01:00
marc 97eb4d1f3b before running migrations 2020-11-10 00:32:14 +01:00
marc df685af8b4 removed useless date view 2020-11-09 23:11:31 +01:00
marc 72adfca0ea useless change in readme 2020-11-09 21:16:19 +01:00
marc 5b8af12ffb changed requirementss 2020-11-09 21:11:55 +01:00
marc a99e13c881 collected static 2020-11-09 21:10:32 +01:00
marc c6defe8eb2 added todolist 2020-11-09 21:09:03 +01:00
marc c9c8fda68e bad todolist 2020-11-09 17:51:46 +01:00
marc eb0412e0ac helper in lowercase 2020-11-09 14:39:12 +01:00
marc b444609bea added helper in .gitignore 2020-11-09 14:37:53 +01:00
marc e027310b01 visible message scan me to add me as a contact 2020-11-07 19:54:55 +01:00
marc 405a0d8ed7 added qrcode to the readme just to commit and push 2020-11-07 19:45:05 +01:00
marc dcd68eb810 forgot once again to collectstatic 2020-11-07 19:33:28 +01:00
marc c54409200b qrcode for vcard instead of website url 2020-11-07 19:32:42 +01:00
marc c9022a2ecf replaced planning to calendar 2020-11-07 18:59:13 +01:00
marc f2e55eb784 forgot to change layout for cv and donation pages 2020-11-07 18:42:00 +01:00
marc 68a268a09d forgot to collecstatic as usual 2020-11-07 18:40:05 +01:00
marc 10dd678817 changed layout every wehre 2020-11-07 18:39:15 +01:00
marc 84935f22ca touch typing app starting when typing 2020-11-07 18:03:05 +01:00
marc cb1530dc92 changed donation, and homepage 2020-11-07 16:13:11 +01:00
marc f9a43e3374 no exact address i said 2020-11-07 15:44:11 +01:00
marc 993d6edec4 no exact address on google maps iframe and corrected text mistake 2020-11-07 15:39:33 +01:00
marc 966a481d1e collected static and changed setup image 2020-11-05 01:31:37 +01:00
marc 1bf7e414e6 cleaning up a little 2020-11-05 00:38:20 +01:00
marc af0e393f9e changed views and templates from games to game 2020-11-04 23:55:38 +01:00
marc 624dd7c377 changed games to game in views 2020-11-04 23:51:35 +01:00
marc 5ffbae1470 changed games in base and home templates 2020-11-04 23:39:25 +01:00
marc 4a5b69ca6d --version 2020-11-04 23:36:08 +01:00
marc e1539a7de9 safe requirements.txt 2020-11-04 23:25:08 +01:00
marc b0cbdf6588 before pipupgrading 2020-11-04 23:15:02 +01:00
marc 5dec8fbc19 after renaming 2020-11-04 23:05:30 +01:00
marc 428212deaf before renaming tests app 2020-11-04 23:02:41 +01:00
marc 76555bdd8e changed app name from tests to test 2020-11-04 22:57:24 +01:00
marc de83bfe2ac trying to add cdn but failing 2020-11-04 00:07:40 +01:00
marc f8e3831036 added discord iframe in demo 2020-10-29 21:54:31 +01:00
marc 0d17e74321 first homepage release 2020-10-26 19:55:26 +01:00
marc b50bc3b0c0 browser friendly thumbnails in portefolio 2020-10-26 15:24:52 +01:00
marc e485e227c2 --version 2020-10-26 14:20:36 +01:00
marc 2d0d9eab77 forgot to collectstatic as usual 2020-10-26 14:05:36 +01:00
marc 6b8d25c3f9 certificates done 2020-10-26 14:05:02 +01:00
marc 20d370aeb5 added google maps into contact section 2020-10-26 01:38:37 +01:00
marc a60fca6d6a changed location of languages section 2020-10-26 01:18:28 +01:00
marc 01ae7fc2b4 cv in homepage 2020-10-26 01:10:16 +01:00
marc 0b69c9f943 collecting static for homepage 2020-10-26 00:12:23 +01:00
marc 416c538e56 portefolio done 2020-10-26 00:10:14 +01:00
marc faaad21f31 working on portefolio 2020-10-25 22:21:02 +01:00
marc 21a72c7564 completely refactored homepage 2020-10-25 21:29:16 +01:00
marc d639f64af3 added design app to django 2020-10-24 18:26:06 +02:00
marc 14a80e6db9 clever modal title 2020-10-22 21:15:24 +02:00
marc 0e831bfb19 added full pygame support 2020-10-22 20:59:28 +02:00
marc cdc06ec2e4 added awesome combination between codemirror and skulpt 2020-10-21 12:26:12 +02:00
marc e49c55dbc0 added better looking fake terminal 2020-10-21 10:46:59 +02:00
marc 97033050bb added a fake terminal 2020-10-21 10:29:10 +02:00
marc 9d44b47d84 added possibility to save file after editing it 2020-10-18 00:08:16 +02:00
marc 7cd16937d1 corrected codemirror bug 2020-10-17 23:46:57 +02:00
marc e953a9e301 added codemirror editor 2020-10-17 23:41:46 +02:00
marc 2cc72d4df8 added cdn dependency to ace editor 2020-10-17 22:40:42 +02:00
marc 79327a2104 added ace editor 2020-10-17 22:34:19 +02:00
marc ff5880f108 changed resume once again 2020-10-17 20:57:00 +02:00
marc f0d363031b updated cv 2020-10-15 16:07:19 +02:00
marc 5283d5f975 links that actually work 2020-10-14 00:38:42 +02:00
marc 2c9134e4d9 changed collectstatic 2020-10-14 00:28:33 +02:00
marc b31baae00a added garage webpage 2020-10-14 00:23:32 +02:00
marc eb748cdee3 changed my cv 2020-10-11 20:29:51 +02:00
marc a088426802 added lignée bde 2020-10-09 15:48:15 +02:00
marc 63e3ec66a3 changed cv 2020-10-09 14:28:14 +02:00
marc db1696bab0 added button for funding support 2020-10-07 18:05:18 +02:00
marc c9396e2ae9 added app planning 2020-10-05 14:32:36 +02:00
marc 9870d4d4ad base directory 2020-10-05 01:07:39 +02:00
marc 4f7ea9ebb1 corrected bug by collecting static files the right way 2020-10-05 00:54:27 +02:00
marc c31aee0129 new requirements 2020-10-04 18:46:06 +02:00
marc d351e16663 tried to correct staticfiles finders 2020-10-04 18:39:20 +02:00
marc 857d43efa2 finders 2020-10-04 18:28:07 +02:00
marc 629f619161 add me 2020-10-04 18:22:18 +02:00
marc b18210f7aa changed projects to project 2020-09-28 13:36:28 +02:00
marc 37067979d1 minor commit 2020-09-25 20:45:15 +02:00
marc a17eacc831 messing with production stuff for http error 2020-09-25 00:44:02 +02:00
marc 83fc5edb99 reindexing 2020-09-25 00:29:43 +02:00
marc 0009516b1d forgot to uncomment my error messages 2020-09-25 00:21:38 +02:00
marc b171c3267a test production 2020-09-25 00:10:35 +02:00
marc ba31bd0f82 test 2 2020-09-24 23:12:30 +02:00
marc afba08d6e8 test of 404 in prod 2020-09-24 23:05:20 +02:00
marc b05d6b9777 added hidden google calendars in demo section 2020-09-24 22:39:14 +02:00
marc 8f8c8bf758 better swfit 2020-09-23 12:04:56 +02:00
marc bb5173ef63 added few skills 2020-09-23 12:03:13 +02:00
marc 25b06fa876 darker red in footer animation 2020-09-23 01:30:32 +02:00
marc da5f5bdc28 dope footer now 2020-09-23 01:22:00 +02:00
marc 4b81c05594 exchanged 2 icons positions cause i felt like it 2020-09-23 01:05:10 +02:00
marc b8eb0cae18 tried to change the homepage 2020-09-23 01:00:27 +02:00
marc 49321abceb awesome homepage 2020-09-21 19:04:29 +02:00
marc e16486e128 added links that open on new tabs 2020-09-20 22:19:57 +02:00
marc 1bdda1843f normal icons finally 2020-09-20 13:09:05 +02:00
marc c3828d1dd1 inverted links with names 2020-09-20 12:09:48 +02:00
marc 427a2b553d added external projects section 2020-09-20 12:06:11 +02:00
marc 09218cf9ca no more useless files 2020-09-15 02:26:14 +02:00
marc fb12f3ee89 corrected profile footer 2020-09-14 17:11:46 +02:00
marc 80384bd64c deleted weird stuff in footer 2020-09-14 17:09:57 +02:00
marc 32e12fa83b forgot to delete one facebook link 2020-09-14 17:08:00 +02:00
marc 72ea302619 added footer with social network links 2020-09-14 17:07:19 +02:00
marc dcd51cb18f une blague pas marrante pour le garage 2020-09-14 00:20:21 +02:00
marc b9d467b577 placeholder 2020-09-13 12:38:12 +02:00
marc 28c30d7493 corrected corsheaders bug 2020-09-12 11:32:30 +02:00
marc 1b8168b58e added app groups 2020-09-12 11:27:30 +02:00
marc e1dfd9c3f3 found the bug and corrected it 2020-09-08 07:59:08 +02:00
marc a2b2fe6d5e changed home.html to demo.html 2020-09-08 07:58:19 +02:00
marc db6fd75f4b changed folder name back to lowercase 2020-09-08 07:55:04 +02:00
marc 969de37ada changed folder name 2020-09-08 07:53:39 +02:00
marc 3ac2b1077a improved ui significantly 2020-09-08 07:05:40 +02:00
marc 8a2a59c6d3 added upper case because it looks like its making a difference 2020-09-08 01:12:21 +02:00
marc e956f248f2 pixel art going on message 2020-09-08 01:08:55 +02:00
marc 6a620a356e correct chat config bug 2020-09-08 01:00:56 +02:00
marc 7ac64dc45d added pixel art to the wesite 2020-09-07 23:43:23 +02:00
marc e638f432be tests app with date, hello world and count 2020-09-04 23:35:32 +02:00
marc 62c37a08df new allauth package 2020-08-19 17:21:53 +02:00
marc d5c1753701 enhanced planning a lot 2020-08-15 22:40:49 +02:00
marc bc3fe4b2e1 dodo once a day only 2020-08-15 22:12:02 +02:00
marc 066eb1a714 blog in nav bar visible without login now 2020-08-15 21:45:32 +02:00
marc 6e2abd72a4 blog in boostrap card 2020-08-15 21:41:46 +02:00
marc baebd667f3 background ligth for blog everywhere 2020-08-15 21:34:41 +02:00
marc 1aef49d292 better password-reset-complete form too 2020-08-15 21:23:59 +02:00
marc 9e87bd2697 better password-reset form too 2020-08-15 21:21:51 +02:00
marc 685b1c2f69 better profile and login forms 2020-08-15 21:17:10 +02:00
marc f2848b756d blog link in nav bar 2020-08-15 20:44:46 +02:00
marc 51f86a1449 projects app on django 2020-08-15 20:43:39 +02:00
marc 15fba45ad1 changed 1 character but it make all the difference 2020-08-15 20:15:02 +02:00
marc 65d0cd92af link to cv in the nav bar 2020-08-15 20:10:13 +02:00
marc b35955b2c4 clean cv.html 2020-08-15 20:08:16 +02:00
marc 845f61f65e added cv on the website 2020-08-15 20:07:22 +02:00
marc 1ba34807c7 less violent requirements.txt 2020-08-15 19:28:14 +02:00
marc 819e003d7f better requirements i hope 2020-08-15 19:21:39 +02:00
marc 8907c15344 crud app working now 2020-08-13 21:31:39 +02:00
marc 797adc6a47 got to login before adding game posts 2020-08-13 20:11:41 +02:00
marc 6d5f93f8fa says post instead of submit 2020-08-13 19:34:41 +02:00
marc fa99bbf9a9 better padding 2020-08-13 19:33:46 +02:00
marc b9550bd249 dope new game post template 2020-08-13 19:31:49 +02:00
marc d7a6b527d9 fix for bootstrap closing nav bar immediately after toggle 2020-08-13 19:02:30 +02:00
marc c9c33ce580 stuff to commit 2020-07-28 18:25:53 +02:00
marc 1f7293bc61 gamepostlistview 2020-07-27 13:22:12 +02:00
marc 132e82700e better front 2020-07-27 12:59:41 +02:00
marc c5ec44e3a1 gameposts and awesome navbar 2020-07-27 01:57:51 +02:00
marc ce42dab398 home/base for games 2020-07-18 20:30:56 +02:00
marc 6d01f72cef navbar in planning 2020-07-18 20:28:15 +02:00
marc ee88bbde42 touch typing with base html 2020-07-18 20:19:18 +02:00
marc d2ca0e4933 touch typing 2020-07-18 19:01:52 +02:00
marc 62dfc8eab6 pauline munster 2020-07-18 15:42:10 +02:00
marc a20afc53d8 donation system 2020-07-18 15:36:33 +02:00
marc e6672438bd added minecraft terrain generation 2020-07-14 23:19:05 +02:00
marc d00be4eb4f touch typing app 2020-07-13 15:06:34 +02:00
marc 4d0a24af21 better nav bar 2020-07-13 15:00:48 +02:00
marc 3d14331db3 added login and register in nav bar 2020-07-13 14:24:04 +02:00
marc f21da08376 added content to about section 2020-07-13 13:59:54 +02:00
marc 0307746e5a used blocks in templates 2020-07-12 23:36:53 +02:00
marc 872b888bd2 redirected home 2020-07-12 22:35:41 +02:00
marc abc4d012b9 added first ok looking homepage 2020-06-26 20:24:20 +02:00
marc 3e09a32153 planning 2020-06-25 20:05:33 +02:00
marc 17402e48cb forgot requirements as usual asdjfkalsjdf 2020-06-25 19:26:40 +02:00
marc 90f5a3ad8b planning de marc 2020-06-25 19:23:28 +02:00
marc 87146307dc added missiles 2020-06-18 23:02:19 +02:00
marc 1f32e53184 Update README.md 2020-06-15 17:55:35 +02:00
marc 8aab259a65 correct first-site bug 2020-06-15 02:19:56 +02:00
marc 21cdfaa846 added expanse and connect4 2020-06-15 02:16:11 +02:00
marc 364d0ff41e added asteroids 2020-06-14 23:34:55 +02:00
marc b3083275c9 first commit 2020-06-11 00:55:55 +02:00
marc 769a0c52d5 trying to reset git 2020-06-11 00:49:40 +02:00
2786 changed files with 609679 additions and 4981 deletions
+2
View File
@@ -0,0 +1,2 @@
heroku/nodejs
heroku/python
+22
View File
@@ -0,0 +1,22 @@
Dockerfile
Procfile
run.sh
runtime.txt
Makefile
heroku.yml
docker-compose.yml
dev.yml
db.sqlite3
venv
.env
.github/
.git
.vim/
.buildpacks
*.pem
*.crt
Pipfile
Pipfile.lock
.travis.yml
.gitignore
.dockerignore
+5
View File
@@ -0,0 +1,5 @@
patreon: marcpartensky
github: marcpartensky
custom:
# - monero:43J2XmRtjDPRLD35UsYGH2AZamFBQz7dt4VdvZXVm3SuadTrvcoXUXBRUNHqukFte23Q5TWXqhbwaLJJgoVQzzbe2AJDANQ
- https://paypal.me/marcpartensky
+70
View File
@@ -0,0 +1,70 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '45 22 * * 4'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+49
View File
@@ -0,0 +1,49 @@
name: Docker
on:
push:
branches:
- master
# Publish `v1.2.3` tags as releases.
tags:
- v*
# Run tests for any PRs.
pull_request:
env:
IMAGE_NAME: website
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Update apt
run: sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
- name: Install make
run: sudo apt install make -y
- name: Install Python3.7
uses: actions/setup-python@v1
with:
python-version: 3.7
architecture: x64
- name: make init
run: make init
- name: make update
run: make update
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: marcpartensky/website:latest
+22
View File
@@ -0,0 +1,22 @@
name: Pylint
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.7
uses: actions/setup-python@v1
with:
python-version: 3.7
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pylint
- name: Analysing the code with pylint
run: |
pylint `ls -R|grep .py$|xargs`
+54
View File
@@ -0,0 +1,54 @@
# Env
.env
# Mac
.DS_Store
# Pycache
__pycache__
# Django stuff:
db.sqlite3
# Python virtual environments
env/
venv/
# Editors
.vscode/
.idea/
.vim/
# Helper folder
.helper/
# Npm for markdown rendering
node_modules/*
!node_modules/markdown-styles/layouts/marc/*
# SSL Certificate key
key.pem
cert.pem
*.pem
# Article pages loaded
article/templates/cache/
!article/templates/cache/.gitignore
# Media files stored
media/article/*
!media/article/.gitignore
media/files/
!media/files/.gitignore
# Database dump
*.dump
# Nohup for running the website in background
nohup.out
# Staticfiles
staticfiles
# selenium
geckodriver.log
-1561
View File
File diff suppressed because it is too large Load Diff
-14
View File
@@ -1,14 +0,0 @@
unbind C-b
set -g prefix C-a
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
setw -g monitor-activity on
set -g visual-activity on
set-window-option -g window-status-current-bg yellow
set-option -g mouse-select-pane on
+15
View File
@@ -0,0 +1,15 @@
language: python
python:
# - "2.6"
# - "2.7"
# - "3.3"
# - "3.4"
# - "3.5"
# - "3.6"
- "3.7.7"
- "3.7-dev"
# command to install dependencies
install: make init
test: make test
-160
View File
@@ -1,160 +0,0 @@
alias v=nvim
alias restart='exec $SHELL'
alias ez='nvim ~/.zshrc'
alias e='nvim ~/.zshenv'
alias mem="du -sh"
alias memfiles="du -sh * | sort -rh;"
alias vimrc='nvim ~/.vimrc'
alias ev='nvim ~/.config/nvim'
alias todo="nvim ~/programs/markdown/todolist/todolist.md"
alias t="todo"
alias pip="python -m pip"
alias pip3="python2 -m pip"
alias pip3="python3 -m pip"
alias alacritty="v ~/.config/alacritty/alacritty.yml"
alias isep="cd /Volumes/$/isep"
alias desk="desktop"
alias ports="lsof -Pn -i4"
alias ports2="netstat -ap tcp"
alias network="watch -n 1 \"netstat -p tcp\""
# alias cat=ccat
### Games ###
alias tetris=bastet
alias spaceinvader=ninvaders
# alias tshark="/Applications/Wireshark.app/Contents/MacOS/tshark"
# Git shortcuts
alias gi="git init"
alias ga="echo 'git add -A'; git add -A"
alias gr="git remote"
alias grv="git remote -v"
alias gs="git status"
alias grmc="git rm -r --cached ."
function gc { echo "git commit -m \"$@\""; eval "git commit -m \"$@\"" }
function gp {
if [ "$#" -eq 0 ]; then
echo "git push"
eval "git push"
else
echo "git push \"$@\""
eval "git push \"$@\""
fi
}
function gn { ga; gc $@ }
function gt { ga; gc $@; git push }
function gfp {
git remote add origin $@
git branch -M master
git push -u origin master
}
# Navigation shortcuts
alias home='cd ~'
alias desktop="cd ~/desktop"
alias documents="cd ~/documents"
alias images="cd ~/images"
alias downloads="cd ~/downloads"
# Programming shortcuts
alias programs='cd ~/programs/'
alias website='cd ~/programs/website'
alias web='cd ~/programs/web'
alias javascript='cd ~/programs/web/javascript'
alias canvas='cd ~/programs/web/javascript/canvas'
alias html='cd ~/programs/web/html'
alias css="cd ~/programs/web/css"
alias markdown="cd ~/programs/markdown"
alias wadjet='cd ~/unity games/asteroids'
alias gitprojects="cd ~/git-projects"
alias brain="cd ~/programs/brainperformer"
# Quick temporary aliases
alias asteroids="cd ~/programs/web/javascript/canvas/asteroids"
function p { cd ~/programs/$@ }
function pj { cd ~/git-projects/$@ }
export programs=~/programs
function nodesktopicon {
defaults write com.apple.finder CreateDesktop false
killall Finder
}
function desktopicon {
defaults write com.apple.finder CreateDesktop true
killall Finder
}
# python programs
alias webpfix='py /users/marcpartensky/programs/python/repository-2020/webpfix.py'
alias glou="py /users/marcpartensky/git-projects/glou"
alias noscreenshots='python /users/marcpartensky/programs/python/repository-2020/no-screenshots.py'
alias video2gif='python /users/marcpartensky/programs/python/repository-2020/video2gif.py'
alias hyperplanning="python /users/marcpartensky/programs/python/repository-2020/isep-hyperplanning.py"
alias portail="python /users/marcpartensky/programs/python/repository-2020/isep-portal.py"
# messenger
alias vivelescookies="chrome https://www.facebook.com/messages/t/1830795903602344"
alias alexandre="chrome https://www.facebook.com/messages/t/alexandre.partensky"
alias maman="chrome https://www.facebook.com/messages/t/pew.pradithja.1"
alias pierre="chrome https://www.facebook.com/messages/t/pierre.barthet.5"
alias bigot="chrome https://www.facebook.com/messages/t/alexandre.bgt.12"
alias valentin="chrome https://www.facebook.com/messages/t/valentin.colin.73"
alias samy="chrome https://www.facebook.com/messages/t/samy.haffoudhi"
alias paul="chrome https://www.facebook.com/messages/t/100009925413499"
alias arnaud="chrome https://www.facebook.com/messages/t/100013962188251"
alias etienne="chrome https://www.facebook.com/messages/t/etienne.faviere"
alias baptiste="chrome https://www.facebook.com/messages/t/100009848792300"
alias lovinsky="chrome https://www.facebook.com/messages/t/skyns82"
alias maxime="chrome https://www.facebook.com/messages/t/100011382659168"
alias jp="chrome https://www.facebook.com/messages/t/jeanpascal.vostatek"
alias maximilien="chrome https://www.facebook.com/messages/t/maximilien.delagastine"
alias sacha="chrome https://www.facebook.com/messages/t/sacha.montassiet.1"
alias thibault="chrome https://www.facebook.com/messages/t/thibaut.moi"
alias philippe="chrome https://www.facebook.com/messages/t/100005499708371"
alias medhi="chrome https://www.facebook.com/messages/t/mehdi.haffoudhi.9"
alias hugues="chrome https://www.facebook.com/messages/t/hugues.rubin"
alias kevin="chrome https://www.facebook.com/messages/t/pandasus.pandasus.1"
# applications
alias chrome="open -a 'google chrome' $1"
alias unity="open -a 'unity'"
alias daisy="open -a 'daisydisk'"
alias terminal="open -a 'iterm'"
alias postman="open -a 'postman'"
alias keybr="chrome https://www.keybr.com/"
alias touch-typing="open -a 'google chrome' 'https://www.typingclub.com/sportal/program-3.game'"
alias change-extension="for file in *.$1; do mv '$file' '${file%.txt}.$2'; done"
function finder { open . }
function search { open -a 'Google Chrome' "https://www.google.com/search?q=$*" }
function youtube { open -a 'Google Chrome' "https://www.youtube.com/results?search_query=$1" }
alias yt=youtube
function messenger { open -a 'Google Chrome' "https://www.facebook.com/messages"; }
function messenger-terminal { exec "fb-messenger-cli"; }
alias youtube='cd /Volumes/\$/Youtube'
filename=""
function copy {
filename=$1
echo $filename is copied
cat $1 | pbcopy
}
alias filename='echo $filename'
function paste {
echo $filename is pasted
pbpaste > $filename
}
# This is why being lazyness in programming even exists
function cheat { curl cheat.sh/"$@"; }
function compressgif {
ffmpeg -i $1 -vf scale=320:-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 5 -loop 0 - $2
}
+40
View File
@@ -0,0 +1,40 @@
FROM python:3.7.12
# ARG timestamp
# ARG commit
LABEL maintainer="marc.partensky@gmail.com"
LABEL image="https://hub.docker.com/r/marcpartensky/website"
LABEL source="https://github.com/marcpartensky/website"
LABEL link="https://marcpartensky.com"
# LABEL build.timestamp=timestamp
# LABEL build.commit=commit
COPY . /app
WORKDIR /app
RUN apt-get update
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash
RUN apt-get install -y nodejs
RUN npm install -g npm@latest
RUN npm install
# No .pyo and easier debugging
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN pip install -U pip
RUN pip install -r requirements.txt
ENV PORT 80
ENV HOST 0.0.0.0
EXPOSE 80
# EXPOSE 443
HEALTHCHECK --interval=30s \
--timeout=10s \
--start-period=1m \
--retries=3 \
CMD curl -sSf http://127.0.0.1:$PORT/live || exit 1
ENTRYPOINT ["/app/entrypoint.sh"]
# ENTRYPOINT ["daphne", "-e", "ssl:443:privateKey=$KEY:certKey=$CERT", "django_project.asgi:application"]
+165
View File
@@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
+67
View File
@@ -0,0 +1,67 @@
# HOST=localhost
# PORT=8000
PRODUCTION=false
.PHONY: start list build push setup update init test up down migrate brewstart brewstop dev prod clean deploy
start:
poetry run ./entrypoint.sh --nosetup
list:
@LC_ALL=C $(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build: update
docker-compose -f dev.yml build website
push: build
git pushall
docker-compose -f dev.yml push website
setup: init update start
update:
npm update
npm audit fix || echo npm audit fix failed
poetry export -o requirements.txt
SECRET_KEY=secret poetry run ./website/manage.py collectstatic --noinput
SECRET_KEY=secret poetry run ./website/manage.py makemigrations
init: .env
pip install --user pipenv
pipenv install --dev
npm install --save
test:
pipenv run ./manage.py test
runtest:
make start &
make test
make kill
kill:
pipenv run ./entrypoint.sh kill
up: init
docker-compose up -d
down:
docker-compose -f dev.yml down
docker-compose -f docker-compose.yml down
DOCKER_HOST=ssh://vps docker-compose -f dev.ym up -d --build --force-recreate --remove-orphans website-test
migrate: update
pipenv run ./manage.py migrate
brewstart:
brew services start mysql
brew services start redis
brewstop:
brew services stop mysql
brew services stop redis
dev:
docker-compose -f dev.yml up -d --build --remove-orphans
exec docker-compose -f dev.yml logs -f
prod:
docker-compose -f docker-compose.yml up -d --build --remove-orphans
clean:
docker-compose -f docker-compose.yml down
docker-compose -f dev.yml down
testdeploy:
DOCKER_HOST=ssh://vps docker-compose -f dev.yml up -d --build --force-recreate --remove-orphans website-test
DOCKER_HOST=ssh://vps docker-compose -f docker-compose.dev.ym logs -f website-test
deploy: push
DOCKER_HOST=ssh://vps docker service update vps_website
.env:
echo HOST=localhost > .env
echo PORT=8000 >> .env
echo PRODUCTION=false >> .env
echo NOSETUP=true >> .env
echo SECRET=$$(date +%s | sha256sum | base64 | head -c 32 && echo) >> .env
+85
View File
@@ -0,0 +1,85 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
ansicon = "==1.89.0"
arrow = "==1.2.2"
asgiref = "==3.5.2"
attrs = "==21.4.0"
autobahn = "==22.4.2"
blessed = "==1.19.1"
certifi = "==2022.5.18.1"
cffi = "==1.15.0"
channels = "==3.0.4"
charset-normalizer = "==2.0.12"
commonmark = "==0.9.1"
constantly = "==15.1.0"
cryptography = "==37.0.2"
daphne = "==3.0.2"
defusedxml = "==0.7.1"
dj-database-url = "==0.5.0"
django-allauth = "==0.50.0"
django-appconf = "==1.0.5"
django-compressor = "==4.0"
django-crispy-forms = "==1.14.0"
django-extensions = "==3.1.5"
django-ftpserver = "==0.8.0"
django-heroku = "==0.3.1"
django-jsonfield-backport = "==1.0.5"
django-markdown-view = "==0.0.5"
django-mdeditor = "==0.1.20"
django-picklefield = "==3.0.1"
django-q = "==1.3.9"
django-robots = "==5.0"
django-shortuuidfield = "==0.1.3"
django-sql-explorer = "==2.4.1"
django-storages = "==1.12.3"
djangorestframework = "==3.13.1"
hyperlink = "==21.0.0"
idna = "==3.3"
incremental = "==21.3.0"
jinxed = "==1.2.0"
oauthlib = "==3.2.0"
psycopg2 = "==2.9.3"
pyasn1-modules = "==0.2.8"
pyasn1 = "==0.4.8"
pycparser = "==2.21"
pyftpdlib = "==1.5.6"
python-dateutil = "==2.8.2"
python-dotenv = "==0.20.0"
python3-openid = "==3.2.0"
pytz = "==2022.1"
rcssmin = "==1.1.0"
redis = "==3.5.3"
requests-oauthlib = "==1.3.1"
requests = "==2.27.1"
rich = "==12.4.4"
rjsmin = "==1.2.0"
service-identity = "==21.1.0"
shortuuid = "==1.0.9"
six = "==1.16.0"
sqlparse = "==0.4.2"
twisted-iocpsupport = "==1.0.2"
txaio = "==22.2.1"
typing-extensions = "==4.2.0"
tzdata = "==2022.1"
urllib3 = "==1.26.9"
wcwidth = "==0.2.5"
whitenoise = "==6.1.0"
"zope.interface" = "==5.4.0"
Automat = "==20.2.0"
Django = "==4.0.4"
Markdown = "==3.3.7"
Pillow = "==9.1.1"
Pygments = "==2.12.0"
PyJWT = "==2.4.0"
pyOpenSSL = "==22.0.0"
PyYAML = "==6.0"
Twisted = "==22.4.0"
[dev-packages]
[requires]
python_version = "3.10"
+7
View File
@@ -0,0 +1,7 @@
web: daphne django_project.asgi:application --port $PORT --bind 0.0.0.0 -v2
channels: python manage.py runworker channels -v2
ftp: ./manage.py ftpserver :21
redis: docker run -p 6379:6379 -d redis:5
release: ./manage.py makemigrations ./manage.py migrate
migrate: ./manage.py migrate
makemigrations: ./manage.py makemigrations
+82 -2
View File
@@ -1,3 +1,83 @@
# Dotfiles
[![Docker](https://github.com/MarcPartensky/Website/actions/workflows/docker-push.yml/badge.svg)](https://github.com/MarcPartensky/Website/actions/workflows/docker-push.yml)
[![CodeQL](https://github.com/MarcPartensky/Website/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/MarcPartensky/Website/actions/workflows/codeql-analysis.yml)
My dotfiles config.
# Website
This is the code of my personal website.
[https://marcpartensky.com/](https://marcpartensky.com/)
[![website](https://cdn.discordapp.com/attachments/507519157387132940/937471879776710676/website.png)](https://marcpartensky.com)
## Light theme
[![light theme](https://cdn.discordapp.com/attachments/507519157387132940/937472721015668766/website1.png)](https://marcpartensky.com)
## Dark theme
[![dark theme](https://cdn.discordapp.com/attachments/507519157387132940/937472943422849044/website2.png)](https://marcpartensky.com?theme=dark)
## Install
### From [source](https://github.com/MarcPartensky/Website) (requires [git](https://git-scm.com/), [python](https://www.python.org/), [pip](https://pip.pypa.io/en/stable/installing/))
```sh
git clone https://github.com/marcpartensky/website
cd website
pip install -r requirements.txt
# or with pipenv (recommended, install pipenv with pip install pipenv)
pipenv install
./manage.py runserver
```
## Deploy with [Docker](docker.com)
### Run website as standalone
#### run unsecured for quick test
```sh
docker run -it \
-e SECRET_KEY=$(openssl rand -base64 32) \
-p 8080:80 \
marcpartensky/website
```
#### or run with ssl certificate
```sh
docker run -it \
-env CERT \ # You must export a ssl certificate path
-env KEY \ # You must export a pem key path
-e SECRET_KEY=$(openssl rand -base64 32) \
-p 8443:443 \
marcpartensky/website
```
### Or run with middleware (databases)
```sh
git clone https://github.com/marcpartensky/website
cd website
docker-compose up
```
## Build the docker image from source
```sh
docker build . -t marcpartensky/website
```
Build usually last 5 minutes.
## Add me as a contact
![qrcode](./static/qrcode.svg)
**Scan to add me as a contact**
# Bonus
## Notes
author: Marc Partensky
created: 8/10/2019
## Heroku Buildpacks
```
heroku/python
heroku/node
https://github.com/weibeld/heroku-buildpack-graphviz
```
View File
-716
View File
@@ -1,716 +0,0 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
# TERM: alacritty
TERM: xterm-256color
window:
# dynamic_title: true
# Window dimensions (changes require restart)
#
# Specified in number of columns/lines, not pixels.
# If both are `0`, this setting is ignored.
#dimensions:
# columns: 0
# lines: 0
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This adding is scaled
# by DPI and the specified value is always added at both opposing sides.
#padding:
# x: 0
# y: 0
# Spread additional padding evenly around the terminal content.
dynamic_padding: false
# Window decorations
#
# Values for `decorations`:
# - full: Borders and title bar
# - none: Neither borders nor title bar
#
# Values for `decorations` (macOS only):
# - transparent: Title bar, transparent background and title bar buttons
# - buttonless: Title bar, transparent background, but no title bar buttons
decorations: full
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Window title
title: Marc Partensky
# Window class (Linux/BSD only):
#class:
# Application instance name
#instance: Alacritty
# General application class
#general: Alacritty
# GTK theme variant (Linux/BSD only)
#
# Override the variant of the GTK theme. Commonly supported values are `dark` and `light`.
# Set this to `None` to use the default theme variant.
#gtk_theme_variant: None
scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
#history: 10000
# Scrolling distance multiplier.
multiplier: 3
# Font configuration
font:
# Normal (roman) font face
normal:
# Font family
#
# Default:
# - (macOS) Menlo
# - (Linux/BSD) monospace
# - (Windows) Consolas
# family: monospace
family: Source Code Pro
# The `style` can be specified to pick a specific face.
style: Regular
# Bold font face
bold:
# Font family
#
# If the bold family is not specified, it will fall back to the
# value specified for the normal font.
# family: monospace
family: Source Code Pro
# The `style` can be specified to pick a specific face.
style: Bold
# Italic font face
italic:
# Font family
#
# If the italic family is not specified, it will fall back to the
# value specified for the normal font.
# family: monospace
family: Source Code Pro
# The `style` can be specified to pick a specific face.
style: Italic
# Bold italic font face
bold_italic:
# Font family
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
# family: monospace
family: Source Code Pro
# The `style` can be specified to pick a specific face.
style: Bold Italic
# Point size
size: 15.0
# Offset is the extra space around each character. `offset.y` can be thought of
# as modifying the line spacing, and `offset.x` as modifying the letter spacing.
# offset:
# x: 0
# y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the right,
# increasing `y` moves the glyph upwards.
# glyph_offset:
# x: 0
# y: 0
# Thin stroke font rendering (macOS only)
#
# Thin strokes are suitable for retina displays, but for non-retina screens
# it is recommended to set `use_thin_strokes` to `false`.
use_thin_strokes: true
# If `true`, bold text is drawn using the bright color variants.
# draw_bold_text_with_bright_colors: false
# Colors (Tomorrow Night)
colors:
# Default colors
primary:
background: '#111111'
foreground: '#c5c8c6'
# Bright and dim foreground colors
#
# The dimmed foreground color is calculated automatically if it is not present.
# If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
# is `false`, the normal foreground color will be used.
dim_foreground: '#828482'
bright_foreground: '#eaeaea'
# Cursor colors
#
# Colors which should be used to draw the terminal cursor.
#
# Allowed values are CellForeground and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
cursor:
text: CellBackground
cursor: CellForeground
# Vi mode cursor colors
#
# Colors for the cursor when the vi mode is active.
#
# Allowed values are CellForeground and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
vi_mode_cursor:
text: CellBackground
cursor: CellForeground
# Selection colors
#
# Colors which should be used to draw the selection area.
#
# Allowed values are CellForeground and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
selection:
text: CellBackground
background: CellForeground
# Search colors
#
# Colors used for the search bar and match highlighting.
#
# Allowed values are CellForeground and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
search:
matches:
foreground: '#000000'
background: '#ffffff'
#
bar:
# background: CellForeground
# foreground: CellBackground
text: '#ff00ff'
cursor: '#ff00ff'
# Normal colors
normal:
black: '#1d1f21'
red: '#cc6666'
green: '#b5bd68'
yellow: '#f0c674'
blue: '#81a2be'
magenta: '#b294bb'
cyan: '#8abeb7'
white: '#c5c8c6'
# Bright colors
bright:
black: '#666666'
red: '#d54e53'
green: '#b9ca4a'
yellow: '#e7c547'
blue: '#7aa6da'
magenta: '#c397d8'
cyan: '#70c0b1'
white: '#eaeaea'
# Dim colors
#
# If the dim colors are not set, they will be calculated automatically based
# on the `normal` colors.
dim:
black: '#131415'
red: '#864343'
green: '#777c44'
yellow: '#9e824c'
blue: '#556a7d'
magenta: '#75617b'
cyan: '#5b7d78'
white: '#828482'
# Indexed Colors
#
# The indexed colors include all colors from 16 to 256.
# When these are not set, they're filled with sensible defaults.
#
# Example:
# `- { index: 16, color: '#ff00ff' }`
#
# indexed_colors: []
# Bell
#
# The bell is rung every time the BEL control character is received.
bell:
# Visual Bell Animation
#
# Animation effect for flashing the screen when the visual bell is rung.
#
# Values for `animation`:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
animation: EaseOutExpo
# Duration of the visual bell flash. A `duration` of `0` will disable the
# visual bell animation.
duration: 2
# Visual bell animation color.
color: '#ffffff'
# Bell Command
#
# This program is executed whenever the bell is rung.
#
# When set to `command: None`, no command will be executed.
#
# Example:
# command:
# program: notify-send
# args: ["Hello, World!"]
#
# command: None
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
background_opacity: 0.8
selection:
semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
# When set to `true`, selected text will be copied to the primary clipboard.
save_to_clipboard: true
# Allow terminal applications to change Alacritty's window title.
cursor:
# Cursor style
#
# Values for `style`:
# - ▇ Block
# - _ Underline
# - | Beam
style: Block
# Vi mode cursor style
#
# If the vi mode cursor style is `None` or not specified, it will fall back to
# the style of the active value of the normal cursor.
#
# See `cursor.style` for available options.
vi_mode_style: None
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
# unfocused_hollow: true
# Thickness of the cursor relative to the cell width as floating point number
# from `0.0` to `1.0`.
thickness: 0.15
# Live config reload (changes require restart)
live_config_reload: true
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
# Entries in `shell.args` are passed unmodified as arguments to the shell.
#
# Default:
# - (macOS) /bin/bash --login
# - (Linux/BSD) user login shell
# - (Windows) powershell
#shell:
# program: /bin/bash
# args:
# - --login
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
#working_directory: None
# WinPTY backend (Windows only)
#
# Alacritty defaults to using the newer ConPTY backend if it is available,
# since it resolves a lot of bugs and is quite a bit faster. If it is not
# available, the WinPTY backend will be used instead.
#
# Setting this option to `true` makes Alacritty use the legacy WinPTY backend,
# even if the ConPTY backend is available.
#winpty_backend: false
# Send ESC (\x1b) before characters when alt is pressed.
#alt_send_esc: true
# mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
#double_click: { threshold: 300 }
#triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
# hide_when_typing: false
# url:
# URL launcher
#
# This program is executed when clicking on a text which is recognized as a URL.
# The URL is always added to the command as the last parameter.
#
# When set to `launcher: None`, URL launching will be disabled completely.
#
# Default:
# - (macOS) open
# - (Linux/BSD) xdg-open
# - (Windows) explorer
# launcher:
# program: open
# args: []
# URL modifiers
#
# These are the modifiers that need to be held down for opening URLs when clicking
# on them. The available modifiers are documented in the key binding section.
#modifiers: None
# Mouse bindings
#
# Mouse bindings are specified as a list of objects, much like the key
# bindings further below.
#
# To trigger mouse bindings when an application running within Alacritty captures the mouse, the
# `Shift` modifier is automatically added as a requirement.
#
# Each mouse binding will specify a:
#
# - `mouse`:
#
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# - `action` (see key bindings)
#
# And optionally:
#
# - `mods` (see key bindings)
#mouse_bindings:
# - { mouse: Middle, action: PasteSelection }
# Key bindings
#
# Key bindings are specified as a list of objects. For example, this is the
# default paste binding:
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: Identifier of the key pressed
#
# - A-Z
# - F1-F24
# - Key0-Key9
#
# A full list with available key codes can be found here:
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number. This command will allow you to display the hex scancodes
# for certain keys:
#
# `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: Send a byte sequence to the running application
#
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences. To find escape codes for bindings
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
# of tmux. Note that applications use terminfo to map escape sequences back
# to keys. It is therefore required to update the terminfo when changing an
# escape sequence.
#
# - `action`: Execute a predefined action
#
# - ToggleViMode
# - Search
# - SearchReverse
# - Copy
# - Paste
# - PasteSelection
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollHalfPageUp
# - ScrollHalfPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# - Hide
# - Minimize
# - Quit
# - ToggleFullscreen
# - SpawnNewInstance
# - ClearLogNotice
# - ClearSelection
# - ReceiveChar
# - None
#
# (`mode: Vi` only):
# - Open
# - Up
# - Down
# - Left
# - Right
# - First
# - Last
# - FirstOccupied
# - High
# - Middle
# - Low
# - SemanticLeft
# - SemanticRight
# - SemanticLeftEnd
# - SemanticRightEnd
# - WordRight
# - WordLeft
# - WordRightEnd
# - WordLeftEnd
# - Bracket
# - ToggleNormalSelection
# - ToggleLineSelection
# - ToggleBlockSelection
# - ToggleSemanticSelection
# - SearchNext
# - SearchPrevious
# - SearchStart
# - SearchEnd
#
# (macOS only):
# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
#
# (Linux/BSD only):
# - CopySelection: Copies into selection buffer
#
# - `command`: Fork and execute a specified command plus arguments
#
# The `command` field must be a map containing a `program` string and an
# `args` array of command line parameter strings. For example:
# `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# And optionally:
#
# - `mods`: Key modifiers to filter binding actions
#
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this:
# `mods: Control|Shift`.
# Whitespace and capitalization are relevant and must match the example.
#
# - `mode`: Indicate a binding for only specific terminal reported modes
#
# This is mainly used to send applications the correct escape sequences
# when in different modes.
#
# - AppCursor
# - AppKeypad
# - Alt
#
# A `~` operator can be used before a mode to apply the binding whenever
# the mode is *not* active, e.g. `~Alt`.
#
# Bindings are always filled by default, but will be replaced when a new
# binding with the same triggers is defined. To unset a default binding, it can
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
# a no-op if you do not wish to receive input characters for that binding.
#
# If the same trigger is assigned to multiple actions, all of them are executed
# at once.
key_bindings:
# - { key: Paste, action: Paste }
# - { key: Copy, action: Copy }
# - { key: Copy, action: ClearSelection }
# - { key: L, mods: Control, action: ClearLogNotice }
#- { key: L, mods: Control, mode: ~Vi, chars: "\x0c" }
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, }
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, }
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
# Vi Mode
#- { key: Space, mods: Shift|Control, mode: Vi, action: ScrollToBottom }
#- { key: Space, mods: Shift|Control, action: ToggleViMode }
#- { key: Escape, mode: Vi, action: ClearSelection }
#- { key: I, mode: Vi, action: ScrollToBottom }
#- { key: I, mode: Vi, action: ToggleViMode }
#- { key: Y, mods: Control, mode: Vi, action: ScrollLineUp }
#- { key: E, mods: Control, mode: Vi, action: ScrollLineDown }
#- { key: G, mode: Vi, action: ScrollToTop }
#- { key: G, mods: Shift, mode: Vi, action: ScrollToBottom }
#- { key: B, mods: Control, mode: Vi, action: ScrollPageUp }
#- { key: F, mods: Control, mode: Vi, action: ScrollPageDown }
#- { key: U, mods: Control, mode: Vi, action: ScrollHalfPageUp }
#- { key: D, mods: Control, mode: Vi, action: ScrollHalfPageDown }
#- { key: Y, mode: Vi, action: Copy }
#- { key: Y, mode: Vi, action: ClearSelection }
#- { key: Copy, mode: Vi, action: ClearSelection }
#- { key: V, mode: Vi, action: ToggleNormalSelection }
#- { key: V, mods: Shift, mode: Vi, action: ToggleLineSelection }
#- { key: V, mods: Control, mode: Vi, action: ToggleBlockSelection }
#- { key: V, mods: Alt, mode: Vi, action: ToggleSemanticSelection }
#- { key: Return, mode: Vi, action: Open }
#- { key: K, mode: Vi, action: Up }
#- { key: J, mode: Vi, action: Down }
#- { key: H, mode: Vi, action: Left }
#- { key: L, mode: Vi, action: Right }
#- { key: Up, mode: Vi, action: Up }
#- { key: Down, mode: Vi, action: Down }
#- { key: Left, mode: Vi, action: Left }
#- { key: Right, mode: Vi, action: Right }
#- { key: Key0, mode: Vi, action: First }
#- { key: Key4, mods: Shift, mode: Vi, action: Last }
#- { key: Key6, mods: Shift, mode: Vi, action: FirstOccupied }
#- { key: H, mods: Shift, mode: Vi, action: High }
#- { key: M, mods: Shift, mode: Vi, action: Middle }
#- { key: L, mods: Shift, mode: Vi, action: Low }
#- { key: B, mode: Vi, action: SemanticLeft }
#- { key: W, mode: Vi, action: SemanticRight }
#- { key: E, mode: Vi, action: SemanticRightEnd }
#- { key: B, mods: Shift, mode: Vi, action: WordLeft }
#- { key: W, mods: Shift, mode: Vi, action: WordRight }
#- { key: E, mods: Shift, mode: Vi, action: WordRightEnd }
#- { key: Key5, mods: Shift, mode: Vi, action: Bracket }
#- { key: Slash, mode: Vi, action: Search }
#- { key: Slash, mods: Shift, mode: Vi, action: SearchReverse }
#- { key: N, mode: Vi, action: SearchNext }
#- { key: N, mods: Shift, mode: Vi, action: SearchPrevious }
# (Windows, Linux, and BSD only)
#- { key: V, mods: Control|Shift, action: Paste }
#- { key: C, mods: Control|Shift, action: Copy }
#- { key: C, mods: Control|Shift, mode: Vi, action: ClearSelection }
#- { key: Insert, mods: Shift, action: PasteSelection }
#- { key: Key0, mods: Control, action: ResetFontSize }
#- { key: Equals, mods: Control, action: IncreaseFontSize }
#- { key: Add, mods: Control, action: IncreaseFontSize }
#- { key: Subtract, mods: Control, action: DecreaseFontSize }
#- { key: Minus, mods: Control, action: DecreaseFontSize }
# (Windows only)
# - { key: Return, mods: Alt, action: ToggleFullscreen }
# (macOS only)
- { key: K, mods: Command, mode: ~Vi, chars: "\x0c" }
- { key: Key0, mods: Command, action: ResetFontSize }
- { key: Equals, mods: Command, action: IncreaseFontSize }
# - { key: Add, mods: Command, action: IncreaseFontSize }
- { key: Minus, mods: Command, action: DecreaseFontSize }
- { key: K, mods: Command, action: ClearHistory }
- { key: V, mods: Command, action: Paste }
- { key: C, mods: Command, action: Copy }
# - { key: C, mods: Command, action: ClearSelection }
# - { key: Copy, mods: Command, action: ClearSelection }
# - { key: C, mods: Command, mode: Vi, action: Copy }
# - { key: Copy, mods: Command, mode: Vi, action: ClearSelection }
- { key: H, mods: Command, action: Hide }
- { key: M, mods: Command, action: Minimize }
- { key: Q, mods: Command, action: Quit }
- { key: W, mods: Command, action: Quit }
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: F, mods: Command|Control, action: ToggleFullscreen }
- { key: S, mods: Command, chars: "\x1b:w\x0a" }
- { key: W, mods: Command, chars: "\x1b:q\x0a" }
- { key: T, mods: Command, chars: ":tabnew | terminal\x0a" }
- { key: Left, mods: Command|Alt, chars: ":tabprevious\x0a" }
- { key: Right, mods: Command|Alt, chars: ":tabnext\x0a" }
- { key: Slash, mods: Command, chars: ":Commentary\x0a" }
- { key: I, mods: Command, chars: "\x1b:!\"%:p\"\x0a" }
- { key: Y, mods: Command, chars: "\x1b:!pylint %\x0a" }
- { key: A, mods: Command, chars: "\x1bggVG" }
# - { key: J, mods: Command, chars: "v\x0a" }
# debug:
# Display the time it takes to redraw each frame.
#render_timer: false
# Keep the log file after quitting Alacritty.
# persistent_logging: true
# Log level
#
# Values for `log_level`:
# - None
# - Error
# - Warn
# - Info
# - Debug
# - Trace
#log_level: Warn
# Print all received window events.
# print_events: true
-28
View File
@@ -1,28 +0,0 @@
alias mcd="mkcdir"
alias go="mkcdir"
alias dotfiles="cd $DOTFILES_PATH"
alias dotmain="v $DOTFILES_PATH/main.sh"
alias dotaliases="v $DOTFILES_PATH/aliases.sh"
alias dotfunctions="v $DOTFILES_PATH/functions.sh"
alias dotexports="v $DOTFILES_PATH/exports.sh"
alias dotzshenv="v $DOTFILES_PATH/.zshenv"
alias dota="dotaliases"
alias dotm="dotmain"
alias dotf="dotfunctions"
alias dote="dotexports"
alias dotz="dotzshenv"
alias esclave="cd ~/discordbot/esclave"
alias servant="cd ~/discordbot/servant-de-marc"
alias esclaveaws="ssh -i 'discordbotofmarcpartensky.pem' ubuntu@ec2-15-236-33-61.eu-west-3.compute.amazonaws.com"
alias mampstart='~/Library/Applications/MAMP/bin/start.sh'
alias mampstop='~/Library/Applications/MAMP/bin/stop.sh'
alias jsonbeautify="chrome https://jsonformatter.curiousconcept.com/"
alias github="chrome https://github.com/MarcPartensky/"
alias finder="open ."
alias py=python
alias activate="source venv/bin/activate"
alias py20='cd ~/programs/python/repository-2020'
alias pygames='cd ~/programs/python/repository-games'
alias pyml='cd ~/programs/python/machine-learning'
alias pyhome='cd ~/programs/python'
alias pypackages='cd /library/frameworks/python.framework/versions/3.8/lib/python3.8/site-packages/'
-2057
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
databases:
default:
ENGINE: django.db.backends.postgresql
NAME: marc
USER: marc
PASSWORD: marc
HOST: postgres
PORT: 5432
+2135
View File
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 134 KiB

+145
View File
@@ -0,0 +1,145 @@
version: "3.9"
x-common:
website:
&website
DJANGO_SETTINGS_MODULE: django_project.settings
SECRET_KEY: admin
FTP_URL: 0.0.0.0:21
USER: admin
PASSWORD: admin
EMAIL: admin@admin.com
postgres:
&postgres
POSTGRES_DB: website
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
redis:
&redis
REDIS_URL: redis:6379
services:
# nginx:
# image: jwilder/nginx-proxy
# restart: unless-stopped
# networks:
# - web
# ports:
# - "127.0.1.1:80:80"
# volumes:
# - /var/run/docker.sock:/tmp/docker.sock:ro
website:
image: marcpartensky/website
environment:
<<: *website
<<: *postgres
<<: *redis
VIRTUAL_HOST: website.dev
build:
context: .
dockerfile: ./Dockerfile
ports:
- "127.0.0.1:8000:80"
working_dir: /app
entrypoint: /app/entrypoint.sh
command: 80 0.0.0.0
volumes:
- ".:/app"
depends_on:
- redis
- postgres
networks:
- web
postgres:
image: postgres
environment:
<<: *postgres
ports:
- "127.0.0.1:5432:5432"
networks:
- web
# pgadmin:
# image: dpage/pgadmin4
# restart: unless-stopped
# environment:
# PGADMIN_DEFAULT_EMAIL: admin@admin.com
# PGADMIN_DEFAULT_PASSWORD: admin
# VIRTUAL_HOST: postgres.dev
# volumes:
# - dev_pgadmin:/var/lib/pgadmin
# ports:
# - "15432:80"
# networks:
# - web
pgweb:
image: sosedoff/pgweb
restart: unless-stopped
ports:
- "127.0.0.1:15432:8081"
environment:
DATABASE_URL: "postgres://admin:admin@postgres:5432/website?sslmode=disable"
networks:
- web
depends_on:
- postgres
redis:
image: redis
environment:
<<: *redis
ports:
- "127.0.0.1:6379:6379"
networks:
- web
rediscommander:
image: rediscommander/redis-commander
restart: unless-stopped
environment:
VIRTUAL_HOST: redis.dev
REDIS_HOST: redis:6379
ports:
- "127.0.0.1:16379:8081"
networks:
- web
website-test:
environment:
<<: *website
<<: *postgres
<<: *redis
VIRTUAL_HOST: website.dev
build:
context: .
dockerfile: ./Dockerfile
working_dir: /app
entrypoint: /app/entrypoint.sh
command: 80 0.0.0.0
volumes:
- ".:/app"
networks:
- web
- caddy
healthcheck:
test: ["CMD", "curl", "-fs", "http://website:80/robots.txt"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
labels:
- "caddy=test.marcpartensky.com"
- "caddy.reverse_proxy={{upstreams http 80}}"
networks:
web:
caddy:
external: true
volumes:
dev_posgres:
dev_pgadmin:
+54
View File
@@ -0,0 +1,54 @@
version: "3.9"
x-common:
website:
&website
DJANGO_SETTINGS_MODULE: django_project.settings
SECRET_KEY: "$${openssl rand -base64 64}"
FTP_URL: 0.0.0.0:21
postgres:
&postgres
POSTGRES_NAME: website
POSTGRESQL_USER: root
POSTGRES_PASSWORD: "$${openssl rand -base64 64}"
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
redis:
&redis
REDIS_URL: redis:6379
services:
website:
image: docker.io/marcpartensky/website:latest
environment:
<<: *website
<<: *postgres
<<: *redis
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:80"
working_dir: /app
entrypoint: /app/entrypoint.sh
depends_on:
- redis
- postgres
networks:
- website
redis:
image: redis
environment:
<<: *redis
networks:
- website
postgres:
image: postgres
environment:
<<: *postgres
networks:
- website
networks:
website:
Executable
+41
View File
@@ -0,0 +1,41 @@
#!/bin/sh
src=./website
port=${1:-$PORT}
host=${2:-$HOST}
port=${port:-"80"}
host=${addr:-"0.0.0.0"}
username=${DJANGO_SUPERUSER_USERNAME:-"admin"}
email=${DJANGO_SUPERUSER_EMAIL:-"admin@admin.com"}
DJANGO_SUPERUSER_PASSWORD=${PASSWORD:-$(date +%s | sha256sum | base64 | head -c 32)}
_kill() {
kill $(cat /tmp/website.pid)
}
if [ $1 = "kill" ]; then
_kill
exit 0
fi
echo $$ > /tmp/website.pid
setup() {
echo -e "Running \033[1mentrypoint.sh\033[0m using $HOST:$PORT"
$src/manage.py migrate
echo -e "Creating \033[1msuper user\033[0m using:\n - username: \033[1m$username\033[0m\n - email: \033[1m$email\033[0m\n"
$src/manage.py createsuperuser --user $username --email $email --noinput
$src/manage.py collectstatic --noinput --clear
}
if [[ ! -z $NOSETUP && ! $1 = "--nosetup" ]]; then
setup
fi
# dev vs prod
if [ -z $PRODUCTION ]; then
daphne django_project.asgi:application --port $port --bind $host -v2
else
$src/manage.py runserver 127.0.0.1:8000
fi
-73
View File
@@ -1,73 +0,0 @@
# Path variables
export PATH="$PATH:/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin"
export PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:$PATH"
export PATH="/Library/Frameworks/Python.framework/Versions/3.7/bin:$PATH"
export PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:$PATH"
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
export PATH="/Users/marcpartensky/flutter/bin:$PATH"
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
export PATH="/opt/local/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
export CLICOLOR=1
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
export TEST="This is a test"
export PRODUCTION=false
export DEBUG_VALUE="True"
export DEVELOPMENT=true
export WEBSITE_URL="https://marcpartensky.herokuapp.com"
export WEBSITE_USER="marcpartensky"
export WEBSITE_PASSWORD="glouaymay"
export ISEP_ID="mapa60217"
export ISEP_PORTAL_PASSWORD="fKY?Td7B"
export ISEP_HYPERPLANNING_PASSWORD="7SaxUGjq"
export APPLE_PASSWORD="MarcGPTL44"
export APPLE_MAIL="marc.partensky@gmail.com"
export GMAIL="marc.partensky@gmail.com"
export FREE_MAIL="marc.partensky@free.fr"
export HEROKU_PASSWORD_MARC_PARTENSKY_2="MarcGPTL44@heroku"
export AWS_ACCESS_KEY_ID="AKIAQWHDPXHAAQUJ6DNO"
export AWS_SECRET_ACCESS_KEY="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"
export AWS_STORAGE_BUCKET_NAME="django-blog-marc-partensky"
export SECRET_KEY="cdda0d3fff2c924abb9789bcf781e154449a794276d1e715"
export GOOGLE_APPLICATION_CREDENTIALS="/Users/marcpartensky/Google-Cloud/credentials.json"
export DISCORD_TOKEN="NzEwODYzNDIzMzA2NTk2MzU0.Xxg0uQ.wn54qCFTEPGcxzynmpE_zXIe2Yo"
export DISCORD_CLIENT_ID="710863423306596354"
export DISCORD_MONGO_CLUSTER="discord-cluster-5ckni.mongodb.net/test"
export DISCORD_MONGO_USERNAME="esclave"
export DISCORD_MONGO_PASSWORD="esclave"
export WOLFRAM_ALPHA_ID="WRG62L-Q5X5PUJQ83"
export FACEBOOK_MAIL="marc.partensky@free.fr"
export FACEBOOK_PASSWORD="glouaymayglouaymay69"
export FACEBOOK_MAIL_2="marc.partensky@gmail.com"
export FACEBOOK_PASSWORD_2="marcgptl44"
export FACEBOOK_MAIL_MISCORD="marc.partensky.website@gmail.com"
export FACEBOOK_PASSWORD_MISCORD="miscord@bot69"
export MISCORD_DASHBOARD_USERNAME="miscord-of-marc"
export MISCORD_DASHBOARD_PASSWORD="miscordofmarc"
export PYGITHUB_TOKEN="3a75f51f1b6d0f3dfd341c9e61c10ddaa2adc3f2"
export GITHUB_TOKEN="66c1fa3aeb514c830f9d7f99dee394790857cfaa"
export CAPTCHA_WEBSITE_KEY="6LenqaQZAAAAAC1KXdUOJC2OCZBEJ2DACeUVGEkl"
export CAPTCHA_SECRET_KEY="6LenqaQZAAAAAA_Y_Sx9i3Vh1q-TRSqZUUnmJzFV"
export LEEKWARS_USERNAME="Mazex"
export BRAWLSTARS_ID="8YC89YRL0"
export BRAWLSTARS_MAIL="marc.gptl44@gmail.com"
export BRAWLSTARS_PASSWORD="marc.partensky@brawlstars"
export BRAWLSTARS_TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6IjI4YTMxOGY3LTAwMDAtYTFlYi03ZmExLTJjNzQzM2M2Y2NhNSJ9.eyJpc3MiOiJzdXBlcmNlbGwiLCJhdWQiOiJzdXBlcmNlbGw6Z2FtZWFwaSIsImp0aSI6ImQzY2EzNjMxLWIwZTAtNDA4NC05MGUwLTIyMDg5MmY2OTMwNiIsImlhdCI6MTU5MjUxNzE0NCwic3ViIjoiZGV2ZWxvcGVyLzdmYzlhMjM2LTVkMTMtMzgxNC1kYmJkLWUwYmU0YzFlOTdjMiIsInNjb3BlcyI6WyJicmF3bHN0YXJzIl0sImxpbWl0cyI6W3sidGllciI6ImRldmVsb3Blci9zaWx2ZXIiLCJ0eXBlIjoidGhyb3R0bGluZyJ9LHsiY2lkcnMiOlsiOTEuMTY1LjIxLjg3Il0sInR5cGUiOiJjbGllbnQifV19.EHXW9ji-11Av8p9oFBpQ02idYPGxapNKbFG6P6AprjlgkLLjZ1WN2VM7hkM2b9aPjJKbIlmE4BJEij5dvM-rfg"
export DISCORD_PREFIX="?"
export DISCORD_DEPLOYMENT="DEVELOPMENT"
export YTOPTS="-ciw -x --audio-format 'mp3' --audio-quality 0 -f bestaudio --embed-thumbnail -o '%(title )s.%(ext)s' --rm-cache-dir"
export PP_PASSWORD="yaM-yauolG44"
export LS_COLORS="auto"
# export JAVA_HOME=$(/usr/libexec/java_home)
# For Pyenv
# export PYENV_ROOT="$HOME/.pyenv"
# export PATH="$PYENV_ROOT/bin:$PATH"
# if command -v pyenv 1>/dev/null 2>&1; then
# eval "$(pyenv init -)"
# fi
-64
View File
@@ -1,64 +0,0 @@
#-- START ZCACHE GENERATED FILE
#-- GENERATED: Sam 9 jan 2021 04:01:30 CET
#-- ANTIGEN v2.2.3
_antigen () {
local -a _1st_arguments
_1st_arguments=('apply:Load all bundle completions' 'bundle:Install and load the given plugin' 'bundles:Bulk define bundles' 'cleanup:Clean up the clones of repos which are not used by any bundles currently loaded' 'cache-gen:Generate cache' 'init:Load Antigen configuration from file' 'list:List out the currently loaded bundles' 'purge:Remove a cloned bundle from filesystem' 'reset:Clears cache' 'restore:Restore the bundles state as specified in the snapshot' 'revert:Revert the state of all bundles to how they were before the last antigen update' 'selfupdate:Update antigen itself' 'snapshot:Create a snapshot of all the active clones' 'theme:Switch the prompt theme' 'update:Update all bundles' 'use:Load any (supported) zsh pre-packaged framework')
_1st_arguments+=('help:Show this message' 'version:Display Antigen version')
__bundle () {
_arguments '--loc[Path to the location <path-to/location>]' '--url[Path to the repository <github-account/repository>]' '--branch[Git branch name]' '--no-local-clone[Do not create a clone]'
}
__list () {
_arguments '--simple[Show only bundle name]' '--short[Show only bundle name and branch]' '--long[Show bundle records]'
}
__cleanup () {
_arguments '--force[Do not ask for confirmation]'
}
_arguments '*:: :->command'
if (( CURRENT == 1 ))
then
_describe -t commands "antigen command" _1st_arguments
return
fi
local -a _command_args
case "$words[1]" in
(bundle) __bundle ;;
(use) compadd "$@" "oh-my-zsh" "prezto" ;;
(cleanup) __cleanup ;;
(update|purge) compadd $(type -f \-antigen-get-bundles &> /dev/null || antigen &> /dev/null; -antigen-get-bundles --simple 2> /dev/null) ;;
(theme) compadd $(type -f \-antigen-get-themes &> /dev/null || antigen &> /dev/null; -antigen-get-themes 2> /dev/null) ;;
(list) __list ;;
esac
}
antigen () {
local MATCH MBEGIN MEND
[[ "$ZSH_EVAL_CONTEXT" =~ "toplevel:*" || "$ZSH_EVAL_CONTEXT" =~ "cmdarg:*" ]] && source "/usr/local/Cellar/antigen/2.2.3/share/antigen/antigen.zsh" && eval antigen $@;
return 0;
}
typeset -gaU fpath path
fpath+=(/Users/marcpartensky/.antigen/bundles/romkatv/powerlevel10k /Users/marcpartensky/.antigen/bundles/zsh-users/zsh-autosuggestions /Users/marcpartensky/.antigen/bundles/zsh-users/zsh-syntax-highlighting) path+=(/Users/marcpartensky/.antigen/bundles/romkatv/powerlevel10k /Users/marcpartensky/.antigen/bundles/zsh-users/zsh-autosuggestions /Users/marcpartensky/.antigen/bundles/zsh-users/zsh-syntax-highlighting)
_antigen_compinit () {
autoload -Uz compinit; compinit -i -d "/Users/marcpartensky/.antigen/.zcompdump"; compdef _antigen antigen
add-zsh-hook -D precmd _antigen_compinit
}
autoload -Uz add-zsh-hook; add-zsh-hook precmd _antigen_compinit
compdef () {}
if [[ -n "" ]]; then
ZSH=""; ZSH_CACHE_DIR=""
fi
#--- BUNDLES BEGIN
source '/Users/marcpartensky/.antigen/bundles/romkatv/powerlevel10k/powerlevel10k.zsh-theme.antigen-compat';
source '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/eastwood.zsh-theme.antigen-compat';
source '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/kardan.zsh-theme.antigen-compat';
source '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/nicoulaj.zsh-theme.antigen-compat';
source '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh';
source '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh';
#--- BUNDLES END
typeset -gaU _ANTIGEN_BUNDLE_RECORD; _ANTIGEN_BUNDLE_RECORD=('https://github.com/romkatv/powerlevel10k.git / theme true' 'https://github.com/robbyrussell/oh-my-zsh.git themes/eastwood.zsh-theme theme true' 'https://github.com/robbyrussell/oh-my-zsh.git themes/kardan.zsh-theme theme true' 'https://github.com/robbyrussell/oh-my-zsh.git themes/nicoulaj.zsh-theme theme true' 'https://github.com/zsh-users/zsh-autosuggestions.git / plugin true' 'https://github.com/zsh-users/zsh-syntax-highlighting.git / plugin true')
typeset -g _ANTIGEN_CACHE_LOADED; _ANTIGEN_CACHE_LOADED=true
typeset -ga _ZCACHE_BUNDLE_SOURCE; _ZCACHE_BUNDLE_SOURCE=('/Users/marcpartensky/.antigen/bundles/romkatv/powerlevel10k//' '/Users/marcpartensky/.antigen/bundles/romkatv/powerlevel10k///powerlevel10k.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/eastwood.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/eastwood.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/kardan.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/kardan.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/nicoulaj.zsh-theme' '/Users/marcpartensky/.antigen/bundles/robbyrussell/oh-my-zsh/themes/nicoulaj.zsh-theme' '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-autosuggestions//' '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-autosuggestions///zsh-autosuggestions.plugin.zsh' '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-syntax-highlighting//' '/Users/marcpartensky/.antigen/bundles/zsh-users/zsh-syntax-highlighting///zsh-syntax-highlighting.plugin.zsh')
typeset -g _ANTIGEN_CACHE_VERSION; _ANTIGEN_CACHE_VERSION='v2.2.3'
#-- END ZCACHE GENERATED FILE
BIN
View File
Binary file not shown.
-114
View File
@@ -1,114 +0,0 @@
mkcdir() {
mkdir -p -- "$1" &&
cd -P -- "$1"
}
alias startmamp='cd /Applications/MAMP/bin && ./start.sh'
alias stopmamp='cd /Applications/MAMP/bin && ./stop.sh'
function exists { which $1 &> /dev/null }
if exists percol; then
function percol_select_history() {
local tac
exists gtac && tac="gtac" || { exists tac && tac="tac" || { tac="tail -r" } }
BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
CURSOR=$#BUFFER # move cursor
zle -R -c # refresh
}
zle -N percol_select_history
bindkey '^R' percol_select_history
fi
function div {
local _d=${3:-2}
local _n=0000000000
_n=${_n:0:$_d}
local _r=$(($1$_n/$2))
_r=${_r:0:-$_d}.${_r: -$_d}
return $_r
}
# Ffmpeg
function speed-up {
local n=$(python3 -c "print(1/$3)" 2>&1)
ffmpeg -i $1 -filterv "setpts=$n*PTS" $2
}
filename=""
function copy {
filename=$1
echo $filename is copied
cat $1 | pbcopy
}
function paste {
echo $filename is pasted
pbpaste > $filename
}
function search { open -a 'Google Chrome' "http://www.google.com/search?q=$1" }
alias chrome="open -a 'Google Chrome' $1";
alias daisy="open -a 'DaisyDisk'"
function youtube { open -a 'Google Chrome' "https://www.youtube.com/results?search_query=$1" }
function messenger { open -a 'Google Chrome' "https://www.facebook.com/messages"; }
function messenger-terminal { exec "fb-messenger-cli"; }
alias postman="open -a 'Postman'"
function spam {
exec "messenger_terminal";
exec "/search $1";
exec "0";
for i in {1...$3}
do
exec $2;
done
}
function troll {
sleep $1;
for i in {1..$2}
do
osascript -e 'display notification "you are useless"'
say "you are useless"
done
}
function touch-typing {
open -a 'Google Chrome' 'https://www.typingclub.com/sportal/program-3.game'
}
function keybr {
open -a 'Google Chrome' 'https://keybr.com'
}
function speedtest {
python /usr/local/marc/speedtest.py
}
function dl-music {
youtube-dl -ciw -x --audio-format "mp3" --audio-quality 0 -f bestaudio --embed-thumbnail -o '%(title)s.%(ext)s' --rm-cache-dir $*
}
function ytdl {
youtube-dl -ciw -x --audio-format 'mp3' --audio-quality 0 -f bestaudio --embed-thumbnail -o '%(title)s.%(ext)s' --rm-cache-dir
}
function weather {
curl wttr.in
}
function p {
cd ~/Programs/$@
}
function pj {
cd ~/git-projects/$@
}
+11
View File
@@ -0,0 +1,11 @@
build:
docker:
web: Dockerfile
config:
DJANGO_SETTINGS_MODULE: django_project.settings
run:
web: daphne django_project.asgi:application -b 0.0.0.0 -p $PORT -v2
release:
image: marcpartensky/website
command:
- python manage.py collectstatic --noinput
-63
View File
@@ -1,63 +0,0 @@
#!/usr/bin/env zsh
# It is inspired from https://gist.github.com/w3cj/76cd9fb9f346e153b6f0dc46fd025620
# xcode-select --install /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
#
case `uname` in
Darwin)
# commands for OS X go here
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update
brew install git
brew install alacritty
# brew cask install iterm2
brew install neovim
brew install pyenv
brew install node
brew install fortune
brew install cowsay
brew install ccat
brew install highlight
# brew install cmatrix tmatrix
brew install lolcat
brew install figlet
brew install toilet
brew install watch
brew install jq fzf peco #emoji completion
brew install emojify
# brew install vcprompt
# brew cask install spectacle
# brew cask install firefox
# install nvm/node
brew cask install rectangle
brew cask install alfred
;;
Linux)
# commands for Linux go here
;;
FreeBSD)
# commands for FreeBSD go here
;;
esac
# curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
# nvm install stable
# npm install -g lite-server eslint
# brew cask install visual-studio-code
# brew cask install hyperswitch
# dynamic history search
pip install percol
if [ -d "~/.config" ]; then
makedir ~/.config
fi
if [ -d "~/.config/nvim" ]; then
git clone https://github.com/MarcPartensky/nvim.git ~./config
fi
-2
View File
@@ -1,2 +0,0 @@
brew update
source ./task.sh
-127
View File
@@ -1,127 +0,0 @@
export DOTFILES_PATH=${0:a:h}
export PROGRAMS_PATH=$(readlink -f "$DOTFILES_PATH/..")
# $(readlink -f "$(which $0)/..")
# vim mode inside the terminal
set -o vi
set editing-mode vi
set keymap vi
set shiftwidth=4
set clipboard=unnamedplus
#\\\_ COMPLETIONS _///#
# zstyle :compinstall filename '/Users/fd0/.zshrc'
zstyle ':completion:*' list-colors "${(@s.:.)LS_COLORS}"
autoload -Uz compinit
compinit
autoload -Uz bashcompinit
bashcompinit
# The following lines were added by compinstall
# zstyle :compinstall filename '/Users/marcpartensky/.zshrc'
# autoload -Uz compinit
# compinit
# autocompletion
# source ~/.zsh-plugins/zsh-autocomplete/zsh-autocomplete.plugin.zsh
# zstyle ':autocomplete:*' config off
zstyle ':autocomplete:*' min-input 3
# pip zsh completion start
function _pip_completion {
local words cword
read -Ac words
read -cn cword
reply=( $( COMP_WORDS="$words[*]" \
COMP_CWORD=$(( cword-1 )) \
PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))
}
compctl -K _pip_completion pip3
# Antigen
ANTIGEN_CACHE=false
source ${0:a:h}/antigen.zsh
antigen theme romkatv/powerlevel10k
antigen theme eastwood
antigen theme kardan
antigen theme nicoulaj
# antigen theme candy
# antigen theme robbyrussell
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-syntax-highlighting
#antigen bundle soimort/translate-shell
antigen apply
bindkey '\t' autosuggest-accept
source ~/.antigen/bundles/zsh-users/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"
# ZSH_THEME="powerlevel10k/powerlevel10k"
# ZSH_THEME="eastwood"
# Deprecated
# export GREP_OPTIONS="--color=always"
# export GREP_COLORS="ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36"
# pyenv setup
eval "$(pyenv init -)"
source ${0:a:h}/exports.sh
source ${0:a:h}/aliases.sh
source ${0:a:h}/functions.sh
ln -snf ${0:a:h}/.zshenv ~
ln -snf ${0:a:h}/.p10k.zsh ~
source ${0:a:h}/.zshenv
source ${0:a:h}/.p10k.zsh
# When started as 'evim', evim.vim will already have done these settings, bail out.
# if v:progname =~? "evim"
# finish
# endif
# Get the defaults that most users want.
# source $VIMRUNTIME/defaults.vim
# if has("vms"); then
# set nobackup
# do not keep a backup file, use versions instead
# else
# set backup
# keep a backup file (restore to previous version)
# if has('persistent_undo'); then
# set undofile # keep an undo file (undo changes after closing)
# fi
# fi
# if [&t_Co > 2 -o has("gui_running")]; then
# Switch on highlighting the last used search pattern.
# set hlsearch
# fi
# Put these in an autocmd group, so that we can delete them easily.
# augroup vimrcEx
# au!
# For all text files set 'textwidth' to 78 characters.
# autocmd FileType text setlocal textwidth=78
# augroup END
# Add optional packages.
# The matchit plugin makes the % command work better, but it is not backwards
# compatible.
# The ! means the package won't be loaded right away but when plugins are
# loaded during initialization.
# if [has('syntax') -a has('eval')]; then
# packadd! matchit
# fi
# prompt_context() {
# if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
# prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
# fi
# }
BIN
View File
Binary file not shown.
+47
View File
@@ -0,0 +1,47 @@
upstream simple_academy_server {
server unix:/opt/website/run/gunicorn.sock fail_timeout=0;
}
# server {
# server_name marcpartensky.com;
# listen 80;
# return 301 https://marcpartensky.com$request_uri;
# }
server {
server_name marcpartensky.com 82.165.57.233;
listen 443 ssl;
charset utf-8;
ssl_certificate /etc/letsencrypt/live/marcpartensky.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/marcpartensky.com/privkey.pem;
#Max upload size
client_max_body_size 400M; # adjust to taste
# Django media
location /media {
alias /root/git/website/media; # your Django project's media files
}
location /assets {
alias /root/git/website/static; # your Django project's static files
}
# Finally, send all non-media requests to the Django server.
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://marcpartensky.com;
break;
}
}
# root [path]/bar;
}
+1109
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
{
"name": "websiteofmarcpartensky",
"version": "1.0.0",
"description": "website of marc partensky",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/marcpartensky/website.git"
},
"keywords": [
"website",
"of",
"marc",
"partensky"
],
"author": "Marc Partensky",
"license": "ISC",
"bugs": {
"url": "https://github.com/marcpartensky/website/issues"
},
"homepage": "https://github.com/marcpartensky/website#readme",
"dependencies": {
"markdown-styles": "^3.1.10"
}
}
Generated
+2045
View File
File diff suppressed because it is too large Load Diff
+40
View File
@@ -0,0 +1,40 @@
[tool.poetry]
name = "website"
version = "0.1.0"
description = ""
authors = ["Marc Partensky <marc.partensky@gmail.com>"]
[tool.poetry.dependencies]
python = "^3.7"
Django = "^4.0.4"
python-dotenv = "^0.20.0"
django-heroku = "^0.3.1"
channels = "^3.0.4"
django-storages = "^1.12.3"
django-crispy-forms = "^1.14.0"
django-extensions = "^3.1.5"
django-allauth = "^0.50.0"
django-compressor = "^4.0"
django-markdown-view = "^0.0.5"
django-mdeditor = "^0.1.20"
django-ftpserver = "^0.8.0"
django-sql-explorer = "^2.4.1"
django-q = "^1.3.9"
django-robots = "^5.0"
shortuuid = "^1.0.9"
django-shortuuidfield = "^0.1.3"
django-jsonfield-backport = "^1.0.5"
Pillow = "^9.1.1"
rich = "^12.4.4"
djangorestframework = "^3.13.1"
PyYAML = "^6.0"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
pylint = "^2.13.9"
neovim = "^0.3.1"
black = "^22.3.0"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
+477
View File
@@ -0,0 +1,477 @@
ansicon==1.89.0; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" and platform_system == "Windows" \
--hash=sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec \
--hash=sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1
arrow==1.2.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.6" \
--hash=sha256:d622c46ca681b5b3e3574fcb60a04e5cc81b9625112d5fb2b44220c36c892177 \
--hash=sha256:05caf1fd3d9a11a1135b2b6f09887421153b94558e5ef4d090b567b47173ac2b
asgiref==3.5.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.8" \
--hash=sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4 \
--hash=sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424
attrs==21.4.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \
--hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd
autobahn==22.4.2; python_version >= "3.7" \
--hash=sha256:57b7acf228d50d83cf327372b889e2a168a869275b26e17917ed0b4cf4d823a6
automat==20.2.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111 \
--hash=sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33
blessed==1.19.1; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" \
--hash=sha256:63b8554ae2e0e7f43749b6715c734cc8f3883010a809bf16790102563e6cf25b \
--hash=sha256:9a0d099695bf621d4680dd6c73f6ad547f6a3442fbdbe80c4b1daa1edbc492fc
certifi==2022.5.18.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" \
--hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a \
--hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7
cffi==1.15.0; python_version >= "3.7" \
--hash=sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962 \
--hash=sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0 \
--hash=sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14 \
--hash=sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474 \
--hash=sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6 \
--hash=sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27 \
--hash=sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023 \
--hash=sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2 \
--hash=sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e \
--hash=sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7 \
--hash=sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3 \
--hash=sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c \
--hash=sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962 \
--hash=sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382 \
--hash=sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55 \
--hash=sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0 \
--hash=sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e \
--hash=sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39 \
--hash=sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc \
--hash=sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032 \
--hash=sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8 \
--hash=sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605 \
--hash=sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e \
--hash=sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc \
--hash=sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636 \
--hash=sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4 \
--hash=sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997 \
--hash=sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b \
--hash=sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2 \
--hash=sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7 \
--hash=sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66 \
--hash=sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029 \
--hash=sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880 \
--hash=sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20 \
--hash=sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024 \
--hash=sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e \
--hash=sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728 \
--hash=sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6 \
--hash=sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c \
--hash=sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443 \
--hash=sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a \
--hash=sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37 \
--hash=sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a \
--hash=sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e \
--hash=sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796 \
--hash=sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df \
--hash=sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8 \
--hash=sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a \
--hash=sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139 \
--hash=sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954
channels==3.0.4; python_version >= "3.6" \
--hash=sha256:0ff0422b4224d10efac76e451575517f155fe7c97d369b5973b116f22eeaf86c \
--hash=sha256:fdd9a94987a23d8d7ebd97498ed8b8cc83163f37e53fc6c85098aba7a3bb8b75
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3" \
--hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \
--hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df
commonmark==0.9.1; python_full_version >= "3.6.3" and python_full_version < "4.0.0" \
--hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 \
--hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60
constantly==15.1.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d \
--hash=sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35
cryptography==37.0.2 \
--hash=sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181 \
--hash=sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336 \
--hash=sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004 \
--hash=sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe \
--hash=sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804 \
--hash=sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c \
--hash=sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178 \
--hash=sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a \
--hash=sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15 \
--hash=sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0 \
--hash=sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d \
--hash=sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9 \
--hash=sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1 \
--hash=sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023 \
--hash=sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06 \
--hash=sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717 \
--hash=sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f \
--hash=sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982 \
--hash=sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4 \
--hash=sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de \
--hash=sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452 \
--hash=sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e
daphne==3.0.2; python_version >= "3.6" \
--hash=sha256:a9af943c79717bc52fe64a3c236ae5d3adccc8b5be19c881b442d2c3db233393 \
--hash=sha256:76ffae916ba3aa66b46996c14fa713e46004788167a4873d647544e750e0e99f
defusedxml==0.7.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" \
--hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 \
--hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69
dj-database-url==0.5.0 \
--hash=sha256:4aeaeb1f573c74835b0686a2b46b85990571159ffc21aa57ecd4d1e1cb334163 \
--hash=sha256:851785365761ebe4994a921b433062309eb882fedd318e1b0fcecc607ed02da9
django-allauth==0.50.0 \
--hash=sha256:ee3a174e249771caeb1d037e64b2704dd3c56cfec44f2058fae2214b224d35e8
django-appconf==1.0.5; python_version >= "3.6" \
--hash=sha256:be3db0be6c81fa84742000b89a81c016d70ae66a7ccb620cdef592b1f1a6aaa4 \
--hash=sha256:ae9f864ee1958c815a965ed63b3fba4874eec13de10236ba063a788f9a17389d
django-compressor==4.0 \
--hash=sha256:b4fe15cc23bf39420b37cb0030572bd0971104ca1ec3764f502c0f179e576dff \
--hash=sha256:1db91b6d04293636a68bd1328dc7bb90d636b0295f67b1cc6d4fa102b9fd25f6
django-crispy-forms==1.14.0; python_version >= "3.7" \
--hash=sha256:35887b8851a931374dd697207a8f56c57a9c5cb9dbf0b9fa54314da5666cea5b \
--hash=sha256:bc4d2037f6de602d39c0bc452ac3029d1f5d65e88458872cc4dbc01c3a400604
django-extensions==3.1.5; python_version >= "3.6" \
--hash=sha256:28e1e1bf49f0e00307ba574d645b0af3564c981a6dfc87209d48cb98f77d0b1a \
--hash=sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069
django-ftpserver==0.8.0 \
--hash=sha256:d38d43f34704b9efa6b3c004a780e09428d4afcc98d15efa37509ff45af62514 \
--hash=sha256:7ec824bd9bdc2528c704623e84fd3447b4cddbc9e96def30095386b29df63067
django-heroku==0.3.1 \
--hash=sha256:6af4bc3ae4a9b55eaad6dbe5164918982d2762661aebc9f83d9fa49f6009514e \
--hash=sha256:2bc690aab89eedbe01311752320a9a12e7548e3b0ed102681acc5736a41a4762
django-jsonfield-backport==1.0.5; python_version >= "3.5" \
--hash=sha256:40c39b1f1bade47bd2715664de14983f2e0a96175f65abbad2688029c255c685 \
--hash=sha256:727b402bad632e38539b489e48aefa6ffe03cedba76ac1f11b455423b3225a2d
django-markdown-view==0.0.5 \
--hash=sha256:87b453b74fe62cce3f8c3782b98951b1f82ad8253f330ddea719bace8a300101 \
--hash=sha256:8476ba884d3653ec438a4ac8c2c0db62693b162d1e7758555795aa21ff989d76
django-mdeditor==0.1.20 \
--hash=sha256:d1f3b735b6202b8820f10e024a5aa28c5b948897ee7a8dbb84558df75339827e
django-picklefield==3.0.1; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3" \
--hash=sha256:15ccba592ca953b9edf9532e64640329cd47b136b7f8f10f2939caa5f9ce4287 \
--hash=sha256:3c702a54fde2d322fe5b2f39b8f78d9f655b8f77944ab26f703be6c0ed335a35
django-q==1.3.9; python_full_version >= "3.6.2" and python_version < "4" \
--hash=sha256:5c6b4d530aa3aabf9c6aa57376da1ca2abf89a1562b77038b7a04e52a4a0a91b \
--hash=sha256:1b74ce3a8931990b136903e3a7bc9b07243282a2b5355117246f05ed5d076e68
django-robots==5.0; python_version >= "3.7" \
--hash=sha256:f5817975a9e3b082440a81396111d8a6671b54f6aa11349847554bd1beebd959
django-shortuuidfield==0.1.3 \
--hash=sha256:a292c0fe5538abe947b131e2b914edd9ac44afcc6a40eaec71448e6231a3ef00
django-sql-explorer==2.4.1; python_version >= "3.6" \
--hash=sha256:fd3b92b5fdbcb4ecda27454eb70510a44f29176ca43c04dee704503e53b90cf3 \
--hash=sha256:d9a36461c70184fa1f54d038b20d6b08b40bb1709448a827123ecee5cc6dbbab
django-storages==1.12.3; python_version >= "3.5" \
--hash=sha256:a475edb2f0f04c4f7e548919a751ecd50117270833956ed5bd585c0575d2a5e7 \
--hash=sha256:204a99f218b747c46edbfeeb1310d357f83f90fa6a6024d8d0a3f422570cee84
django==4.0.4; python_version >= "3.8" \
--hash=sha256:07c8638e7a7f548dc0acaaa7825d84b7bd42b10e8d22268b3d572946f1e9b687 \
--hash=sha256:4e8177858524417563cc0430f29ea249946d831eacb0068a1455686587df40b5
djangorestframework==3.13.1; python_version >= "3.6" \
--hash=sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa \
--hash=sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee
hyperlink==21.0.0; python_full_version >= "3.6.7" and python_version >= "3.7" \
--hash=sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 \
--hash=sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b
idna==3.3; python_full_version >= "3.6.7" and python_version >= "3.7" \
--hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
--hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d
incremental==21.3.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 \
--hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57
jinxed==1.2.0; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" and platform_system == "Windows" \
--hash=sha256:cfc2b2e4e3b4326954d546ba6d6b9a7a796ddcb0aef8d03161d005177eb0d48b \
--hash=sha256:032acda92d5c57cd216033cbbd53de731e6ed50deb63eb4781336ca55f72cda5
markdown==3.3.7; python_version >= "3.6" \
--hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621 \
--hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \
--hash=sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe \
--hash=sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2
pillow==9.1.1; python_version >= "3.7" \
--hash=sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe \
--hash=sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e \
--hash=sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602 \
--hash=sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530 \
--hash=sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2 \
--hash=sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a \
--hash=sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c \
--hash=sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108 \
--hash=sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b \
--hash=sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d \
--hash=sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84 \
--hash=sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4 \
--hash=sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578 \
--hash=sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9 \
--hash=sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf \
--hash=sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b \
--hash=sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546 \
--hash=sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f \
--hash=sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a \
--hash=sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1 \
--hash=sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54 \
--hash=sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf \
--hash=sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92 \
--hash=sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a \
--hash=sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251 \
--hash=sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d \
--hash=sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1 \
--hash=sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601 \
--hash=sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45 \
--hash=sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c \
--hash=sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6 \
--hash=sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098 \
--hash=sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c \
--hash=sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd \
--hash=sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340 \
--hash=sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765 \
--hash=sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8 \
--hash=sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0
psycopg2==2.9.3; python_version >= "3.6" \
--hash=sha256:083707a696e5e1c330af2508d8fab36f9700b26621ccbcb538abe22e15485362 \
--hash=sha256:d3ca6421b942f60c008f81a3541e8faf6865a28d5a9b48544b0ee4f40cac7fca \
--hash=sha256:9572e08b50aed176ef6d66f15a21d823bb6f6d23152d35e8451d7d2d18fdac56 \
--hash=sha256:a81e3866f99382dfe8c15a151f1ca5fde5815fde879348fe5a9884a7c092a305 \
--hash=sha256:cb10d44e6694d763fa1078a26f7f6137d69f555a78ec85dc2ef716c37447e4b2 \
--hash=sha256:4295093a6ae3434d33ec6baab4ca5512a5082cc43c0505293087b8a46d108461 \
--hash=sha256:34b33e0162cfcaad151f249c2649fd1030010c16f4bbc40a604c1cb77173dcf7 \
--hash=sha256:0762c27d018edbcb2d34d51596e4346c983bd27c330218c56c4dc25ef7e819bf \
--hash=sha256:8cf3878353cc04b053822896bc4922b194792df9df2f1ad8da01fb3043602126 \
--hash=sha256:06f32425949bd5fe8f625c49f17ebb9784e1e4fe928b7cce72edc36fb68e4c0c \
--hash=sha256:8e841d1bf3434da985cc5ef13e6f75c8981ced601fd70cc6bf33351b91562981
pyasn1-modules==0.2.8; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \
--hash=sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199 \
--hash=sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405 \
--hash=sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb \
--hash=sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8 \
--hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 \
--hash=sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d \
--hash=sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45 \
--hash=sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4 \
--hash=sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811 \
--hash=sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed \
--hash=sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0 \
--hash=sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd
pyasn1==0.4.8; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3 \
--hash=sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf \
--hash=sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00 \
--hash=sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8 \
--hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \
--hash=sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86 \
--hash=sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7 \
--hash=sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576 \
--hash=sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12 \
--hash=sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2 \
--hash=sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359 \
--hash=sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776 \
--hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0" \
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
pyftpdlib==1.5.6 \
--hash=sha256:fda655d81f29af52885ca2f8a2704134baed540f16d66a0b26e8fdfafd12db5e
pygments==2.12.0; python_full_version >= "3.6.3" and python_full_version < "4.0.0" and python_version >= "3.6" \
--hash=sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519 \
--hash=sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb
pyjwt==2.4.0; python_version >= "3.6" \
--hash=sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf \
--hash=sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba
pyopenssl==22.0.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0 \
--hash=sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf
python-dateutil==2.8.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.6" \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
--hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
python-dotenv==0.20.0; python_version >= "3.5" \
--hash=sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f \
--hash=sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938
python3-openid==3.2.0 \
--hash=sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf \
--hash=sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b
pytz==2022.1; python_version >= "3.6" \
--hash=sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c \
--hash=sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7
pyyaml==6.0; python_version >= "3.6" \
--hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \
--hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \
--hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \
--hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \
--hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 \
--hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \
--hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \
--hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \
--hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \
--hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \
--hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \
--hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \
--hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \
--hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \
--hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \
--hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \
--hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \
--hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \
--hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \
--hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \
--hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \
--hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \
--hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \
--hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \
--hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \
--hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \
--hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \
--hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \
--hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \
--hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \
--hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \
--hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \
--hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2
rcssmin==1.1.0 \
--hash=sha256:2211a5c91ea14a5937b57904c9121f8bfef20987825e55368143da7d25446e3b \
--hash=sha256:7085d1b51dd2556f3aae03947380f6e9e1da29fb1eeadfa6766b7f105c54c9ff \
--hash=sha256:1512223b6a687bb747e4e531187bd49a56ed71287e7ead9529cbaa1ca4718a0a \
--hash=sha256:6158d0d86cd611c5304d738dc3d6cfeb23864dd78ad0d83a633f443696ac5d77 \
--hash=sha256:0a6aae7e119509445bf7aa6da6ca0f285cc198273c20f470ad999ff83bbadcf9 \
--hash=sha256:506e33ab4c47051f7deae35b6d8dbb4a5c025f016e90a830929a1ecc7daa1682 \
--hash=sha256:352dd3a78eb914bb1cb269ac2b66b3154f2490a52ab605558c681de3fb5194d2 \
--hash=sha256:30f5522285065cae0164d20068377d84b5d10b414156115f8729b034d0ea5e8b \
--hash=sha256:49807735f26f59404194f1e6f93254b6d5b6f7748c2a954f4470a86a40ff4c13 \
--hash=sha256:f1a37bbd36b050813673e62ae6464467548628690bf4d48a938170e121e8616e \
--hash=sha256:ddff3a41611664c7f1d9e3d8a9c1669e0e155ac0458e586ffa834dc5953e7d9f \
--hash=sha256:8b659a88850e772c84cfac4520ec223de6807875e173d8ef3248ab7f90876066 \
--hash=sha256:1d7c2719d014e4e4df4e33b75ae8067c7e246cf470eaec8585e06e2efac7586c \
--hash=sha256:37f1242e34ca273ed2c26cf778854e18dd11b31c6bfca60e23fce146c84667c1 \
--hash=sha256:f31c82d06ba2dbf33c20db9550157e80bb0c4cbd24575c098f0831d1d2e3c5df \
--hash=sha256:7da63fee37edf204bbd86785edb4d7491642adbfd1d36fd230b7ccbbd8db1a6f \
--hash=sha256:c28b9eb20982b45ebe6adef8bd2547e5ed314dafddfff4eba806b0f8c166cfd1 \
--hash=sha256:32ccaebbbd4d56eab08cf26aed36f5d33389b9d1d3ca1fecf53eb6ab77760ddf \
--hash=sha256:7c44002b79f3656348196005b9522ec5e04f182b466f66d72b16be0bd03c13d8 \
--hash=sha256:27fc400627fd3d328b7fe95af2a01f5d0af6b5af39731af5d071826a1f08e362
redis==3.5.3; python_full_version >= "3.6.2" and python_version < "4" \
--hash=sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24 \
--hash=sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2
requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" \
--hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a \
--hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5
requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" \
--hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d \
--hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61
rich==12.4.4; python_full_version >= "3.6.3" and python_full_version < "4.0.0" \
--hash=sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec \
--hash=sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2
rjsmin==1.2.0 \
--hash=sha256:e18fe1a610fb105273bb369f61c2b0bd9e66a3f0792e27e4cac44e42ace1968b \
--hash=sha256:6c395ffc130332cca744f081ed5efd5699038dcb7a5d30c3ff4bc6adb5b30a62 \
--hash=sha256:3b14f4c2933ec194eb816b71a0854ce461b6419a3d852bf360344731ab28c0a6 \
--hash=sha256:54fc30519365841b27556ccc1cb94c5b4413c384ff6d467442fddba66e2e325a \
--hash=sha256:40e7211a25d9a11ac9ff50446e41268c978555676828af86fa1866615823bfff \
--hash=sha256:99e5597a812b60058baa1457387dc79cca7d273b2a700dc98bfd20d43d60711d \
--hash=sha256:993935654c1311280e69665367d7e6ff694ac9e1609168cf51cae8c0307df0db \
--hash=sha256:c81229ffe5b0a0d5b3b5d5e6d0431f182572de9e9a077e85dbae5757db0ab75c \
--hash=sha256:1c93b29fd725e61718299ffe57de93ff32d71b313eaabbfcc7bd32ddb82831d5 \
--hash=sha256:38a4474ed52e1575fb9da983ec8657faecd8ab3738508d36e04f87769411fd3d \
--hash=sha256:1622fbb6c6a8daaf77da13cc83356539bfe79c1440f9664b02c7f7b150b9a18e \
--hash=sha256:4387a00777faddf853eebdece9f2e56ebaf243c3f24676a9de6a20c5d4f3d731 \
--hash=sha256:86c4da7285ddafe6888cb262da563570f28e4a31146b5164a7a6947b1222196b \
--hash=sha256:d63e193a2f932a786ae82068aa76d1d126fcdff8582094caff9e5e66c4dcc124 \
--hash=sha256:05efa485dfddb6418e3b86d8862463aa15641a61f6ae05e7e6de8f116ee77c69 \
--hash=sha256:b6a7c8c8d19e154334f640954e43e57283e87bb4a2f6e23295db14eea8e9fc1d \
--hash=sha256:2ed83aca637186bafdc894b4b7fc3657e2d74014ccca7d3d69122c1e82675216 \
--hash=sha256:41c7c3910f7b8816e37366b293e576ddecf696c5f2197d53cf2c1526ac336646 \
--hash=sha256:8944a8a55ac825b8e5ec29f341ecb7574697691ef416506885898d2f780fb4ca \
--hash=sha256:6c529feb6c400984452494c52dd9fdf59185afeacca2afc5174a28ab37751a1b
service-identity==21.1.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34 \
--hash=sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db
shortuuid==1.0.9; python_version >= "3.5" \
--hash=sha256:b2bb9eb7773170e253bb7ba25971023acb473517a8b76803d9618668cb1dd46f \
--hash=sha256:459f12fa1acc34ff213b1371467c0325169645a31ed989e268872339af7563d5
six==1.16.0; python_full_version >= "3.6.7" and python_version < "4" and python_version >= "3.6" \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926
sqlparse==0.4.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.8" \
--hash=sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d \
--hash=sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae
twisted-iocpsupport==1.0.2; python_full_version >= "3.6.7" and python_version >= "3.6" and platform_system == "Windows" \
--hash=sha256:72068b206ee809c9c596b57b5287259ea41ddb4774d86725b19f35bf56aa32a9 \
--hash=sha256:985c06a33f5c0dae92c71a036d1ea63872ee86a21dd9b01e1f287486f15524b4 \
--hash=sha256:81b3abe3527b367da0220482820cb12a16c661672b7bcfcde328902890d63323 \
--hash=sha256:9dbb8823b49f06d4de52721b47de4d3b3026064ef4788ce62b1a21c57c3fff6f \
--hash=sha256:b9fed67cf0f951573f06d560ac2f10f2a4bbdc6697770113a2fc396ea2cb2565 \
--hash=sha256:b76b4eed9b27fd63ddb0877efdd2d15835fdcb6baa745cb85b66e5d016ac2878 \
--hash=sha256:851b3735ca7e8102e661872390e3bce88f8901bece95c25a0c8bb9ecb8a23d32 \
--hash=sha256:bf4133139d77fc706d8f572e6b7d82871d82ec7ef25d685c2351bdacfb701415 \
--hash=sha256:306becd6e22ab6e8e4f36b6bdafd9c92e867c98a5ce517b27fdd27760ee7ae41 \
--hash=sha256:3c61742cb0bc6c1ac117a7e5f422c129832f0c295af49e01d8a6066df8cfc04d \
--hash=sha256:b435857b9efcbfc12f8c326ef0383f26416272260455bbca2cd8d8eca470c546 \
--hash=sha256:7d972cfa8439bdcb35a7be78b7ef86d73b34b808c74be56dfa785c8a93b851bf
twisted==22.4.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:f9f7a91f94932477a9fc3b169d57f54f96c6e74a23d78d9ce54039a7f48928a2 \
--hash=sha256:a047990f57dfae1e0bd2b7df2526d4f16dcdc843774dc108b78c52f2a5f13680
txaio==22.2.1; python_version >= "3.7" \
--hash=sha256:41223af4a9d5726e645a8ee82480f413e5e300dd257db94bc38ae12ea48fb2e5 \
--hash=sha256:2e4582b70f04b2345908254684a984206c0d9b50e3074a24a4c55aba21d24d01
typing-extensions==4.2.0; python_full_version >= "3.6.7" and python_version >= "3.7" \
--hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \
--hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376
tzdata==2022.1; sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.6.2" and python_version < "4" \
--hash=sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9 \
--hash=sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3
urllib3==1.26.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" \
--hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
--hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" \
--hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \
--hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83
whitenoise==6.1.0; python_version >= "3.7" \
--hash=sha256:2067fe9008a3cd7d0d75f75c9240b54f5f59996ca285cbeab18fc1e89949e30d \
--hash=sha256:6ccc6d1ad6fb688a398ea65d97db47f018ea0be7da75e146e8f2e837a04ba590
zope.interface==5.4.0; python_full_version >= "3.6.7" and python_version >= "3.6" \
--hash=sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7 \
--hash=sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021 \
--hash=sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192 \
--hash=sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a \
--hash=sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531 \
--hash=sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325 \
--hash=sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155 \
--hash=sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263 \
--hash=sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959 \
--hash=sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e \
--hash=sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c \
--hash=sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702 \
--hash=sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f \
--hash=sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05 \
--hash=sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004 \
--hash=sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117 \
--hash=sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8 \
--hash=sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63 \
--hash=sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f \
--hash=sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920 \
--hash=sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46 \
--hash=sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc \
--hash=sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9 \
--hash=sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2 \
--hash=sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78 \
--hash=sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1 \
--hash=sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e \
--hash=sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b \
--hash=sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f \
--hash=sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d \
--hash=sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8 \
--hash=sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf \
--hash=sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7 \
--hash=sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94 \
--hash=sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3 \
--hash=sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e \
--hash=sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7 \
--hash=sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120 \
--hash=sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48 \
--hash=sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4 \
--hash=sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb \
--hash=sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54 \
--hash=sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4 \
--hash=sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d \
--hash=sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83 \
--hash=sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25 \
--hash=sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1 \
--hash=sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c \
--hash=sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e \
--hash=sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09 \
--hash=sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e
Executable
+50
View File
@@ -0,0 +1,50 @@
#!/bin/sh
source .env
run_bg() {
pipenv run daphne -p $1 django_project.asgi:application > /dev/null &
}
mysql() {
echo -e "Starting \e[92mMySQL\e[0m"
docker-compose up -d mysql
}
postgres() {
echo -e "Starting \e[92mPostgreSQL\e[0m"
docker-compose up -d postgres
}
redis() {
echo -e "Starting \e[92mRedis\e[0m"
docker-compose up -d redis
}
django() {
echo -e "Starting \e[92mDjango\e[0m"
# ./manage.py runserver 0.0.0.0:8000
# daphne -p 8000 -b 0.0.0.0 django_project.asgi:application
pipenv run daphne -e "ssl:${PORT}:privateKey=${KEY}:certKey=${CERT}" django_project.asgi:application
}
ftp() {
echo -e "Starting \e[92mFTP Server\e[0m"
pipenv run ./manage.py ftpserver $FTP_URL
}
all() {
ftp &
up
down
}
updatepip() {
git pull
pipenv run pip install -U pip
pipenv run pip install -r requirements.txt -U
npm update
}
lock() {
pipenv lock --pre --clear
}
+1
View File
@@ -0,0 +1 @@
python-3.7.7
+1
View File
@@ -0,0 +1 @@
__version__ = '0.1.0'
View File
+6
View File
@@ -0,0 +1,6 @@
from django.contrib import admin
from .models import MarkdownModel, NotificationModel, DataModel
admin.site.register(MarkdownModel)
admin.site.register(NotificationModel)
admin.site.register(DataModel)
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class ApiConfig(AppConfig):
name = "api"
+34
View File
@@ -0,0 +1,34 @@
from django import forms
from .models import MarkdownModel
from todo.models import Todo
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
class UploadMarkdownForm(forms.ModelForm):
class Meta:
model = MarkdownModel
fields = (
"title",
"file",
)
class TodoForm(forms.ModelForm):
"""Form of a todo."""
class Meta:
model = Todo
fields = (
"content",
"title",
"duration",
"parent",
"dependencies"
)
# def save(self, *args, **kwargs):
# print('saving model somewhere')
# print(args, kwargs)
# return super().save(*args, **kwargs)
+32
View File
@@ -0,0 +1,32 @@
# Generated by Django 3.0.1 on 2020-11-15 22:17
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="MarkdownModel",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=80)),
("file", models.FileField(upload_to="markdown/")),
],
options={
"ordering": ["title"],
},
),
]
@@ -0,0 +1,23 @@
# Generated by Django 3.1.7 on 2021-10-25 16:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='NotificationModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('message', models.TextField()),
('source', models.GenericIPAddressField()),
('timestamp', models.DateTimeField(auto_now_add=True)),
('seen', models.BooleanField(default=False)),
],
),
]
+23
View File
@@ -0,0 +1,23 @@
# Generated by Django 3.2.11 on 2022-01-30 15:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0002_notificationmodel'),
]
operations = [
migrations.CreateModel(
name='DataModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.JSONField()),
('source', models.GenericIPAddressField()),
('view_count', models.PositiveIntegerField(default=0)),
('created', models.DateTimeField(auto_now_add=True)),
],
),
]
View File
+41
View File
@@ -0,0 +1,41 @@
from django.db import models
class MarkdownModel(models.Model):
"""A model to store markdown files"""
title = models.CharField(max_length=80)
file = models.FileField(upload_to="markdown/")
class Meta:
ordering = ["title"]
def __str__(self):
return f"{self.title}"
# def save(self, *args, **kwargs):
# print('saving model somewhere')
# print(args, kwargs)
# return super().save(*args, **kwargs)
class NotificationModel(models.Model):
"""A model that represents a notification."""
message = models.TextField()
source = models.GenericIPAddressField()
timestamp = models.DateTimeField(auto_now_add=True)
seen = models.BooleanField(default=False)
def __str__(self):
"""Return the notification sent."""
return f"{self.message}"
class DataModel(models.Model):
"""A model that represents data sent by either POST or GET requests."""
content = models.JSONField()
source = models.GenericIPAddressField()
view_count = models.PositiveIntegerField(default=0)
created = models.DateTimeField(auto_now_add=True)
+5
View File
@@ -0,0 +1,5 @@
<form method ='post' enctype ="multipart/form-data">
{% csrf_token %}
{{form}}
<input type="submit" value = "Submit">
</form>
@@ -0,0 +1 @@
{{ markdown_object.file.url }}
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+24
View File
@@ -0,0 +1,24 @@
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("test", views.test, name="test"),
path("random", views.random_req, name="random"),
path("addition", views.addition, name="addition"),
path("example", views.ExampleView.as_view(), name="example"),
path("upload2/", views.FileUploadView.as_view(), name="upload"),
path("upload/", views.upload_file, name="upload"),
path("upload-markdown/", views.upload_markdown, name="upload-markdown"),
path("view-markdown/", views.view_markdown, name="view-markdown"),
# path('user/create/', views.user.create, name="user-create"),
# path('<str:room_name>/', views.room, name='room'),
path("login", views.login, name="api-login"),
path("python/<str:cmd>", views.python, name="python"),
path("todo", views.todo_index, name="api-todo-index"),
path("todo/<str:id>", views.todo, name="api-todo"),
path("port/<int:n>", views.port, name="port"),
path("port", views.port, name="port"),
path("store", views.store, name="store"),
path("store/<int:id>", views.read_store, name="read-store"),
]
+306
View File
@@ -0,0 +1,306 @@
"""API that doesn't necessarily provide a gui interface."""
import os
import sys
import json
import html
import random
import urllib
import subprocess
from io import StringIO
from django.shortcuts import render
from django.http import (
HttpResponse,
HttpRequest,
HttpResponseBadRequest,
JsonResponse,
HttpResponseRedirect,
)
from django.core.exceptions import PermissionDenied
from django.forms.models import model_to_dict
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser, FileUploadParser
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from .forms import UploadFileForm, UploadMarkdownForm, TodoForm
from .models import MarkdownModel, NotificationModel, DataModel
from todo.models import Todo
def index(request):
return render(request, "index/index.html", {})
def test(request):
return HttpResponse("test")
def addition(request):
"""Add a and b numbers together."""
a = int(request.GET.get("a"))
b = int(request.GET.get("b"))
return HttpResponse(str(a + b))
def random_req(request):
"""Return a random number."""
return HttpResponse(random.randint(0, 1000))
class ExampleView(APIView):
"""A view that can accept POST requests with JSON content."""
parser_classes = [JSONParser]
def post(self, request, format=None):
print("receiving stuff")
print(request.data)
return Response({"received data": request.data})
class FileUploadView(APIView):
"""A view that can receive files."""
parser_classes = [FileUploadParser]
def put(self, request, filename, format=None):
print(request.data)
# file_obj = request.data['file']
# print('received your file')
# print(file_obj)
# ...
# do some stuff with uploaded file
# ...
return Response(status=204)
# @csrf_exempt
# def as_view(self, *args, **kwargs):
# super().as_view(self, *args, **kwargs)
@csrf_exempt
def upload_file(request):
"""Another view that can receive files."""
if request.method == "POST":
print("pass")
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
print(request.FILES["file"])
# handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect("/success/url/")
else:
print("did not pass")
form = UploadFileForm()
return HttpResponse("response")
# return render(request, 'upload.html', {'form': form})
@csrf_exempt
def upload_markdown(request):
"""Markdown Uploader"""
print("received markdown")
if request.method == "POST":
form = UploadMarkdownForm(request.POST, request.FILES)
file = str(form.files["file"])
filepath = f"{os.getcwd()}/media/article/{file}"
print("trying to post:", filepath)
content = form.files["file"].file.read().decode("utf-8")
lines = content.split("\n")
if lines[0].startswith("#!"):
lines = lines[1:]
content = "\n".join(lines).strip()
with open(filepath, "w") as f:
f.write(content)
if form.is_valid():
print(form)
form.save()
return HttpResponse("success")
else:
return HttpResponse("invalid form")
elif request.method == "GET":
form = UploadMarkdownForm()
context = {
"form": form,
}
return render(request, "api/upload.html", context)
return HttpResponse("only get and post methods are allowed")
def view_markdown(request):
context = {"markdown_object": MarkdownModel.objects.all()[0]}
return render(request, "api/view-markdown.html", context)
users = {}
@csrf_exempt
def login(request):
"""Log api user view."""
print(request.POST)
user = request.POST["user"]
password = request.POST["password"]
print(user, password)
print(os.environ["WEBSITE_USER"], os.environ["WEBSITE_PASSWORD"])
if (user, password) != (os.environ["WEBSITE_USER"], os.environ["WEBSITE_PASSWORD"]):
raise PermissionDenied
token = int(hash(random.random()) / 1000)
print(f"python-shell: {user} logs with {token}\n")
users[token] = dict(locals={}, python=False, name=user)
return HttpResponse('{"token":' + str(token) + "}")
class Capturing(list):
"""Capture print output and store it."""
def __enter__(self):
self._stdout = sys.stdout
sys.stdout = self._stringio = StringIO()
return self
def __exit__(self, *args):
self.extend(self._stringio.getvalue().splitlines())
del self._stringio # free up some memory
sys.stdout = self._stdout
@csrf_exempt
def python(request, cmd: str):
"""Python view."""
cmd = html.unescape(cmd)
token = int(request.POST["token"])
user = users[token]
locals_ = user["locals"]
print(f"python: {user['name']} runs \"{cmd}\" given {locals_}")
try:
with Capturing() as out:
exec(cmd, globals(), locals_)
if not out:
try:
with Capturing() as out:
exec(f"print({cmd})", globals(), locals_)
except:
out = []
print(f"which returns {out}\n")
text = "\n".join([f"{line}" for line in out])
return HttpResponse(urllib.parse.quote(text))
except:
text = "\n".join([f"{line}" for line in out])
return HttpResponse(urllib.parse.quote(text), status=500)
@csrf_exempt
def todo_index(request: HttpRequest):
"""View todos or post new todo."""
if request.method == "GET":
todos = Todo.objects.all()
print(todos)
# serializer = SnippetSerializer(snippets, many=True)
# return JsonResponse(serializer.data, safe=False)
content = json.dumps(list(todos))
return HttpResponse(content)
elif request.method == "POST":
print(request)
form = TodoForm(request)
if form.is_valid():
form.save()
return HttpResponse("ok", status=200)
return HttpResponse("not", status=500)
# data = JSONParser().parse(request)
# print(data)
# serializer = SnippetSerializer(data=data)
# if serializer.is_valid():
# serializer.save()
# return JsonResponse(serializer.data, status=200)
# return JsonResponse(serializer.errors, status=400)
@csrf_exempt
def todo(request: HttpRequest, id: int):
"""View, update or delete existing todo."""
todo = Todo.objects.filter(id=id)
if request.method == "GET":
content = json.dumps(todo.__dict__)
return HttpResponse(content, mimetype="application/x-json")
elif request.method == "POST":
pass
data = JSONParser().parse(request)
return data
# return Json
@csrf_exempt
def port(request: HttpRequest, n: int = 1):
"""Return a random available port within a given range."""
port_min = os.environ.get("PORT_MIN") or 8000
port_max = os.environ.get("PORT_MAX") or 8099
cmd = f'bash -c "comm -23 <(seq {port_min} {port_max} '
cmd += "| sort) <(ss -Htan | awk '{print $4}' "
cmd += f"| cut -d':' -f2 | sort -u) | shuf | head -n {n}\""
print(cmd)
result = subprocess.check_output(cmd, shell=True)
print(result)
return HttpResponse(result)
@csrf_exempt
def notify(request: HttpRequest):
"""Notify me with a get request container
a get variable `message`."""
message = request.GET.get("message")
return HttpResponse("")
@csrf_exempt
def notifications(request: HttpRequest):
"""Return the list of notifications."""
notifications = NotificationModel.objects.filter(seen=False)
for notification in notifications:
notification.seen = True
notification.save()
return JsonResponse(notifications)
def get_client_ip(request: HttpRequest):
"""Get the ip addresse of a client."""
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for:
return x_forwarded_for.split(",")[-1].strip()
else:
return request.META.get("REMOTE_ADDR")
@csrf_exempt
def store(request: HttpRequest):
"""Store data sent."""
request_data: dict
if request.method == "POST":
request_data = request.POST
elif request.method == "GET":
request_data = {key: value[0] for key, value in request.GET.items()}
else:
return HttpResponseBadRequest("Only accept POST or GET requests.")
print(request_data)
data = DataModel(content=json.dumps(request_data), source=get_client_ip(request))
data.save()
print(data)
return JsonResponse(model_to_dict(data))
@csrf_exempt
def read_store(_: HttpRequest, id: int):
"""Read data in the store."""
data = DataModel.objects.get(pk=id)
data.view_count += 1
data.save()
print(data)
return HttpResponse(data.content, content_type="application/json")
View File
+177
View File
@@ -0,0 +1,177 @@
import re
def adapt(text, title, layout):
text = correct_assets(text, layout)
text = add_load_static(text)
text = add_meta_data(text)
text = correct_title(text, title)
text = add_icons(text)
text = add_back_to_articles(text)
# text = correct_links(text)
# text = correct_scripts(text)
text = add_mathjax(text)
text = add_plantuml(text)
text = add_back_to_top_button(text)
text = add_scroll_support(text)
text = correct_check(text)
return text
def add_load_static(text):
"""Add load static on top of the file."""
return "{% load static %}" + text
def add_back_to_articles(text):
text = text.replace(
'<div id="toc-inner">',
'<div id="toc-inner">\n\
<a class="back" class="container" href="{% url \'article\' %}"><p>Back to articles</p></a><div class="fade_rule"></div>',
)
return text
def correct_title(text, title):
"""Put the true title."""
pattern = re.compile(r"<title>(.*)</title>")
wrong_title = re.findall(pattern, text)[0]
text = text.replace(
f"<title>{wrong_title}</title>", f"<title>{title.capitalize()}</title>"
)
return text
def add_icons(text):
"""Add orchid icons in tabs."""
text = text.replace(
"</title>",
'</title>\n\
<link href="{% static \'home/assets/img/white-orchid.svg\' %}" rel="icon">\n\
<link href="{% static \'home/assets/img/black-orchid.svg\' %}" rel="apple-touch-icon">\n\
<link href="{% static \'article/assets/css/main.css\' %}" rel="stylesheet">',
)
return text
def correct_links(text):
"""Correct import links."""
pattern = re.compile(r"href=.assets\/(.*\.css)")
for file in re.findall(pattern, text):
print(file)
text = text.replace(
f'href="assets/{file}"',
"href=\"{% static 'article/assets/" + file + "' %}\"",
)
return text
def correct_scripts(text):
"""Correct import scripts."""
pattern = re.compile(r'src="assets\/(.*\.js)"')
for file in re.findall(pattern, text):
text = text.replace(
"</body>",
"<script src=\"{% static 'article/assets/"
+ file
+ "' %}\"></script>\n\
</body>",
)
return text
def correct_assets(text, layout):
"""Correct assets imports."""
# pattern = re.compile(r'([src|href].?=.?[\'|"]assets\/.*\.[js|css].?[\'|"])')
pattern = re.compile(r"(assets/.*\.[jc]ss?)")
for match in re.findall(pattern, text):
substitute = match.replace("assets", layout)
substitute = "{% static 'article/" + substitute + "' %}"
text = text.replace(match, substitute)
return text
def add_mathjax(text):
"""Add mathjax support for latex formulaes rendering."""
text = text.replace(
"</head>",
'<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML"></script>\n\
</head>',
)
return text
def add_plantuml(text):
"""Render plantuml diagrams."""
text = text.replace(
"</head>",
'<script src="https://cdn.jsdelivr.net/npm/node-plantuml@0.9.0/index.min.js"></script>\n\
</head>',
)
return text
def add_scroll_support(text):
"""Add scroll support."""
text = text.replace(
"</body>",
"<script src=\"{% static 'home/assets/vendor/jquery/jquery.min.js' %}\"></script>\n\
<script src=\"{% static 'home/assets/vendor/waypoints/jquery.waypoints.min.js' %}\"></script>\n\
<script src=\"{% static 'article/assets/js/main.js' %}\"></script>\n\
</body>",
)
return text
def correct_check(text):
"""Replace markdown check to checked buttons."""
text = text.replace("[ ]", '<input type="checkbox">')
text = text.replace("[x]", '<input type="checkbox" checked="">')
return text
def add_back_to_top_button(text):
"""Add back to top button."""
text = text.replace(
"</body>",
'</body>\n<a href="#" class="back-to-top" style="display: inline; \
position:fixed; right:15px; bottom:15px; z-index:99999;"> \
<i style="display: flex; align-items: center; justify-content: center; \
font-size: 24px; width: 40px; height: 40px; border-radius: 4px; \
background: #7cc576; color: #fff; transition: all 0.4s;" \
class="icofont-simple-up"></i></a>',
)
return text
def add_meta_data(text):
"""Add a like button for an article."""
text = text.replace(
"<body>",
"""<body>
<div style="clear: both;">
<div style="float: left">
{{ view_count }}
<span class="iconify" data-icon="carbon:view" data-inline="false"></span>
{{ like_count }}
<span class="iconify" data-icon="fluent-thumb-like-16-regular" data-inline="false"></span>
{{ dislike_count }}
<span class="iconify" data-icon="fluent:thumb-dislike-24-regular"data-inline="false"></span>
<script src="https://code.iconify.design/1/1.0.7/iconify.min.js"></script>
</div>
<div style="float: right">
<small style="text-align: right">{{ created }}</small>
{% if update_count > 0 %}
<small> V{{ update_count }}</small>
{% endif %}
</div>
</div>
""",
)
# text = text.replace('</body>',
# """
# <hr>
# created: {{ updated }}<br>
# </body>
# """)
return text
+5
View File
@@ -0,0 +1,5 @@
from django.contrib import admin
from . import models
admin.site.register(models.Article)
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class ArticleConfig(AppConfig):
name = "article"
+70
View File
@@ -0,0 +1,70 @@
"""Return the context of the articles."""
import os
import random
from . import models
# from home.context import (
# get_github_info,
# get_theme,
# get_demos,
# get_articles,
# get_games
# )
# from home.context import get_github_info
# from home.context import get_theme
# class ArticleObject:
# """Article object."""
# @classmethod
# def create(cls, title:str):
# """Create an article given its title."""
# with open(f"{os.getcwd()}/media/article/{title}", "r") as f:
# preview = str(f.read())[:496]+" ..."
# title = title.replace('.md', '')
# return cls(title, preview)
# def __init__(self, title, preview, active=False):
# "Create an article given its title and preview."
# self.title = title
# self.preview = preview
# self.active = active
# def __str__(self):
# """Return the title of the article."""
# return self.title
def get_articles_objects():
"""Return the list of article objects."""
# titles = os.listdir(f"{os.getcwd()}/media/article")
# articles = [ArticleObject.create(title) for title in titles if title!='.DS_Store']
# article = random.choice(articles)
# article.active = True
return dict(articles=models.Article.objects.all())
def get_articles():
"""Return the list of articles."""
# titles = os.listdir(f"{os.getcwd()}/media/article")
# articles = [title.replace('.md', '') for title in titles if title!='.DS_Store']
return dict(articles=models.Article.objects.all())
def article(request):
"""Create the context of the article view."""
return dict(
**get_articles_objects(),
**get_github_info(),
**get_theme(request),
**get_demos(),
**get_articles(),
**get_games()
)
# def article(view):
+8
View File
@@ -0,0 +1,8 @@
from django import forms
from . import models
class ArticleForm(forms.ModelForm):
class Meta:
model = models.Article
fields = ("title", "content", "public", "description")
@@ -0,0 +1,52 @@
# Generated by Django 3.0.1 on 2021-01-26 21:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Article",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=80)),
("file", models.FileField(upload_to="article/")),
("view_count", models.IntegerField(default=0)),
("like_count", models.IntegerField(default=0)),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True)),
("read", models.DateTimeField(blank=True)),
("public", models.BooleanField(default=False)),
("description", models.TextField(null=True)),
(
"author",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"ordering": ["title"],
},
),
]
@@ -0,0 +1,23 @@
# Generated by Django 3.0.1 on 2021-01-27 00:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0001_initial"),
]
operations = [
migrations.AlterField(
model_name="article",
name="like_count",
field=models.PositiveIntegerField(default=0),
),
migrations.AlterField(
model_name="article",
name="view_count",
field=models.PositiveIntegerField(default=0),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 3.0.1 on 2021-01-27 00:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0002_auto_20210127_0002"),
]
operations = [
migrations.AlterField(
model_name="article",
name="read",
field=models.DateTimeField(null=True),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 3.0.1 on 2021-01-27 00:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0003_auto_20210127_0002"),
]
operations = [
migrations.AlterField(
model_name="article",
name="title",
field=models.CharField(max_length=255),
),
]
@@ -0,0 +1,31 @@
# Generated by Django 3.0.1 on 2021-01-27 00:42
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("article", "0004_auto_20210127_0029"),
]
operations = [
migrations.AlterField(
model_name="article",
name="author",
field=models.OneToOneField(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
migrations.AlterField(
model_name="article",
name="description",
field=models.TextField(blank=True, null=True),
),
]
@@ -0,0 +1,22 @@
# Generated by Django 3.0.1 on 2021-01-27 01:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0005_auto_20210127_0042"),
]
operations = [
migrations.RemoveField(
model_name="article",
name="file",
),
migrations.AddField(
model_name="article",
name="content",
field=models.TextField(null=True),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 3.0.1 on 2021-01-27 01:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0006_auto_20210127_0109"),
]
operations = [
migrations.AlterField(
model_name="article",
name="title",
field=models.CharField(max_length=255, unique=True),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 3.0.1 on 2021-01-31 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0007_auto_20210127_0120"),
]
operations = [
migrations.AddField(
model_name="article",
name="update_count",
field=models.PositiveIntegerField(default=0),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 3.0.1 on 2021-02-01 22:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0008_article_update_count"),
]
operations = [
migrations.AddField(
model_name="article",
name="dislike_count",
field=models.PositiveIntegerField(default=0),
),
]
@@ -0,0 +1,40 @@
# Generated by Django 3.1.6 on 2021-02-05 15:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("article", "0009_article_dislike_count"),
]
operations = [
migrations.AddField(
model_name="article",
name="layout",
field=models.CharField(
choices=[
("bootstrap3", "Bootstrap3"),
("github", "Github"),
("jasonm23-dark", "Jasonm23 Dark"),
("jasonm23-foghorn", "Jasonm23 Foghorn"),
("jasonm23-markdown", "Jasonm23 Markdown"),
("jasonm23-swiss", "Jasonm23 Swiss"),
("marc", "Marc"),
("markedapp-byword", "Markedapp Byword"),
("mixu-book", "Mixu Book"),
("mixu_bootstrap-2col", "Mixu Bootstrap 2Col"),
("mixu-bootstrap", "Mixu Bootstrap"),
("mixu-gray", "Mixu Gray"),
("mixu-page", "Mixu Page"),
("mixu-radar", "Mixu Radar"),
("roryg_ghostwriter", "Roryg Ghostwriter"),
("thomasf_solarizedcssdark", "Thomasf Solarizedcssdark"),
("thomasf_solarizedcsslight", "Thomasf Solarizedcsslight"),
],
default="marc",
max_length=255,
),
),
]
+90
View File
@@ -0,0 +1,90 @@
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
import uuid
# class ArticleLayout(models.Model):
# """A model that stores possible article layouts."""
# name = models.CharField(max_length=255)
# author = models.OneToOneField(
# User, on_delete=models.SET_NULL, blank=True, null=True)
# created = models.DateTimeField(auto_now_add=True)
# modified = models.DateTimeField(auto_now_add=True)
# def __str__(self):
# """Return the name of the article layout."""
# return f"{self.name}"
class ArticleLayout(models.TextChoices):
BOOTSTRAP3 = "bootstrap3"
GITHUB = "github"
JASONM23_DARK = "jasonm23-dark"
JASONM23_FOGHORN = "jasonm23-foghorn"
JASONM23_MARKDOWN = "jasonm23-markdown"
JASONM23_SWISS = "jasonm23-swiss"
MARC = "marc"
MARKEDAPP_BYWORD = "markedapp-byword"
MIXU_BOOK = "mixu-book"
MIXU_BOOTSTRAP_2COL = "mixu_bootstrap-2col"
MIXU_BOOTSTRAP = "mixu-bootstrap"
MIXU_GRAY = "mixu-gray"
MIXU_PAGE = "mixu-page"
MIXU_RADAR = "mixu-radar"
RORYG_GHOSTWRITER = "roryg_ghostwriter"
THOMASF_SOLARIZEDCSSDARK = "thomasf_solarizedcssdark"
THOMASF_SOLARIZEDCSSLIGHT = "thomasf_solarizedcsslight"
class Article(models.Model):
"""A model to store markdown files."""
title = models.CharField(max_length=255, unique=True)
# file = models.FileField(upload_to='article/')
content = models.TextField(null=True)
author = models.OneToOneField(
User, on_delete=models.SET_NULL, blank=True, null=True
)
public = models.BooleanField(default=False)
description = models.TextField(null=True, blank=True)
view_count = models.PositiveIntegerField(default=0)
like_count = models.PositiveIntegerField(default=0)
dislike_count = models.PositiveIntegerField(default=0)
update_count = models.PositiveIntegerField(default=0) # version
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
read = models.DateTimeField(null=True)
layout = models.CharField(
max_length=255, choices=ArticleLayout.choices, default=ArticleLayout.MARC
)
# Unique way to identify an article which never changes
# uuid = models.UUIDField(
# editable=False, unique=True, default=uuid.uuid4)
class Meta:
ordering = ["title"]
def __str__(self):
"""Return the title of the article."""
return f"{self.title}"
def update_article(self):
"""Update the article fields for new version."""
self.update_count += 1
self.updated = timezone.now()
def update_view(self):
"""Update the article fields for new view."""
self.view_count += 1
self.read = timezone.now()
# @property
# def preview(self, n=500):
# """"""
# class WritersGroup
# article = models.ForeignKey(ArticleModel)
Binary file not shown.
@@ -0,0 +1,10 @@
.FAIL b, .ERROR b { color: red; /* #990066 */ }
.PASS b { color: #73C836; }
input.runner {
margin-top: 0.1em;
margin-bottom: 1em;
font-size: large;
padding: 0.3em;
}
ol.runner { margin-bottom: 0.2em; }
pre.run { margin-bottom: 0.2em;}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
.pre-wrapper{
position:relative;
}
.pre-wrapper pre{
padding-top: 25px;
}
.pre-wrapper .copy-snippet {
border-radius: 0;
min-width:55px;
background: none repeat scroll 0 0 transparent;
border: 1px solid #bbb;
color: #26589F;
font-family: 'HELEVETICA',sans-serif;
font-size: 12px;
font-weight: normal;
line-height: 1.42rem;
margin: 0;
padding: 0px 5px;
text-align: center;
text-decoration: none;
text-indent: 0;
position:absolute;
background:#ccc;
top:0;
left:0;
}
.pre-wrapper .copy-snippet:disabled{
color:#555;
}
@@ -0,0 +1,709 @@
@font-face {
font-family: octicons-anchor;
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format('woff');
}
body {
background-color: white;
max-width: 790px;
margin: 0 auto;
padding: 30px 0;
}
.markdown-body {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
color: #333;
overflow: hidden;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
.markdown-body a {
background: transparent;
}
.markdown-body a:active,
.markdown-body a:hover {
outline: 0;
}
.markdown-body strong {
font-weight: bold;
}
.markdown-body h1 {
font-size: 2em;
margin: 0.67em 0;
}
.markdown-body img {
border: 0;
}
.markdown-body hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
.markdown-body pre {
overflow: auto;
}
.markdown-body code,
.markdown-body kbd,
.markdown-body pre {
font-family: monospace, monospace;
font-size: 1em;
}
.markdown-body input {
color: inherit;
font: inherit;
margin: 0;
}
.markdown-body html input[disabled] {
cursor: default;
}
.markdown-body input {
line-height: normal;
}
.markdown-body input[type="checkbox"] {
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
}
.markdown-body table {
border-collapse: collapse;
border-spacing: 0;
}
.markdown-body td,
.markdown-body th {
padding: 0;
}
.markdown-body * {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.markdown-body input {
font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
.markdown-body a {
color: #4183c4;
text-decoration: none;
}
.markdown-body a:hover,
.markdown-body a:focus,
.markdown-body a:active {
text-decoration: underline;
}
.markdown-body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
.markdown-body hr:before {
display: table;
content: "";
}
.markdown-body hr:after {
display: table;
clear: both;
content: "";
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
.markdown-body h1 {
font-size: 30px;
}
.markdown-body h2 {
font-size: 21px;
}
.markdown-body h3 {
font-size: 16px;
}
.markdown-body h4 {
font-size: 14px;
}
.markdown-body h5 {
font-size: 12px;
}
.markdown-body h6 {
font-size: 11px;
}
.markdown-body blockquote {
margin: 0;
}
.markdown-body ul,
.markdown-body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
.markdown-body ol ol,
.markdown-body ul ol {
list-style-type: lower-roman;
}
.markdown-body ul ul ol,
.markdown-body ul ol ol,
.markdown-body ol ul ol,
.markdown-body ol ol ol {
list-style-type: lower-alpha;
}
.markdown-body dd {
margin-left: 0;
}
.markdown-body code {
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.markdown-body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.markdown-body kbd {
background-color: #e7e7e7;
background-image: -webkit-linear-gradient(#fefefe, #e7e7e7);
background-image: linear-gradient(#fefefe, #e7e7e7);
background-repeat: repeat-x;
border-radius: 2px;
border: 1px solid #cfcfcf;
color: #000;
padding: 3px 5px;
line-height: 10px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
display: inline-block;
}
.markdown-body>*:first-child {
margin-top: 0 !important;
}
.markdown-body>*:last-child {
margin-bottom: 0 !important;
}
.markdown-body .anchor {
position: absolute;
top: 0;
bottom: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
.markdown-body .anchor:focus {
outline: none;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
.markdown-body h1:hover .anchor,
.markdown-body h2:hover .anchor,
.markdown-body h3:hover .anchor,
.markdown-body h4:hover .anchor,
.markdown-body h5:hover .anchor,
.markdown-body h6:hover .anchor {
height: 1em;
padding-left: 8px;
margin-left: -30px;
line-height: 1;
text-decoration: none;
}
.markdown-body h1:hover .anchor .octicon-link,
.markdown-body h2:hover .anchor .octicon-link,
.markdown-body h3:hover .anchor .octicon-link,
.markdown-body h4:hover .anchor .octicon-link,
.markdown-body h5:hover .anchor .octicon-link,
.markdown-body h6:hover .anchor .octicon-link {
display: inline-block;
}
.markdown-body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
.markdown-body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
.markdown-body h3 {
font-size: 1.5em;
line-height: 1.43;
}
.markdown-body h4 {
font-size: 1.25em;
}
.markdown-body h5 {
font-size: 1em;
}
.markdown-body h6 {
font-size: 1em;
color: #777;
}
.markdown-body p,
.markdown-body blockquote,
.markdown-body ul,
.markdown-body ol,
.markdown-body dl,
.markdown-body table,
.markdown-body pre {
margin-top: 0;
margin-bottom: 16px;
}
.markdown-body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
.markdown-body ul,
.markdown-body ol {
padding-left: 2em;
}
.markdown-body ul ul,
.markdown-body ul ol,
.markdown-body ol ol,
.markdown-body ol ul {
margin-top: 0;
margin-bottom: 0;
}
.markdown-body li>p {
margin-top: 16px;
}
.markdown-body dl {
padding: 0;
}
.markdown-body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
.markdown-body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.markdown-body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
.markdown-body blockquote>:first-child {
margin-top: 0;
}
.markdown-body blockquote>:last-child {
margin-bottom: 0;
}
.markdown-body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
.markdown-body table th {
font-weight: bold;
}
.markdown-body table th,
.markdown-body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.markdown-body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.markdown-body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
.markdown-body img {
max-width: 100%;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.markdown-body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
.markdown-body code:before,
.markdown-body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
.markdown-body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.markdown-body .highlight {
margin-bottom: 16px;
}
.markdown-body .highlight pre,
.markdown-body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
.markdown-body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.markdown-body pre {
word-wrap: normal;
}
.markdown-body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.markdown-body pre code:before,
.markdown-body pre code:after {
content: normal;
}
.markdown-body .highlight {
background: #fff;
}
.markdown-body .highlight .mf,
.markdown-body .highlight .mh,
.markdown-body .highlight .mi,
.markdown-body .highlight .mo,
.markdown-body .highlight .il,
.markdown-body .highlight .m {
color: #945277;
}
.markdown-body .highlight .s,
.markdown-body .highlight .sb,
.markdown-body .highlight .sc,
.markdown-body .highlight .sd,
.markdown-body .highlight .s2,
.markdown-body .highlight .se,
.markdown-body .highlight .sh,
.markdown-body .highlight .si,
.markdown-body .highlight .sx,
.markdown-body .highlight .s1 {
color: #df5000;
}
.markdown-body .highlight .kc,
.markdown-body .highlight .kd,
.markdown-body .highlight .kn,
.markdown-body .highlight .kp,
.markdown-body .highlight .kr,
.markdown-body .highlight .kt,
.markdown-body .highlight .k,
.markdown-body .highlight .o {
font-weight: bold;
}
.markdown-body .highlight .kt {
color: #458;
}
.markdown-body .highlight .c,
.markdown-body .highlight .cm,
.markdown-body .highlight .c1 {
color: #998;
font-style: italic;
}
.markdown-body .highlight .cp,
.markdown-body .highlight .cs {
color: #999;
font-weight: bold;
}
.markdown-body .highlight .cs {
font-style: italic;
}
.markdown-body .highlight .n {
color: #333;
}
.markdown-body .highlight .na,
.markdown-body .highlight .nv,
.markdown-body .highlight .vc,
.markdown-body .highlight .vg,
.markdown-body .highlight .vi {
color: #008080;
}
.markdown-body .highlight .nb {
color: #0086B3;
}
.markdown-body .highlight .nc {
color: #458;
font-weight: bold;
}
.markdown-body .highlight .no {
color: #094e99;
}
.markdown-body .highlight .ni {
color: #800080;
}
.markdown-body .highlight .ne {
color: #990000;
font-weight: bold;
}
.markdown-body .highlight .nf {
color: #945277;
font-weight: bold;
}
.markdown-body .highlight .nn {
color: #555;
}
.markdown-body .highlight .nt {
color: #000080;
}
.markdown-body .highlight .err {
color: #a61717;
background-color: #e3d2d2;
}
.markdown-body .highlight .gd {
color: #000;
background-color: #fdd;
}
.markdown-body .highlight .gd .x {
color: #000;
background-color: #faa;
}
.markdown-body .highlight .ge {
font-style: italic;
}
.markdown-body .highlight .gr {
color: #aa0000;
}
.markdown-body .highlight .gh {
color: #999;
}
.markdown-body .highlight .gi {
color: #000;
background-color: #dfd;
}
.markdown-body .highlight .gi .x {
color: #000;
background-color: #afa;
}
.markdown-body .highlight .go {
color: #888;
}
.markdown-body .highlight .gp {
color: #555;
}
.markdown-body .highlight .gs {
font-weight: bold;
}
.markdown-body .highlight .gu {
color: #800080;
font-weight: bold;
}
.markdown-body .highlight .gt {
color: #aa0000;
}
.markdown-body .highlight .ow {
font-weight: bold;
}
.markdown-body .highlight .w {
color: #bbb;
}
.markdown-body .highlight .sr {
color: #017936;
}
.markdown-body .highlight .ss {
color: #8b467f;
}
.markdown-body .highlight .bp {
color: #999;
}
.markdown-body .highlight .gc {
color: #999;
background-color: #EAF2F5;
}
.markdown-body .octicon {
font: normal normal 16px octicons-anchor;
line-height: 1;
display: inline-block;
text-decoration: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.markdown-body .octicon-link:before {
content: '\f05c';
}
.markdown-body .task-list-item {
list-style-type: none;
}
.markdown-body .task-list-item+.task-list-item {
margin-top: 3px;
}
.markdown-body .task-list-item input {
float: left;
margin: 0.3em 0 0.25em -1.6em;
vertical-align: middle;
}
@media (min-width: 43.75em) {
body {
padding: 30px;
}
}
@@ -0,0 +1,124 @@
/*
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #333;
background: #f8f8f8;
-webkit-text-size-adjust: none;
}
.hljs-comment,
.diff .hljs-header,
.hljs-javadoc {
color: #998;
font-style: italic;
}
.hljs-keyword,
.css .rule .hljs-keyword,
.hljs-winutils,
.nginx .hljs-title,
.hljs-subst,
.hljs-request,
.hljs-status {
color: #333;
font-weight: bold;
}
.hljs-number,
.hljs-hexcolor,
.ruby .hljs-constant {
color: #008080;
}
.hljs-string,
.hljs-tag .hljs-value,
.hljs-phpdoc,
.hljs-dartdoc,
.tex .hljs-formula {
color: #d14;
}
.hljs-title,
.hljs-id,
.scss .hljs-preprocessor {
color: #900;
font-weight: bold;
}
.hljs-list .hljs-keyword,
.hljs-subst {
font-weight: normal;
}
.hljs-class .hljs-title,
.hljs-type,
.vhdl .hljs-literal,
.tex .hljs-command {
color: #458;
font-weight: bold;
}
.hljs-tag,
.hljs-tag .hljs-title,
.hljs-rules .hljs-property,
.django .hljs-tag .hljs-keyword {
color: #000080;
font-weight: normal;
}
.hljs-attribute,
.hljs-variable,
.lisp .hljs-body {
color: #008080;
}
.hljs-regexp {
color: #009926;
}
.hljs-symbol,
.ruby .hljs-symbol .hljs-string,
.lisp .hljs-keyword,
.clojure .hljs-keyword,
.scheme .hljs-keyword,
.tex .hljs-special,
.hljs-prompt {
color: #990073;
}
.hljs-built_in {
color: #0086b3;
}
.hljs-preprocessor,
.hljs-pragma,
.hljs-pi,
.hljs-doctype,
.hljs-shebang,
.hljs-cdata {
color: #999;
font-weight: bold;
}
.hljs-deletion {
background: #fdd;
}
.hljs-addition {
background: #dfd;
}
.diff .hljs-change {
background: #0086b3;
}
.hljs-chunk {
color: #aaa;
}
@@ -0,0 +1,3 @@
img {
width: 100%;
}
+396
View File
@@ -0,0 +1,396 @@
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 8/9.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 8/9.
*/
audio,
canvas,
video {
display: inline-block;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address styling not present in IE 8/9.
*/
[hidden] {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari 5, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Correct font family set oddly in Safari 5 and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre-wrap;
}
/**
* Set consistent quote types.
*/
q {
quotes: "\201C" "\201D" "\2018" "\2019";
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9.
*/
img {
border: 0;
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari 5.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Correct font family not being inherited in all browsers.
* 2. Correct font size not being inherited in all browsers.
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
*/
button,
input,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 2 */
margin: 0; /* 3 */
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to `content-box` in IE 8/9.
* 2. Remove excess padding in IE 8/9.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
@@ -0,0 +1,81 @@
/* Make clicks pass-through */
#nprogress {
pointer-events: none;
-webkit-pointer-events: none;
}
#nprogress .bar {
background: #29d;
position: fixed;
z-index: 100;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
/* Fancy blur effect */
#nprogress .peg {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px #29d, 0 0 5px #29d;
opacity: 1.0;
-webkit-transform: rotate(3deg) translate(0px, -4px);
-moz-transform: rotate(3deg) translate(0px, -4px);
-ms-transform: rotate(3deg) translate(0px, -4px);
-o-transform: rotate(3deg) translate(0px, -4px);
transform: rotate(3deg) translate(0px, -4px);
}
/* Remove these to get rid of the spinner */
#nprogress .spinner {
display: block;
position: fixed;
z-index: 100;
top: 15px;
right: 15px;
}
#nprogress .spinner-icon {
width: 14px;
height: 14px;
border: solid 2px transparent;
border-top-color: #29d;
border-left-color: #29d;
border-radius: 10px;
-webkit-animation: nprogress-spinner 400ms linear infinite;
-moz-animation: nprogress-spinner 400ms linear infinite;
-ms-animation: nprogress-spinner 400ms linear infinite;
-o-animation: nprogress-spinner 400ms linear infinite;
animation: nprogress-spinner 400ms linear infinite;
}
@-webkit-keyframes nprogress-spinner {
0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}
@-moz-keyframes nprogress-spinner {
0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }
100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }
}
@-o-keyframes nprogress-spinner {
0% { -o-transform: rotate(0deg); transform: rotate(0deg); }
100% { -o-transform: rotate(360deg); transform: rotate(360deg); }
}
@-ms-keyframes nprogress-spinner {
0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }
100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }
}
@keyframes nprogress-spinner {
0% { transform: rotate(0deg); transform: rotate(0deg); }
100% { transform: rotate(360deg); transform: rotate(360deg); }
}
@@ -0,0 +1,41 @@
h1,
h2,
h3,
h4,
h5,
h6 {
position: relative;
}
h1:hover .header-link:before,
h2:hover .header-link:before,
h3:hover .header-link:before,
h4:hover .header-link:before,
h5:hover .header-link:before,
h6:hover .header-link:before {
content: "\00B6";/* pilcrow */
color: #888;
font-size: smaller;
}
.header-link {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
position: absolute;
top: 0;
left: -0.7em;
display: block;
padding-right: 1em;
}
h1:hover .header-link,
h2:hover .header-link,
h3:hover .header-link,
h4:hover .header-link,
h5:hover .header-link,
h6:hover .header-link {
display: inline-block;
text-decoration: none;
}
@@ -0,0 +1,52 @@
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
.pln { color: #000 } /* plain text */
@media screen {
.str { color: #080 } /* string content */
.kwd { color: #268BD2 } /* a keyword */
.com { color: #93a1a1 } /* a comment */
.typ { color: #FF6136 } /* a type name */
.lit { color: #2aa198 } /* a literal value */
/* punctuation, lisp open bracket, lisp close bracket */
.pun, .opn, .clo { color: #268bd2 }
.tag { color: #268BD2 } /* a markup tag name */
.atn { color: #b58900 } /* a markup attribute name */
.atv { color: #080 } /* a markup attribute value */
.dec, .var { color: #b58900 } /* a declaration; a variable name */
.fun { color: red } /* a function name */
}
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str { color: #060 }
.kwd { color: #006; font-weight: bold }
.com { color: #600; font-style: italic }
.typ { color: #404; font-weight: bold }
.lit { color: #044 }
.pun, .opn, .clo { color: #440 }
.tag { color: #006; font-weight: bold }
.atn { color: #404 }
.atv { color: #060 }
}
/* Put a border around prettyprinted code snippets. */
pre.prettyprint { background: none; font-size: 14px;}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L5,
li.L6,
li.L7,
li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 { background: #eee }
@@ -0,0 +1,379 @@
/* @import url(//fonts.googleapis.com/css?family=PT+Sans); */
body {
margin: 0px;
font-family: 'PT Sans', Helvetica, 'Helvetica Neuve', Arial, Tahoma, sans-serif;
font-size: 17px;
color: #333;
}}
h1, h2, h3, h4, h5, h6 {
color:#222;
margin:0 0 20px;
}
p, ul, ol, table, pre, dl {
margin:0 0 20px;
}
h1, h2, h3 {
line-height:1.1;
}
h1 {
font-size:28px;
}
h2 {
color:#393939;
}
h3, h4, h5, h6 {
color:#494949;
}
a {
color:#39c;
font-weight:400;
text-decoration:none;
}
.navlist a {
color: #39c;
font-weight:400;
text-decoration:none;
}
a small {
font-size:11px;
color:#777;
margin-top:-0.6em;
display:block;
}
.wrapper {
/* width:860px; */
margin:0 auto;
}
blockquote {
border-left:1px solid #e5e5e5;
margin:0;
padding:0 0 0 20px;
font-style:italic;
}
code, pre {
color:#333;
font-size:12px;
}
pre {
padding:8px 15px;
background: #f8f8f8;
border-radius:5px;
border:1px solid #e5e5e5;
overflow-x: auto;
}
table {
width:100%;
border-collapse:collapse;
}
th, td {
text-align:left;
padding:5px 10px;
border-bottom:1px solid #e5e5e5;
}
dt {
color:#444;
font-weight:700;
}
th {
color:#444;
}
img {
max-width:100%;
}
header {
width:270px;
float:left;
position:fixed;
}
header ul {
list-style:none;
height:40px;
padding:0;
background: #eee;
background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
border-radius:5px;
border:1px solid #d2d2d2;
box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0;
width:270px;
}
header li {
width:89px;
float:left;
border-right:1px solid #d2d2d2;
height:40px;
}
header ul a {
line-height:1;
font-size:11px;
color:#999;
display:block;
text-align:center;
padding-top:6px;
height:40px;
}
strong {
color:#222;
font-weight:700;
}
header ul li + li {
width:88px;
border-left:1px solid #fff;
}
header ul li + li + li {
border-right:none;
width:89px;
}
header ul a strong {
font-size:14px;
display:block;
color:#222;
}
section {
width:500px;
float:right;
padding-bottom:50px;
}
small {
font-size:11px;
}
hr {
border:0;
background:#e5e5e5;
height:1px;
margin:0 0 20px;
}
footer {
width:270px;
float:left;
position:fixed;
bottom:50px;
}
@media print, screen and (max-width: 960px) {
div.wrapper {
width:auto;
margin:0;
}
header, section, footer {
float:none;
position:static;
width:auto;
}
header {
padding-right:320px;
}
section {
border:1px solid #e5e5e5;
border-width:1px 0;
padding:20px 0;
margin:0 0 20px;
}
header a small {
display:inline;
}
header ul {
position:absolute;
right:50px;
top:52px;
}
}
@media print, screen and (max-width: 720px) {
body {
word-wrap:break-word;
}
header {
padding:0;
}
header ul, header p.view {
position:static;
}
pre, code {
word-wrap:normal;
}
}
@media print, screen and (max-width: 480px) {
body {
padding:15px;
}
header ul {
display:none;
}
}
@media print {
body {
padding:0.4in;
font-size:12pt;
color:#444;
}
}
#wrapper {
padding: 1em;
}
.ca-menu {
list-style: none;
padding: 0;
margin: 20px auto;
}
#toc {
top: 0;
right: 0;
bottom: 0;
left: auto;
width: 20%;
background-color: #fff;
/* padding: 20px; */
position: fixed;
z-index: 1;
display: none;
height: 50%;
padding: 3rem
}
#toc::before {
content: "";
position: absolute;
top: 15%;
bottom: 15%;
left: -1px;
width: 1px;
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(227,224,216,0)), color-stop(20%, #e3e0d8), color-stop(80%, #e3e0d8), color-stop(100%, rgba(227,224,216,0)));
background: -webkit-linear-gradient(top, rgba(227,224,216,0) 0%,#e3e0d8 20%,#e3e0d8 80%,rgba(227,224,216,0) 100%);
background: -moz-linear-gradient(top, rgba(227,224,216,0) 0%,#e3e0d8 20%,#e3e0d8 80%,rgba(227,224,216,0) 100%);
background: -o-linear-gradient(top, rgba(227,224,216,0) 0%,#e3e0d8 20%,#e3e0d8 80%,rgba(227,224,216,0) 100%);
background: linear-gradient(top, rgba(227,224,216,0) 0%,#e3e0d8 20%,#e3e0d8 80%,rgba(227,224,216,0) 100%);
}
#toc-inner {
display: table-cell;
vertical-align: middle;
}
.nav-list {
/* height: 50%; */
margin: auto 0;
font-size: 2vh;
text-align: left;
}
.sidebar-header-1 {
padding-top: 0.3rem;
}
.sidebar-header-2 {
font-size: 80%;
padding-top: .3rem;
padding-bottom: .2rem;
}
.sidebar-header-3 {
font-size: 60%;
}
div.clear {
clear: both;
}
h1 { font-size: 2.5em; line-height: 1; }
h2 { font-size: 2em; line-height: 1; }
h3 { font-size: 1.5em; line-height: 1; }
h4 { font-size: 1.2em; line-height: 1.25; }
h5 { font-size: 1em; line-height: 1; font-weight: bold; }
h6 { font-size: 1em; line-height: 1; font-weight: bold; }
h1, h2, h3, h4, h5, h6 { font-weight: normal; margin-top: 1em; margin-bottom: 0.5em; }
h1, h2 { margin-bottom: 0.5em; }
.post p {
/* max-width: 70%; */
}
ul.list, ol.list {
padding-left: 3.333em;
/* max-width: 70%; */
}
.post h2 {
border-bottom: 1px solid #EDEDED;
}
h1:nth-child(1),
h2:nth-child(1),
h3:nth-child(1),
h4:nth-child(1),
h5:nth-child(1),
h6:nth-child(1) {
margin-top: 0;
}
@media (min-width: 43.75em) {
}
@media (min-width: 62em) {
#wrapper {
width: 60%;
padding: 20px 5%;
}
#toc {
display: table;
}
}
@@ -0,0 +1,163 @@
@import url("https://fonts.googleapis.com/css?family=Vollkorn:400,400italic,700,700italic&subset=latin");
html, body {
padding:1em;
margin:auto;
/* max-width:42em; */
background:#fefefe;
text-align: justify;
}
body {
font: 1.3em "Vollkorn", Palatino, Times;
color: #333;
line-height: 1.4;
text-align: justify;
}
header, nav, article, footer {
/* width: 700px; */
margin:0 auto;
}
article {
margin-top: 4em;
margin-bottom: 4em;
min-height: 400px;
}
footer {
margin-bottom:50px;
}
video {
margin: 2em 0;
border:1px solid #ddd;
}
nav {
font-size: 9em;
font-style: italic;
border-bottom: 1px solid #ddd;
padding: 1em 0;
}
nav p {
margin: 0;
}
/* Typography
-------------------------------------------------------- */
h1 {
margin-top: 0;
font-weight: normal;
margin-top: 3em;
scroll-behavior: smooth;
}
h2 {
font-weight: normal;
margin-top: 2em;
scroll-behavior: smooth;
}
h3 {
font-weight: normal;
font-style: italic;
margin-top: 1.7em;
margin-bottom: 0.8em;
scroll-behavior: smooth;
}
p {
margin-top:0;
-webkit-hypens:auto;
-moz-hypens:auto;
hyphens:auto;
}
ul {
list-style: square;
padding-left:1.2em;
}
ol {
padding-left:1.2em;
}
blockquote {
margin-left: 1em;
padding-left: 1em;
border-left: 1px solid #ddd;
}
code {
font-family: "Consolas", "Menlo", "Monaco", monospace, serif;
font-size: 1.5em;
}
a {
color: #2484c1;
text-decoration: none;
}
li a {
color: #303030;
font-weight:400;
text-decoration:none;
}
li a:hover {
color: black;
/* font-weight: bold; */
/* font-weight:400; */
/* text-decoration:none; */
}
a:hover {
text-decoration: underline;
}
a img {
border:none;
}
h1 a, h1 a:hover {
color: #333;
text-decoration: none;
}
hr {
color : #ddd;
height : 1px;
margin: 2em 0;
border-top : solid 1px #ddd;
border-bottom : none;
border-left: 0;
border-right: 0;
}
p#heart{
font-size: 2em;
line-height: 1;
text-align: center;
color: #ccc;
}
.red {
color:#B50000;
}
/* Home Page
--------------------------- */
body#index li {
margin-bottom: 1em;
}
/* iPad
-------------------------------------------------------- */
@media only screen and (max-device-width: 1024px) {
body {
font-size: 120%;
line-height: 1.4;
}
} /* @iPad */
/* iPhone
-------------------------------------------------------- */
@media only screen and (max-device-width: 480px) {
body {
text-align: left;
}
article, footer {
width: auto;
}
article {
padding: 0 10px;
}
} /* @iPhone */
@@ -0,0 +1,229 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="652" />
<glyph unicode="&#x2001;" horiz-adv-x="1304" />
<glyph unicode="&#x2002;" horiz-adv-x="652" />
<glyph unicode="&#x2003;" horiz-adv-x="1304" />
<glyph unicode="&#x2004;" horiz-adv-x="434" />
<glyph unicode="&#x2005;" horiz-adv-x="326" />
<glyph unicode="&#x2006;" horiz-adv-x="217" />
<glyph unicode="&#x2007;" horiz-adv-x="217" />
<glyph unicode="&#x2008;" horiz-adv-x="163" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="326" />
<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1,124 @@
/*
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #333;
background: #f8f8f8;
-webkit-text-size-adjust: none;
}
.hljs-comment,
.diff .hljs-header,
.hljs-javadoc {
color: #998;
font-style: italic;
}
.hljs-keyword,
.css .rule .hljs-keyword,
.hljs-winutils,
.nginx .hljs-title,
.hljs-subst,
.hljs-request,
.hljs-status {
color: #333;
font-weight: bold;
}
.hljs-number,
.hljs-hexcolor,
.ruby .hljs-constant {
color: #008080;
}
.hljs-string,
.hljs-tag .hljs-value,
.hljs-phpdoc,
.hljs-dartdoc,
.tex .hljs-formula {
color: #d14;
}
.hljs-title,
.hljs-id,
.scss .hljs-preprocessor {
color: #900;
font-weight: bold;
}
.hljs-list .hljs-keyword,
.hljs-subst {
font-weight: normal;
}
.hljs-class .hljs-title,
.hljs-type,
.vhdl .hljs-literal,
.tex .hljs-command {
color: #458;
font-weight: bold;
}
.hljs-tag,
.hljs-tag .hljs-title,
.hljs-rules .hljs-property,
.django .hljs-tag .hljs-keyword {
color: #000080;
font-weight: normal;
}
.hljs-attribute,
.hljs-variable,
.lisp .hljs-body {
color: #008080;
}
.hljs-regexp {
color: #009926;
}
.hljs-symbol,
.ruby .hljs-symbol .hljs-string,
.lisp .hljs-keyword,
.clojure .hljs-keyword,
.scheme .hljs-keyword,
.tex .hljs-special,
.hljs-prompt {
color: #990073;
}
.hljs-built_in {
color: #0086b3;
}
.hljs-preprocessor,
.hljs-pragma,
.hljs-pi,
.hljs-doctype,
.hljs-shebang,
.hljs-cdata {
color: #999;
font-weight: bold;
}
.hljs-deletion {
background: #fdd;
}
.hljs-addition {
background: #dfd;
}
.diff .hljs-change {
background: #0086b3;
}
.hljs-chunk {
color: #aaa;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Some files were not shown because too many files have changed in this diff Show More