From 1d06a5c42a4fe7c89b6f63344231b822cb5308c1 Mon Sep 17 00:00:00 2001 From: allan Date: Thu, 24 Oct 2024 12:49:01 +0200 Subject: [PATCH] initial commit --- LICENSE | 21 ++++ README.md | 36 +++++++ cfg-apps/dokuwiki.443.conf | 117 ++++++++++++++++++++ cfg-apps/dokuwiki.80.conf | 81 ++++++++++++++ cfg-apps/example.443.conf | 94 ++++++++++++++++ cfg-apps/example.80.conf | 58 ++++++++++ cfg-apps/focalboard.443.conf | 125 ++++++++++++++++++++++ cfg-apps/focalboard.80.conf | 89 +++++++++++++++ cfg-apps/gitea.443.conf | 88 +++++++++++++++ cfg-apps/gitea.80.conf | 52 +++++++++ cfg-apps/wordpress.443.conf | 98 +++++++++++++++++ cfg-apps/wordpress.80.conf | 62 +++++++++++ cfg-apps/zabbix.443.conf | 122 +++++++++++++++++++++ cfg-apps/zabbix.80.conf | 86 +++++++++++++++ cfg/default | 12 +++ cfg/nginx.conf | 98 +++++++++++++++++ cfg/nginx.conf.high.perf | 99 +++++++++++++++++ nginxinstall | 102 ++++++++++++++++++ nginxsnippets/block-bots.conf | 15 +++ nginxsnippets/block-engines.conf | 1 + nginxsnippets/block-file-access.conf | 8 ++ nginxsnippets/block-htaccess.conf | 4 + nginxsnippets/block-referer.conf | 32 ++++++ nginxsnippets/cache-js-css.conf | 4 + nginxsnippets/cache-open-files.conf | 4 + nginxsnippets/cache-statics.conf | 6 ++ nginxsnippets/cloudflare.conf | 27 +++++ nginxsnippets/custom-errors.conf | 33 ++++++ nginxsnippets/errorpages/custom_400.html | 18 ++++ nginxsnippets/errorpages/custom_400.png | Bin 0 -> 19639 bytes nginxsnippets/errorpages/custom_401.html | 18 ++++ nginxsnippets/errorpages/custom_401.png | Bin 0 -> 20168 bytes nginxsnippets/errorpages/custom_403.html | 18 ++++ nginxsnippets/errorpages/custom_403.png | Bin 0 -> 18431 bytes nginxsnippets/errorpages/custom_404.html | 18 ++++ nginxsnippets/errorpages/custom_404.png | Bin 0 -> 17991 bytes nginxsnippets/errorpages/custom_500.html | 18 ++++ nginxsnippets/errorpages/custom_500.png | Bin 0 -> 21121 bytes nginxsnippets/errorpages/custom_502.html | 18 ++++ nginxsnippets/errorpages/custom_502.png | Bin 0 -> 20188 bytes nginxsnippets/errorpages/custom_503.html | 18 ++++ nginxsnippets/errorpages/custom_503.png | Bin 0 -> 21265 bytes nginxsnippets/errorpages/custom_504.html | 18 ++++ nginxsnippets/errorpages/custom_504.png | Bin 0 -> 21866 bytes nginxsnippets/errorpages/custom_error.css | 6 ++ nginxsnippets/gzipconfig.conf | 9 ++ nginxsnippets/log-exclude.conf | 3 + nginxsnippets/log.conf | 1 + nginxsnippets/microcache.conf | 13 +++ nginxsnippets/proxy-params.conf | 4 + nginxsnippets/rate-limit.conf | 1 + nginxsnippets/wphardening.conf | 55 ++++++++++ 52 files changed, 1810 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 cfg-apps/dokuwiki.443.conf create mode 100644 cfg-apps/dokuwiki.80.conf create mode 100644 cfg-apps/example.443.conf create mode 100644 cfg-apps/example.80.conf create mode 100644 cfg-apps/focalboard.443.conf create mode 100644 cfg-apps/focalboard.80.conf create mode 100644 cfg-apps/gitea.443.conf create mode 100644 cfg-apps/gitea.80.conf create mode 100644 cfg-apps/wordpress.443.conf create mode 100644 cfg-apps/wordpress.80.conf create mode 100644 cfg-apps/zabbix.443.conf create mode 100644 cfg-apps/zabbix.80.conf create mode 100644 cfg/default create mode 100644 cfg/nginx.conf create mode 100644 cfg/nginx.conf.high.perf create mode 100755 nginxinstall create mode 100644 nginxsnippets/block-bots.conf create mode 100644 nginxsnippets/block-engines.conf create mode 100644 nginxsnippets/block-file-access.conf create mode 100644 nginxsnippets/block-htaccess.conf create mode 100644 nginxsnippets/block-referer.conf create mode 100644 nginxsnippets/cache-js-css.conf create mode 100644 nginxsnippets/cache-open-files.conf create mode 100644 nginxsnippets/cache-statics.conf create mode 100644 nginxsnippets/cloudflare.conf create mode 100644 nginxsnippets/custom-errors.conf create mode 100644 nginxsnippets/errorpages/custom_400.html create mode 100644 nginxsnippets/errorpages/custom_400.png create mode 100644 nginxsnippets/errorpages/custom_401.html create mode 100644 nginxsnippets/errorpages/custom_401.png create mode 100644 nginxsnippets/errorpages/custom_403.html create mode 100644 nginxsnippets/errorpages/custom_403.png create mode 100644 nginxsnippets/errorpages/custom_404.html create mode 100644 nginxsnippets/errorpages/custom_404.png create mode 100644 nginxsnippets/errorpages/custom_500.html create mode 100644 nginxsnippets/errorpages/custom_500.png create mode 100644 nginxsnippets/errorpages/custom_502.html create mode 100644 nginxsnippets/errorpages/custom_502.png create mode 100644 nginxsnippets/errorpages/custom_503.html create mode 100644 nginxsnippets/errorpages/custom_503.png create mode 100644 nginxsnippets/errorpages/custom_504.html create mode 100644 nginxsnippets/errorpages/custom_504.png create mode 100644 nginxsnippets/errorpages/custom_error.css create mode 100644 nginxsnippets/gzipconfig.conf create mode 100644 nginxsnippets/log-exclude.conf create mode 100644 nginxsnippets/log.conf create mode 100644 nginxsnippets/microcache.conf create mode 100644 nginxsnippets/proxy-params.conf create mode 100644 nginxsnippets/rate-limit.conf create mode 100644 nginxsnippets/wphardening.conf diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..57f408b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Allan Christensen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..354d7c8 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +## Nginx Php-Fpm install script for Ubuntu 22.04 and 24.04 server. + +### Prerequisites +Ubuntu 22.04 server or higher. + +### Download the script +``` +git clone https://git.x-files.dk/ubuntu-web-server/nginx-install.git +``` + +### Usage + cd nginx-install + sudo ./nginxinstall + +### Nginx configuration contains the following +A directory called nginxsnippets located in /etc/nginx. This directory contains snippets for use with nginx in order to try and have as clean and readable configuration files as possible. + +Cloudflare Real IP configuration. I order to see the proxied ip addresses when users are comming from cloudflare. + +The default website answering on IP address is disabled and will send a 444 i.e drop the tcp connection this is by my design feal free to change it. + +Bad Bots blocking file blocking CSP and SSL settings. Modify as you see fit. + +Custom error pages. You can modify them to your needs they are residing in /etc/nginxsnippets/errorpages + +### Notes +This setup is really doing some heavy lifting due the the enhanced caching that has been configured. If this turns out to be an issue just comment out the lines containing the caching configuration as well as opcache configuration in php.ini. + +### Post install +Nothing to do. + +### More guides +More guides can be found on [\[wiki.x-files.dk\]](https://wiki.x-files.dk) + +### Last tested +October 19th 2024 on Ubuntu 24.04. diff --git a/cfg-apps/dokuwiki.443.conf b/cfg-apps/dokuwiki.443.conf new file mode 100644 index 0000000..843c3c1 --- /dev/null +++ b/cfg-apps/dokuwiki.443.conf @@ -0,0 +1,117 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + return 301 https://DOMAIN$request_uri; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index doku.php; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + try_files $uri $uri/ @dokuwiki; + } + ##### Process content stop ################################################# + + # Dokuwiki hardening start ################################################# + # Uncomment these 2 lines containing "location" after dokuwiki is installed + # || + # \/ + # location ~ /(data|conf|bin|inc|vendor)/ { deny all; } + # location ~ /install.php { deny all; } + # /\ + # || + # Uncomment these 2 lines containing "location" after dokuwiki is installed + # Dokuwiki hardening stop ################################################## + + ##### Dokuwiki specific start ############################################## + location @dokuwiki { + rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; + rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; + rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; + rewrite ^/(.*) /doku.php?id=$1&$args last; + } + ##### Dokuwiki specific stop ############################################### + + ##### Process php start #################################################### + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + # include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process https stop ####################################################### diff --git a/cfg-apps/dokuwiki.80.conf b/cfg-apps/dokuwiki.80.conf new file mode 100644 index 0000000..a0939ba --- /dev/null +++ b/cfg-apps/dokuwiki.80.conf @@ -0,0 +1,81 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index doku.php; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + try_files $uri $uri/ @dokuwiki; + } + ##### Process content stop ################################################# + + # Dokuwiki hardening start ################################################# + # Uncomment these 2 lines containing "location" after dokuwiki is installed + # || + # \/ + # location ~ /(data|conf|bin|inc|vendor)/ { deny all; } + # location ~ /install.php { deny all; } + # /\ + # || + # Uncomment these 2 lines containing "location" after dokuwiki is installed + # Dokuwiki hardening stop ################################################## + + ##### Dokuwiki specific start ############################################## + location @dokuwiki { + rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; + rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; + rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; + rewrite ^/(.*) /doku.php?id=$1&$args last; + } + ##### Dokuwiki specific stop ############################################### + + ##### Process php start #################################################### + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + # include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process http stop ######################################################## diff --git a/cfg-apps/example.443.conf b/cfg-apps/example.443.conf new file mode 100644 index 0000000..2dcd434 --- /dev/null +++ b/cfg-apps/example.443.conf @@ -0,0 +1,94 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + return 301 https://DOMAIN$request_uri; + server_tokens off; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index index.php index.html; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + try_files $uri $uri/ /index.php$is_args$args; + } + ##### Process content stop ################################################# + + ##### Process php start #################################################### + location ~ \.php$ { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process https stop ####################################################### diff --git a/cfg-apps/example.80.conf b/cfg-apps/example.80.conf new file mode 100644 index 0000000..6012717 --- /dev/null +++ b/cfg-apps/example.80.conf @@ -0,0 +1,58 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index index.php index.html; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + try_files $uri $uri/ /index.php$is_args$args; + } + ##### Process content stop ################################################# + + ##### Process php start #################################################### + location ~ \.php$ { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process http stop ######################################################## diff --git a/cfg-apps/focalboard.443.conf b/cfg-apps/focalboard.443.conf new file mode 100644 index 0000000..807e33a --- /dev/null +++ b/cfg-apps/focalboard.443.conf @@ -0,0 +1,125 @@ +##### Define upstream start #################################################### +upstream focalboard { + server localhost:8000; + keepalive 32; +} +##### Define upstream stop ##################################################### + +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + return 301 https://DOMAIN$request_uri; + server_tokens off; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location ~ /ws/* { + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + client_max_body_size 50M; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + proxy_buffers 256 16k; + proxy_buffer_size 16k; + client_body_timeout 60; + send_timeout 300; + lingering_timeout 5; + proxy_connect_timeout 1d; + proxy_send_timeout 1d; + proxy_read_timeout 1d; + proxy_pass http://focalboard; + } + +location / { + client_max_body_size 50M; + proxy_set_header Connection ""; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + proxy_buffers 256 16k; + proxy_buffer_size 16k; + proxy_read_timeout 600s; + proxy_cache_revalidate on; + proxy_cache_min_uses 2; + proxy_cache_use_stale timeout; + proxy_cache_lock on; + proxy_http_version 1.1; + proxy_pass http://focalboard; + } + ##### Process content stop ################################################# + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process https stop ###################################################### diff --git a/cfg-apps/focalboard.80.conf b/cfg-apps/focalboard.80.conf new file mode 100644 index 0000000..4f7dd5c --- /dev/null +++ b/cfg-apps/focalboard.80.conf @@ -0,0 +1,89 @@ +##### Define upstream start #################################################### +upstream focalboard { + server localhost:8000; + keepalive 32; +} +##### Define upstream stop ##################################################### + +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location ~ /ws/* { + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + client_max_body_size 50M; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + proxy_buffers 256 16k; + proxy_buffer_size 16k; + client_body_timeout 60; + send_timeout 300; + lingering_timeout 5; + proxy_connect_timeout 1d; + proxy_send_timeout 1d; + proxy_read_timeout 1d; + proxy_pass http://focalboard; + } + +location / { + client_max_body_size 50M; + proxy_set_header Connection ""; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + proxy_buffers 256 16k; + proxy_buffer_size 16k; + proxy_read_timeout 600s; + proxy_cache_revalidate on; + proxy_cache_min_uses 2; + proxy_cache_use_stale timeout; + proxy_cache_lock on; + proxy_http_version 1.1; + proxy_pass http://focalboard; + } + ##### Process content stop ################################################# + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process http stop ####################################################### diff --git a/cfg-apps/gitea.443.conf b/cfg-apps/gitea.443.conf new file mode 100644 index 0000000..5d4749c --- /dev/null +++ b/cfg-apps/gitea.443.conf @@ -0,0 +1,88 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + return 301 https://DOMAIN$request_uri; + server_tokens off; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + # include /etc/nginx/nginxsnippets/log-exclude.conf; + location = /.env { access_log off; log_not_found off; } + location = /favicon.ico { access_log off; log_not_found off; } + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + # proxy_set_header Host $host; # May fix som proxy issues + # proxy_ssl_verify off; # Disable cert check with internal proxy + proxy_pass http://127.0.0.1:3000; + } + ##### Process content stop ################################################# + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process https stop ####################################################### diff --git a/cfg-apps/gitea.80.conf b/cfg-apps/gitea.80.conf new file mode 100644 index 0000000..5605b60 --- /dev/null +++ b/cfg-apps/gitea.80.conf @@ -0,0 +1,52 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + # include /etc/nginx/nginxsnippets/log-exclude.conf; + location = /.env { access_log off; log_not_found off; } + location = /favicon.ico { access_log off; log_not_found off; } + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + # proxy_set_header Host $host; # May fix som proxy issues + # proxy_ssl_verify off; # Disable cert check with internal proxy + proxy_pass http://127.0.0.1:3000; + } + ##### Process content stop ################################################# + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + # Optional include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process http stop ######################################################## diff --git a/cfg-apps/wordpress.443.conf b/cfg-apps/wordpress.443.conf new file mode 100644 index 0000000..e6b4b39 --- /dev/null +++ b/cfg-apps/wordpress.443.conf @@ -0,0 +1,98 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + return 301 https://DOMAIN$request_uri; + server_tokens off; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index index.php index.html; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + try_files $uri $uri/ /index.php$is_args$args; + } + ##### Process content stop ################################################# + + ##### Wordpress Hardeing start ############################################# + include /etc/nginx/nginxsnippets/wphardening.conf; + ##### Wordpress Hardeing stop ############################################## + + ##### Process php start #################################################### + location ~ \.php$ { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process https stop ####################################################### diff --git a/cfg-apps/wordpress.80.conf b/cfg-apps/wordpress.80.conf new file mode 100644 index 0000000..b746ae6 --- /dev/null +++ b/cfg-apps/wordpress.80.conf @@ -0,0 +1,62 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + root /var/www/html/DOMAIN; + index index.php index.html; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Process content start ################################################ + location / { + try_files $uri $uri/ /index.php$is_args$args; + } + ##### Process content stop ################################################# + + ##### Wordpress Hardeing start ############################################# + include /etc/nginx/nginxsnippets/wphardening.conf; + ##### Wordpress Hardeing stop ############################################## + + ##### Process php start #################################################### + location ~ \.php$ { + # include /etc/nginx/nginxsnippets/proxyheader.conf; + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/phpVERSION-fpm.sock; + include /etc/nginx/nginxsnippets/microcache.conf; + } + ##### Process php stop ##################################################### + + ##### Cache js css static content and open files start ##################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css static content and open files stop ###################### +} +##### Process http stop ######################################################## diff --git a/cfg-apps/zabbix.443.conf b/cfg-apps/zabbix.443.conf new file mode 100644 index 0000000..1ed0f99 --- /dev/null +++ b/cfg-apps/zabbix.443.conf @@ -0,0 +1,122 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + return 301 https://DOMAIN$request_uri; + server_tokens off; +} +##### Process http stop ######################################################## + +##### Process https start ###################################################### +server { + listen 443 ssl http2; + server_name DOMAIN; + server_tokens off; + root /usr/share/zabbix; + index index.php; + + ##### SSL configuration start ############################################## + # ssl_protocols TLSv1.2 TLSv1.3; + # ssl_ciphers EECDH+AESGCM:EDH+AESGCM; + # ssl_prefer_server_ciphers off; + # ssl_stapling on; + # ssl_stapling_verify on; + # resolver 8.8.4.4 8.8.8.8; + # resolver_timeout 5s; + # ssl_session_timeout 1d; + # ssl_session_tickets off; + # ssl_session_cache shared:SSL:10m; + # ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + # ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; + # ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; + ##### SSL configuration stop ############################################### + + ##### XSS headers start #################################################### + # add_header X-Frame-Options DENY; + # add_header X-Frame-Options SAMEORIGIN; + # add_header X-Content-Type-Options nosniff; + # add_header X-XSS-Protection "1; mode=block"; + # add_header Permissions-Policy interest-cohort=(); + # add_header Content-Security-Policy "default-src 'self'"; + # add_header Referrer-Policy strict-origin-when-cross-origin; + # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; + ##### XSS headers stop ##################################################### + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Misc content start ################################################### + location / { + + try_files $uri $uri/ =404; + } + + location /assets { + access_log off; + expires 10d; + } + + location ~ /(api\/|conf[^\.]|include|locale) { + deny all; + return 404; + } + ##### Misc content stop #################################################### + + ##### Process php ########################################################## + location ~ [^/]\.php(/|$) { + fastcgi_pass unix:/var/run/php/zabbix.sock; + + fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; + fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; + fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; + + include fastcgi_params; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param REQUEST_METHOD $request_method; + fastcgi_param CONTENT_TYPE $content_type; + fastcgi_param CONTENT_LENGTH $content_length; + + fastcgi_intercept_errors on; + fastcgi_ignore_client_abort off; + fastcgi_connect_timeout 60; + fastcgi_send_timeout 180; + fastcgi_read_timeout 180; + fastcgi_buffer_size 128k; + fastcgi_buffers 4 256k; + fastcgi_busy_buffers_size 256k; + fastcgi_temp_file_write_size 256k; + } + ##### Process php ########################################################## + + ##### Cache js css and all statics start ################################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css and all statics stop #################################### +} +##### Process https start ###################################################### diff --git a/cfg-apps/zabbix.80.conf b/cfg-apps/zabbix.80.conf new file mode 100644 index 0000000..3cf4600 --- /dev/null +++ b/cfg-apps/zabbix.80.conf @@ -0,0 +1,86 @@ +##### Process http start ####################################################### +server { + listen 80; + server_name DOMAIN; + server_tokens off; + root /usr/share/zabbix; + index index.php; + + ##### Optional include custom Error pages start ############################ + include /etc/nginx/nginxsnippets/custom-errors.conf; + ##### Optional include custom Error pages stop ############################# + + ##### Optional disable gzip start ########################################## + # gzip off; + ##### Optional disable gzip stop ########################################### + + ##### Optional disable access log start #################################### + # access_log off; + ##### Optional disable access log stop ##################################### + + ##### Block Bad referers and bad bots start ################################ + if ($bad_referer) { return 444; } + if ($bad_user_agent) { return 444; } + ##### Block Bad referers and bad bots stop ################################# + + ##### Optional stuff start ################################################# + # include /etc/nginx/nginxsnippets/block-engines.conf; + include /etc/nginx/nginxsnippets/log-exclude.conf; + include /etc/nginx/nginxsnippets/block-htaccess.conf; + include /etc/nginx/nginxsnippets/block-file-access.conf; + ##### Optional stuff stop ################################################## + + ##### Enable fastcgi cache start ########################################### + set $skip_cache 0; + ##### Enable fastcgi cache stop ############################################ + + ##### Misc content start ################################################### + location / { + + try_files $uri $uri/ =404; + } + + location /assets { + access_log off; + expires 10d; + } + + location ~ /(api\/|conf[^\.]|include|locale) { + deny all; + return 404; + } + ##### Misc content stop #################################################### + + ##### Process php ########################################################## + location ~ [^/]\.php(/|$) { + fastcgi_pass unix:/var/run/php/zabbix.sock; + + fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; + fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; + fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; + + include fastcgi_params; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param REQUEST_METHOD $request_method; + fastcgi_param CONTENT_TYPE $content_type; + fastcgi_param CONTENT_LENGTH $content_length; + + fastcgi_intercept_errors on; + fastcgi_ignore_client_abort off; + fastcgi_connect_timeout 60; + fastcgi_send_timeout 180; + fastcgi_read_timeout 180; + fastcgi_buffer_size 128k; + fastcgi_buffers 4 256k; + fastcgi_busy_buffers_size 256k; + fastcgi_temp_file_write_size 256k; + } + ##### Process php ########################################################## + + ##### Cache js css and all statics start ################################### + include /etc/nginx/nginxsnippets/cache-open-files.conf; + include /etc/nginx/nginxsnippets/cache-statics.conf; + include /etc/nginx/nginxsnippets/cache-js-css.conf; + ##### Cache js css and all statics stop #################################### +} +##### Process http start ####################################################### diff --git a/cfg/default b/cfg/default new file mode 100644 index 0000000..121bb0a --- /dev/null +++ b/cfg/default @@ -0,0 +1,12 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + server_tokens off; + root /var/www/html/default; + index index.html index.htm; + server_name _; + location / { + return 444; + try_files $uri $uri/ =404; + } +} diff --git a/cfg/nginx.conf b/cfg/nginx.conf new file mode 100644 index 0000000..fc19c72 --- /dev/null +++ b/cfg/nginx.conf @@ -0,0 +1,98 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 1024; + use epoll; + multi_accept on; +} + +http { + ##### BASIC SETTINGS ####################### LAST UPDATED 08022021 ##### + # + port_in_redirect off; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + keepalive_requests 100; + types_hash_max_size 2048; + server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + client_body_buffer_size 10K; + client_header_buffer_size 4k; + client_max_body_size 50m; + large_client_header_buffers 2 4k; + client_body_timeout 10; + client_header_timeout 10; + send_timeout 2; + reset_timedout_connection on; + # + ##### BASIC SETTINGS ####################### LAST UPDATED 08022021 ##### + + ##### SSL SETTINGS ######################### LAST UPDATED 08022021 ##### + # + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + # + ##### SSL SETTINGS ######################### LAST UPDATED 08022021 ##### + + ##### CLOUDFLARE SHOW REAL IPs ############# LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/cloudflare.conf; + ##### CLOUDFLARE SHOW REAL IPs ############# LAST UPDATED 08022021 ##### + + # BLOCK BAD REFERER AND BAD BOTS ########### LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/block-referer.conf; + include /etc/nginx/nginxsnippets/block-bots.conf; + # BLOCK BAD REFERER AND BAD BOTS ########### LAST UPDATED 08022021 ##### + + ##### LOG SETTINGS ONLY LOG CRITICAL MSG ### LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/log.conf; + access_log /var/log/nginx/access.log main; + error_log /var/log/nginx/error.log crit; + access_log on; + log_not_found off; + # + ##### LOG SETTINGS ONLY LOG CRITICAL MSG ### LAST UPDATED 08022021 ##### + + ##### GZIP SETTINGS ######################## LAST UPDATED 08022021 ##### + # + include /etc/nginx/nginxsnippets/gzipconfig.conf; + # + ##### GZIP SETTINGS ######################## LAST UPDATED 08022021 ##### + + ##### CACHE SETTINGS ####################### LAST UPDATED 08022021 ##### + # + # open_file_cache max=10000 inactive=20s; + # open_file_cache_valid 30s; + # open_file_cache_min_uses 2; + # open_file_cache_errors on; + # + ##### CACHE SETTINGS ####################### LAST UPDATED 08022021 ##### + + ##### FASTCGI SETTINGS ##################### LAST UPDATED 08022021 ##### + # + upstream php-fpm { + server unix:/var/run/php/phpVERSION-fpm.sock; + } + fastcgi_read_timeout 300; + fastcgi_cache_path /var/cache/nginx/fcgi levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=1h; + # + ##### FASTCGI SETTINGS ##################### LAST UPDATED 08022021 ##### + + ##### VHOST SETTINGS ####################### LAST UPDATED 08022021 ##### + # + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /etc/nginx/static-sites/*.conf; + # + ##### VHOST SETTINGS ####################### LAST UPDATED 08022021 ##### +} diff --git a/cfg/nginx.conf.high.perf b/cfg/nginx.conf.high.perf new file mode 100644 index 0000000..f77cb21 --- /dev/null +++ b/cfg/nginx.conf.high.perf @@ -0,0 +1,99 @@ +user www-data; +worker_processes auto; +worker_rlimit_nofile 100000; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 8000; + use epoll; + multi_accept on; +} + +http { + ##### BASIC SETTINGS ####################### LAST UPDATED 08022021 ##### + # + port_in_redirect off; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + keepalive_requests 100; + types_hash_max_size 2048; + server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + client_body_buffer_size 10K; + client_header_buffer_size 4k; + client_max_body_size 50m; + large_client_header_buffers 2 4k; + client_body_timeout 10; + client_header_timeout 10; + send_timeout 2; + reset_timedout_connection on; + # + ##### BASIC SETTINGS ####################### LAST UPDATED 08022021 ##### + + ##### SSL SETTINGS ######################### LAST UPDATED 08022021 ##### + # + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + # + ##### SSL SETTINGS ######################### LAST UPDATED 08022021 ##### + + ##### CLOUDFLARE SHOW REAL IPs ############# LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/cloudflare.conf; + ##### CLOUDFLARE SHOW REAL IPs ############# LAST UPDATED 08022021 ##### + + # BLOCK BAD REFERER AND BAD BOTS ########### LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/block-referer.conf; + include /etc/nginx/nginxsnippets/block-bots.conf; + # BLOCK BAD REFERER AND BAD BOTS ########### LAST UPDATED 08022021 ##### + + ##### LOG SETTINGS ONLY LOG CRITICAL MSG ### LAST UPDATED 08022021 ##### + include /etc/nginx/nginxsnippets/log.conf; + access_log /var/log/nginx/access.log main; + error_log /var/log/nginx/error.log crit; + access_log on; + log_not_found off; + # + ##### LOG SETTINGS ONLY LOG CRITICAL MSG ### LAST UPDATED 08022021 ##### + + ##### GZIP SETTINGS ######################## LAST UPDATED 08022021 ##### + # + include /etc/nginx/nginxsnippets/gzipconfig.conf; + # + ##### GZIP SETTINGS ######################## LAST UPDATED 08022021 ##### + + ##### CACHE SETTINGS ####################### LAST UPDATED 08022021 ##### + # + open_file_cache max=10000 inactive=20s; + open_file_cache_valid 30s; + open_file_cache_min_uses 2; + open_file_cache_errors on; + # + ##### CACHE SETTINGS ####################### LAST UPDATED 08022021 ##### + + ##### FASTCGI SETTINGS ##################### LAST UPDATED 08022021 ##### + # + upstream php-fpm { + server unix:/var/run/php/phpVERSION-fpm.sock; + } + fastcgi_read_timeout 300; + fastcgi_cache_path /var/cache/nginx/fcgi levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=1h; + # + ##### FASTCGI SETTINGS ##################### LAST UPDATED 08022021 ##### + + ##### VHOST SETTINGS ####################### LAST UPDATED 08022021 ##### + # + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + include /etc/nginx/static-sites/*.conf; + # + ##### VHOST SETTINGS ####################### LAST UPDATED 08022021 ##### +} diff --git a/nginxinstall b/nginxinstall new file mode 100755 index 0000000..ee87121 --- /dev/null +++ b/nginxinstall @@ -0,0 +1,102 @@ +#!/bin/bash + +######################################################################## +# First Created: 17032021 Author: Allan Desc: Installs Nginx on Ubuntu # +######################################################################## + +# +# Are we root +# +if [[ $(id -u) -ne 0 ]]; then echo "" && echo "Must be root or use sudo" && echo "" ; exit 1; fi +# +# Are we in the right directory +# +scriptdir="nginx-install" && whereami=$(pwd |awk -F'/' '{print $NF}') +if [ $whereami != $scriptdir ]; then printf "\nWrong directory! Script must be run from $scriptdir\n\n" ; exit 1; fi +# +# Define variables and functions +# +line (){ for i in {1..50}; do echo -n "$1"; done && printf "\n"; } +# +# Function title +# +title () { printf "\nNginx install script V1.3\n\n"; } +# +# Function to check if a service is already running or not +# +serviceyes () { printf "\n$service is allready running cannot continue...\n\n"; } +servicealive () { status=$(systemctl is-active $service); if [[ "$status" == "active" ]]; then serviceyes ; exit; fi; } +# +# If Nginx is allready running then die +# +service="nginx" ; servicealive +# +# Display title +# +clear ; title +# +# Install and configure Nginx +# +apt install -y nginx +nginxfiles="/etc/nginx/nginxsnippets" +nginxconf="cfg" +rm /var/www/html/index.nginx-debian.html > /dev/null 2>&1 +rm /etc/nginx/snippets/snakeoil.conf > /dev/null 2>&1 +mkdir -p /var/cache/nginx/fcgi +# +# Copy Nginx snippets to Nginx directory i.e snippet code blocks and custom error pages +# +cp -R nginxsnippets $nginxfiles +# +# Install php php-fpm and configure nginx with standard config files +# +apt install -y php-fpm php-curl php-dom php-gd php-imagick php-ldap php-mbstring php-mysql php-pear php-soap php-xml php-zip +# +# Configure Nginx +# +phpver=$(php -v |head -1 |awk -F'.' '{print $1"."$2}' |sed 's/PHP //') +phpfpm="php$phpver-fpm" ; phpclidir="/etc/php/$phpver/cli" ; phpfpmdir="/etc/php/$phpver/fpm" ; socket="php$phpver" +# +# Adjusting a few nginx config files to match the installed php version before moving them to the right place +# +sed -i "s/VERSION/$phpver/" $nginxconf/nginx.conf +sed -i "s/VERSION/$phpver/" $nginxconf/nginx.conf.high.perf +sed -i "s/VERSION/$phpver/" $nginxfiles/wphardening.conf +cp $phpclidir/php.ini $phpclidir/php.ini.orig +cp $phpfpmdir/php.ini $phpfpmdir/php.ini.orig +cp $nginxconf/nginx.conf /etc/nginx +cp $nginxconf/nginx.conf.high.perf /etc/nginx +cp $nginxconf/default /etc/nginx/sites-available/default +# +# Creating a high performance www.conf file for optional later use +# +cp /etc/php/$phpver/fpm/pool.d/www.conf /etc/nginx/www.conf.high.perf +sed -i "s/pm.max_children = 5/pm.max_children = 50/" /etc/nginx/www.conf.high.perf +sed -i "s/pm.start_servers = 2/pm.start_servers = 15/" /etc/nginx/www.conf.high.perf +sed -i "s/pm.max_spare_servers = 3/pm.max_spare_servers = 10/" /etc/nginx/www.conf.high.perf +sed -i "s/;pm.process_idle_timeout = 10s/pm.process_idle_timeout = 10s/" /etc/nginx/www.conf.high.perf +sed -i "s/;pm.process_idle_timeout = 10s/pm.process_idle_timeout = 10s/" /etc/nginx/www.conf.high.perf +sed -i "s/;pm.max_requests = 500/pm.max_requests = 500/" /etc/nginx/www.conf.high.perf +# +# Adjusting php.ini with stuff I usually forget +# +sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/' $phpclidir/php.ini +sed -i 's/;max_input_vars = 1000/max_input_vars = 3000/' $phpfpmdir/php.ini +sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20M/' $phpfpmdir/php.ini +sed -i 's/;date.timezone =/date.timezone = Europe\/Copenhagen/' $phpclidir/php.ini +sed -i 's/;date.timezone =/date.timezone = Europe\/Copenhagen/' $phpfpmdir/php.ini +# +# Create directory for static websites that don't change much +# +mkdir /etc/nginx/static-sites +# +# Restart Nginx and Php-Fpm +# +systemctl restart $phpfpm && systemctl restart nginx +# +# All done +# +clear ; printf "\n" ; line '-' ; printf "All Done...\n" ; line '-' ; printf "\n" +# +# End of script +# diff --git a/nginxsnippets/block-bots.conf b/nginxsnippets/block-bots.conf new file mode 100644 index 0000000..66aae77 --- /dev/null +++ b/nginxsnippets/block-bots.conf @@ -0,0 +1,15 @@ +map $http_user_agent $bad_user_agent { + + default 0; + + "~*backdoor" 1; + "~LieBaoFast" 1; + "~AhrefsBot" 1; + "~DotBot" 1; + "~MauiBot" 1; + "~MJ12Bot" 1; + "~PetalBot" 1; + "~PetalBot" 1; + "~SEMrushBot" 1; + "~UCBrowser" 1; +} diff --git a/nginxsnippets/block-engines.conf b/nginxsnippets/block-engines.conf new file mode 100644 index 0000000..d2a7094 --- /dev/null +++ b/nginxsnippets/block-engines.conf @@ -0,0 +1 @@ +add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; diff --git a/nginxsnippets/block-file-access.conf b/nginxsnippets/block-file-access.conf new file mode 100644 index 0000000..8aa2e41 --- /dev/null +++ b/nginxsnippets/block-file-access.conf @@ -0,0 +1,8 @@ +location ~ /\.git { +deny all; +return 404; +} + +location ~ (\.aws$|\.cgi$|\.env$|\.perl$|\.pl$|\.py$|\.sh$) { +return 444; +} diff --git a/nginxsnippets/block-htaccess.conf b/nginxsnippets/block-htaccess.conf new file mode 100644 index 0000000..dac3eb4 --- /dev/null +++ b/nginxsnippets/block-htaccess.conf @@ -0,0 +1,4 @@ +location ~ /\.ht { +deny all; +return 404; +} diff --git a/nginxsnippets/block-referer.conf b/nginxsnippets/block-referer.conf new file mode 100644 index 0000000..a386aae --- /dev/null +++ b/nginxsnippets/block-referer.conf @@ -0,0 +1,32 @@ +map $http_referer $bad_referer { + hostnames; + + default 0; + + "~binance.com" 1; + "~social-buttons.com" 1; + "~semalt.com" 1; + "~kambasoft.com" 1; + "~savetubevideo.com" 1; + "~descargar-musica-gratis.net" 1; + "~7makemoneyonline.com" 1; + "~baixar-musicas-gratis.com" 1; + "~iloveitaly.com" 1; + "~ilovevitaly.ru" 1; + "~fbdownloader.com" 1; + "~econom.co" 1; + "~buttons-for-website.com" 1; + "~buttons-for-your-website.com" 1; + "~srecorder.co" 1; + "~darodar.com" 1; + "~priceg.com" 1; + "~blackhatworth.com" 1; + "~adviceforum.info" 1; + "~hulfingtonpost.com" 1; + "~best-seo-solution.com" 1; + "~googlsucks.com" 1; + "~theguardlan.com" 1; + "~i-x.wiki" 1; + "~buy-cheap-online.info" 1; + "~Get-Free-Traffic-Now.com" 1; +} diff --git a/nginxsnippets/cache-js-css.conf b/nginxsnippets/cache-js-css.conf new file mode 100644 index 0000000..069861c --- /dev/null +++ b/nginxsnippets/cache-js-css.conf @@ -0,0 +1,4 @@ +location ~* ^.+\.(css|js)$ { +expires 1y; +add_header Cache-Control "max-age=31600000, public"; +} diff --git a/nginxsnippets/cache-open-files.conf b/nginxsnippets/cache-open-files.conf new file mode 100644 index 0000000..97b1fb5 --- /dev/null +++ b/nginxsnippets/cache-open-files.conf @@ -0,0 +1,4 @@ +open_file_cache max=10000 inactive=20s; +open_file_cache_valid 30s; +open_file_cache_min_uses 2; +open_file_cache_errors on; diff --git a/nginxsnippets/cache-statics.conf b/nginxsnippets/cache-statics.conf new file mode 100644 index 0000000..7182915 --- /dev/null +++ b/nginxsnippets/cache-statics.conf @@ -0,0 +1,6 @@ +location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { +expires max; +add_header Cache-Control "public"; +access_log off; +log_not_found off; +} diff --git a/nginxsnippets/cloudflare.conf b/nginxsnippets/cloudflare.conf new file mode 100644 index 0000000..fd34af2 --- /dev/null +++ b/nginxsnippets/cloudflare.conf @@ -0,0 +1,27 @@ +# - IPv4 +set_real_ip_from 173.245.48.0/20; +set_real_ip_from 103.21.244.0/22; +set_real_ip_from 103.22.200.0/22; +set_real_ip_from 103.31.4.0/22; +set_real_ip_from 141.101.64.0/18; +set_real_ip_from 108.162.192.0/18; +set_real_ip_from 190.93.240.0/20; +set_real_ip_from 188.114.96.0/20; +set_real_ip_from 197.234.240.0/22; +set_real_ip_from 198.41.128.0/17; +set_real_ip_from 162.158.0.0/15; +set_real_ip_from 104.16.0.0/13; +set_real_ip_from 104.24.0.0/14; +set_real_ip_from 172.64.0.0/13; +set_real_ip_from 131.0.72.0/22; + +# - IPv6 +set_real_ip_from 2400:cb00::/32; +set_real_ip_from 2606:4700::/32; +set_real_ip_from 2803:f800::/32; +set_real_ip_from 2405:b500::/32; +set_real_ip_from 2405:8100::/32; +set_real_ip_from 2a06:98c0::/29; +set_real_ip_from 2c0f:f248::/32; + +real_ip_header CF-Connecting-IP; diff --git a/nginxsnippets/custom-errors.conf b/nginxsnippets/custom-errors.conf new file mode 100644 index 0000000..789db45 --- /dev/null +++ b/nginxsnippets/custom-errors.conf @@ -0,0 +1,33 @@ +error_page 400 /custom_400.html; +location = /custom_400.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_400.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 401 /custom_401.html; +location = /custom_401.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_401.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 403 /custom_403.html; +location = /custom_403.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_403.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 404 /custom_404.html; +location = /custom_404.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_404.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 500 /custom_500.html; +location = /custom_500.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_500.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 502 /custom_502.html; +location = /custom_502.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_502.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 503 /custom_503.html; +location = /custom_503.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_503.png { root /etc/nginx/nginxsnippets/errorpages; } + +error_page 504 /custom_504.html; +location = /custom_504.html { root /etc/nginx/nginxsnippets/errorpages; } +location = /custom_504.png { root /etc/nginx/nginxsnippets/errorpages; } + +location = /custom_error.css { root /etc/nginx/nginxsnippets/errorpages; } diff --git a/nginxsnippets/errorpages/custom_400.html b/nginxsnippets/errorpages/custom_400.html new file mode 100644 index 0000000..18c680b --- /dev/null +++ b/nginxsnippets/errorpages/custom_400.html @@ -0,0 +1,18 @@ + + + + + + + + 400 Bad Request + + + + +
+ 400 +
+ + + diff --git a/nginxsnippets/errorpages/custom_400.png b/nginxsnippets/errorpages/custom_400.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd510bcfe9d3be0d2e63474333ef77e12dbfe27 GIT binary patch literal 19639 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�A@W%97II?V7A*BHfld?hDVEIJr$bCgao@G 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 z + + + + + + + 401 Unauthorized + + + + +
+ 401 +
+ + + diff --git a/nginxsnippets/errorpages/custom_401.png b/nginxsnippets/errorpages/custom_401.png new file mode 100644 index 0000000000000000000000000000000000000000..8622ba86c6ce3744d9922a0fc1a5f2bcd228b1c1 GIT binary patch literal 20168 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 iaT&<}NNneyTz>&LSrR{d-8&Wl0000 + + + + + + + 403 Forbidden + + + + +
+ 403 +
+ + + diff --git a/nginxsnippets/errorpages/custom_403.png b/nginxsnippets/errorpages/custom_403.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbf788318e21c6cf862e2861be9b41bbf8eb263 GIT binary patch literal 18431 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 xCS@$0UO)bTY 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 + + + + + + + 404 Not Found + + + + +
+ 404 +
+ + + diff --git a/nginxsnippets/errorpages/custom_404.png b/nginxsnippets/errorpages/custom_404.png new file mode 100644 index 0000000000000000000000000000000000000000..4343ffeffd2d3f3aa5f0aea737d796130c96a789 GIT binary patch literal 17991 zcmY&=Wl$Vl*d-1j5FCQLySux)ySuwvfZ)O1-Gc`w!96gz26uM``TE_ht@`%I^i)mN z+`fGuKj+Lut0+k$BjO=KKtLeN%1EdI?+d`I3IPtdb{G2aLO?)9*oup*$cl@TxVSl6 z**aK4K+q%wCJD+6s9;7Yt4k)ugo{cLkhLgbOGpy5B1%@G+C^v)Dj2=ME8-<%;z<8) z{r7LiY~lBit~R{3DC#SutCx$KM-uv_JtCu7_mvOv;fA}Moj@n@e!BUu*4DNQi{Mgu(>rCQ1ILhr%>? zkc^%N@0#~IQxb!-&K?at3~{8Z*r!9^Zt z*F|}(#ct|gQyTkP2KT&0mK~izbPE|3RZ%obp6_!`Kg`Hw4_S#nR0fz++5r z&5f7%eJ6wEE7CKw6=c%BXj;ZDB^U4SBu4$^$2*XNy}jkAcF4rxz_tfE6VpKqeZ5GX z)?r_zK;=!-4}@b5aquJP`p?$N%j4lON2UsF`0}~ex)V2c4Oa6?+?d6mZ5I_4l@J4_ znP696m3_+3GGQVXKHuNVsj`V)Il+;UM<^Np9-dt~HkQx4YPIO4O3;As{Wj@0VJTcX zRO!rTOf~~}X?fwfFlSUnuEQL%(DkLd#zPvAa zN>OT60<<&GEUPQg!~0?tOXMkIH-+O9SGzC#`T=S`se?V1g^Eug4df{>Vu;PqlBlUgdbR2^v-p` zg7mlY=dUD0o!pKG|D1^m%X;!2cGMJ{->75OopP0^y}Af%rXp7yhHW^^IPhleT4~b8 z)0V!5^-DN2_vmwhz;|2UYlG23Xv?x4aSY_@NPar5aWVBi?W7cA-2(glB+Ev0I655P zvhD#LH8Qeds2BaLsI7MKxa-mJbL~8H>HrDSlr8J84F?To3>It>34(;Q^wCCJ-n%C= z>&qbd$_y=n1EMx+b!9&>Lg9kVS0bX}eYdswOpwv^?u z%oUS|1H0GXv&YQP-l&>!dyEpbY7BXIL{U*gszM>*9xsZVH~6FqUdhEQ?4}2DHX!d> zTVcXP4V<{YL_wF#`YgU^`l{r~3#pTd9?CP%x~|pTJ$N*;8$`ZLIhWNILL`oa1E*}( zXwt05DqEf}RiZmPl%rI3zIA$}h}|4q!N+vw~IyjBi!o>InR z)s5SW1S-r+PL6HYqxN0z9Ta24P+ZUU6ed=LOVYaHW2x6!T6!1=Vg0{b znde^0X7)W^Qx&EYvf--bcnH6od4YB7%5Dnz;QKk2SI6JCUbBlhm4D7`?~e+1 zCyDSVET0Y?yZm$EYn;sVqXNl7VvMNlfcxI!*EzCDewNinnn+T@!ovOn?wOp}UMyrt zq~SZJNk&fIB6PzN__#TSmX@C9S>u|Tu11Ws!=c2BI+2ET7DaglZ?`ElIQYphGAeS}P)Dr0 zHaDi2Od#2-Y3*F6R*M1qvtQ49sTwGZgrpS2vGpcz#^1K*F-@8mJ^P|L|82mhELSXN z!A}dU3RtDA+{oCS9USCEpMt+MdvVqDksM57pcbR7mkAiJ28Ieaxz^Je7(-Z5lkN)m zl96UJlT)8}UO3`cO{Ebfn)$OjeMwDMR-*!x42g4m#q#FW#PRSGhLodG1jarvv6em=S-TUWL|~+HLq&9CYfm?)V7ZBEt6WI0g)(zS=rknt-IJ@(ok4$g?#nS2ora zTy=5d+&K{ZoeT8B^jqMqq8bXleT zw^R=S$98i`w0s0a588|9G>nuqto}?D7$s8TejeY7Hl|tx9vRf}jlwk8xSPbQ{+MtS zYg9=Ti=w9Q%>Y>#K0k=A;vZB0cfFDPY`p z{_-2U7<&5a=eJ*pW4rW~7*pU_KHq zt2)Q8h6eAIM|{q#>m!fK)bZRmTv5~?vi)0c=gy>qZyT)z2n*?Sw3Sm(Jc-{sIKcd$4_tOuD%aL zAWnX$&@AK8P^oGwThhdBU5=bz|NFVtxN@GUP_AG=%POeI$Jbg59>zj!(PIQ^QmbAb zdnJs?mU$xU`+R{LDAJDbe4#ZpYTzkA2uSr@U4%WqU6fw_3p6X)3J`(M1MWlcIsFeg zzju)WV6ml%Q zt<>)eIfQ5VN2<^KYzq>nQ)jg=m#zsOGV40A~W6?%(?iTTJhrN%^ZwAq~uaJ zZvS4oJ(NT)=shfO&7pqTeSBtviT!QD)3BNa1Wt0Rx|?5iV50Ewc1|C8GLjo?1Ew~R zOH0&FEcV>G*hA)yJ!1K8s%$Kt3!7FEvf^m4i$P@}E=%?eb8jHx1CNbwV!scn{p7~S zUBGWTR~nia2yiY$pzpT^3IAth&Uqbe z9L1&Jl;gUF7!j39-?9s+S58it&!2$|#1=@N-t+_`s?%1Er(QYBPf*E;H;*^f{iq;8 z#u4~Yp8NUB+8NOtat#6;6wd}x?i`h?(DQ%(W+8HazB)9`Y?SAEL5*d%xMV1z8lGty z?bx$(l~2IR49@Hc z8=>{#NihWiRGz(Y=|{ftp4H~~zC(i(P+aJs#`phRxa4L8%{L}rvh<0eCrYh=M+bC6 zvel|}jX^S%MM*Bdc%W%2Kpkh_=Bh$Nb8j!KLgh%4G3?S1)8x`%=|oY#Uhs&l-5bw5 z`*nqvJyq9SV_}+PyeQ~Qm-uKHspm<^4)2}?T`k>hT&FOI)YaIQ{wzxRqari;SEyWd z&&~U0EI;2;*m~aKca>I&23;ak0PU>+TJ+D`7iThsgnf@Xpqkh?G7kMVp~^c6cmPt6 zo~W!ui9^?ORGh%OO8QuPZ+Vi5IJ9IDYHwJWg2|EvTiy@b)agbmJ0{$vV|Ky0#D(Nz zk8HyBt#tR@bkel+`c=Maxd|8F9_ibc=^I-@z($bhIoW35#Nfdr*ATz5>d>%GKQZ>` zMtT?;;Q20(bQU{kMMbO{3$_qV)rl0XTD?g7bQxydTCL1kl!hT$hq5-%)+9& zfnN65zI%rOb^IrJsgj9DXvdxJc%*n`=flqX>(jLh$I_abk|a9cmv*th$ocSrR6uIi zC0oGc+<3p$Emw=(7#JPOP*YQjTiP9iII*z8j3ef2sl6p*;hG`9Vk%sHczk}UJM%R##*=b|0kL%9jcpP|-b=@B%(BeNJf zB^^%yZKq;ufC8l8T06+q{6V8X(_p%00U2gOjy5&BWzs`{534b|D$qZ}GoLT1(8c`X zx(+*o*w-;ngLr?~>kG2Qgnc#0;s*I_W1xN}P=Fp^0J&RFExfNfM#L1&%Qn4!V4H_B zmN8E*DO=B|LD-w&@iyUW-JP)y>;5*2QUgxTMn3LnIyd+x+iuK63^nuU*mQ}zVFFJO z`saf7x8An&Vi%n=+HDUjxqr$pW*9I#DJi`0b{X_&W!Z+D$lv~$LWM#wMQ5_?{nvx0 z(>IREdcEz9P^>mh)q2&$+60nQQc`C9t6#9A&hw2*6ejJgsxfxq-QAaD*LII7f!!`$+&uVKSQV4i_tzmAo=+C7-$d3x)PJ7mAryI zy#!TrCK9XL5=>N8skWvl(qan|BDmTbEQcDh&|!=i8_Ei6fy7k7NkoYd=k0wv$$ZgI zz$8_s))@Q|q*ev=1lHjSiHXg-FV2(Mg{-xUbB2cUraW=ddJgR7CRS%}>Wo!BWz`we*!uWe6z#C4Zd)aV_hSQLTQo zMQSfK4B#^j@A9tly*S|g3fv5}i_|>vxd29=r~TR)Z&>;3`T6gzcp0BhaarJ~@|48+ zdd!yaRZo|V4W%0;6ede`vnYg5T3)I8RrK-Kg72W=#%r#g0+!Fd)M8KQE`98D&ufqq z61EtE%T}fvSEfA_8ADB2*x`oFT8p)6l<9l;1=+-IWDds-uuj16Qe8WdI-GQvk$gIr~1)Yz}N=@Tm&AQ@L* zUSK@unSoGbK!BQ^MazCajJ>l*id$OTL5BIsPw)#HcP1NtAq%3~BRdd9P@*_+t9Hf< zGhIbPD}ANsT&>}j-7*RjCUmy^d_tIb*+?U@p*s1`pFaxBViU)DE$HCvn2{B?jaCIu z&%YYF;-)llYrDVg+RfQ=X7h&xS*Aa$+&gV4Z7~N6onA&EX?@GqbA9yUYt&=NR4iw= z`)}oFoC3p#XGSiRs#U+R262CW-f7lJ2e+^ zXNgcvP|xRAp%dbo&JgUHsv*MqkJDY_M7VTr@SJ%uXieC9t{x@>(=P+Nq_v8DVRLVi z3eC4A{}znoSsMXId>D}t_nBF6tp4$0PG)UAB`U)AvGHVPe)fYyhq`UP3Q@{ZP>aAF zf3jh7&dX(U$8~B3@kWm$SDX|G_fg!-dG*(suSQ*wS`~3oWwbS$xY8m20~crG$BTVd z`h;y&J++2G+z7eV@Y>k}C>yr`Uh_+r*~i6(dv>5YB4-}ff={53ff6-#&3&AM9a~GV za2CN0)+|`kdd2CySOb5;FvYd*mx0v5m6}$zz)u#SIjUl z9G-U$Wl>P(tR8`!d-3NFQlZskue<29Ea36|MH!21trwTgLin?|(W&WZS76uG^Q@*P zcH1ZgV7S?G9jUe0DwC0@lKQ^`l|4rVrz)2a=h))qx=6Pr&VU`G;escod{F*vrV;UB z%;=1$1R5dHLBFzd*6nVcWEo71*fK@=m;+m$YKNs5-&C)#!1ySuxnH{EUz--QTIn*e zlG)rgMe;PcM({frH~58FV&APzb3t84)zt%P7dN$|NzLuT^X|u(&D%hUdoo5;oEFE> z&>V|BE3{rPTznWXhSwwGA9X(SQwP+^mgvr_;31D^kvdoSxXV|7&U!zDUM_l(L(YGr z=PoQfm8ps^vNO0-HdGxX0U6yd*!A>`P#twyTTj+hH7T>!w$Y4lp!i|e(C`dA-LAE# zS7P;NkB%69>wWHpWOZx%Ib^yOqGDut`K8a8biv(6vYwY>f7-Ux_O3!r{L?W< z9&=yn?5_%?m(vyIk`Ywo0W-wm%)M+>8r*DbXdJBLwtGcHYU1! zNhV9omwJs>SwQPt2Py%bssh$w(jdXY_v(FRWBhotRRz;&oYnV*G*#0f1_*T@{{DCF zK9HF|jpHnF-6N)-}@9HeSA ztOBalZ#q+HFX!5 zKd*nVhl&-@o?bexDlMTn>CD>QFW-dnTap@o=|&7A-tIt~h+HlrE7rq?z8~%$mYw^rRZKaAxLjc)yD=_MWsF zvEwRHtx>I6pw=drr!t;tb3E%kNWqmijcq`X1iI*OQ30WXOe)LfJk}rwB8^zyeefgu z)4zs;SBGF0h5pMCyViWw2ThqMdYUUhYS&r_r_U2P;Z#*4+A_NQG zbPk*WT;Te%wz`p4jPf|YhYaK9bd)H(buvZFSKe2<_ z1sB&n)anbGbbipMRdQsf;4NcQq&RQgOCS0Wa;zP9AE6_PlfDMA679S2u*d<3mEN?g zk!|%gx%5}RJ#P1$ATH@)-h9@#X&B?``)J{Om*K(g5Gd2 ztQID+6sgVQv%93c$~cT^H>pIeCo7*9rzjy)!TY*uuN#85h_~E*Viu;kfcf;6^@(2oY5&#GYON)vE(Vn>9II4m*tD)< z!KVFCYJNmXY&vu&7WNa)%Jt-|xmsLM1^Abx!vR`Fnc3W^5WX5wN(88=_owCD0?B>1 z;@@KHO7PeK>oVrymvbSHi;<*ltoQ0-VqTeBtm32Fp2L>?*RHj4-VT$#G7EIf!I=0) zYQLu6tfzkOklPp1FmpbI#00`es#GQyon4!k7>VB+Jzf^Kf{!}I zqd|;fWrRkxH5s&%EYm76D#ELNn#WuV_Oiz=G;`xUwb$BqcAy}@-VI@D$B!BaJw_U@ znzXN`%v3+th{+e8%!?;VnTYlY%<`ZJ{~aP$#KXvc_>@F`_WZzoU_qUj!P=T2*ov&7 zsqv4QMkMfOco~+g%-0W{8r3&>yqM^s^%uMuDulgIrLA|b7>G&oou zqxUB*?ddJ3n+Rn<99kZ}Q7=lWLcC$A#L&sBlZ1qX zQQ|(`n+n|30)^9Vw++GIHeX?Uu54D^_)G;VB)9=vQW~`?%&EtXiM`mFy*+nFTDl>1 zLq!tQ(Yr%=Zz6-6Kyo=OxbV#EQeC)P?vy=$pWWeS$W}Y7?H#iKSV)1n<^xF2FQ{1L z`t8$w`udKTa+sY;75w{-BQTdVe&&72MSkL3|Nob&NXWUcL(TFZgvx9JR%C1bmJ=a282@NA@N zz0TmE@mlc~&_&a}583n{Isvs%@bnV68-5MmHOKc-2~klDQVNA^5mx^B~wZQklVI*T|OKa3eoCAtp*zR}WVqahE z?7kc}D>49(jM+kiKV8bmNPj(UQ8IlF8k+N6kWxH*%#>GokQbMxh-II1F4F%&&OQxg*=JZqMVD~A#K zTh&Dwif=64!cm=8QmIM}&OPN2K`-*z^J|5b?K`;?{S=Oon587_rijR0QK?cBa1-;w z7)1rtwJ!G{sDTTLN>Gt%?7>XcRRxU6M@q2ek@q7U1X3{`(dfCjfBn2}GiZU$KV7X9dJL4IKz?tRe``zo9swD%BA=>W;Kt=*0I-*RAOB0#?j6kE+d@80^kd>@ zSf|_nrv=dYi-bRiF9Xe1<|fJBatNithHbv)-79GAf4oasrSh}4J6i=9a6%!zWPI)# z;5{_ZC(Wa33qC$GHgFcH0TrcZ_Ylxy1O}cx?;E;n;U^x&In-AU>8dLEsv;!LL{03E z+f=IKrH_W6%ufuGX*2_Lcg-wGcuG5JX>Irc_|n|&+@1H?06%8@T4U)uyZ43@fm+_u zb*wQe3>kom*}-8n>HvkT(pm=bm^aa3b1=Ul&~rLT0N#=53x|<}t1WF1E$t%Zlwg}) zo%Q^`NC1^eF2#tBP!twLU13f`gxM~IkVl1CEeML)!{gwpXT6tU~iWA)yIe&yV~12HhNuC|XFVGwu=yZ8=A{Fy%O%U4I7{i#Qv?v|PnODn^K7 z%QN%zJDk_HoHQj~G$-6OC$DrZd}|x<576~LXa%8{wT>z4i0q~6lPfMRH4RL3X~d~G zrq=J`gSR1kTa$f~O;~qh6k>deY(&zi->{I?sESqF{v!nZ?t%KvsNBH|9bnPB2%Cq(wk*UNKt-EdQaf$>vL3|Q+V*Yp zb!0lKq9k7@pH$c(H@ZJOdb5LLzn2^$T>Io|@a55(>qO^q=K<3RKoh>*5@QQ%p)RZG ziHmAt{r*D+$VxK9EZR$S;tp_NsMc0x=rH4Kkm7KsJp2PG0)rT=*uA2{#bRLrA%W3} z2z^1O$Wu;*;Q1gosOh$qmBlTc>1J8R)H<_AP^5}DEeBGO^%nZ*>-ke zMZZPS$0%x3amf(~0^U1vqoWCX#r{(reE#eTNJjFM2zb4)lgIW)nR?<{r8^sC>Z;|D z;Q(fws%j}x)vldNx$NskOZ2w!I$r}XUoGd)k`{DvNlL6DRH105_OI?vRjKIax*NvLsx?dT3!pO-yEp^cvo7c1EE5^Mr=+m`k}Zhj(wcT{_YQ z)*bHCw2SY3j?T^o9k{HkeeU6)rGRlsZS3!K9zoDQBYOcR96`@TjIm)l`u|X#9(>A}*Soi<>;dKuJ?K zD>ID376ycVyKljU>*?v~(_;j<-Owrv?Ww@(mhyyQpUGXc^nsvou|~6?Mx=_SqNi#S zkFoYmp4DpwXtACVrJ7y&t_XD?_F41X(c|$>gWFJ||7@)5(^AVvkZ)!;F2@VR|>~hM%`4=W3byjO%TG&0=XSvNu>7DT6wbq z@ndSPz76mQ7y&e(Q-=L?Ty&Wna13q2LP|4v!umgk6RYMO5YtI&s>-NPM_K&Yds9{% zgqYWu4@J|$bq0oFiOAt6^||Iehp;fQuo&%G3H92YHhs05zkhN@byQ^hts*mzFxN7S z0XYxoE#Mag#*+Lmja1ajL%-C-wpHsvl~H11!npVgEIYO-R42{aOg8)bsxX?o^AgaA zS(bibT7Q@TxqrX#WM)^>k6k*{Pj16oZ%=G%U{p|0pqam0%ZuYNP{59;WTO4OfBny` zi#2O%!fulm0V?I~jo@_+FJb*9Tr!bZ^K==PN!(CVQIRBMWEU+<@RI`jDy_2Ao@ndU zK(&U?CRnI5_--R25WW9;zQDHkiY)iiN7^Yb0w#2H6oJ3*J-At+4nWQ`e~Trqjr`gW zT|FK=cH3#zVa-+mq*g#zm_Vs9Of>a^`c=p!L|j==a;wLiNiK#06H!k<)Q`RzAyN#c z)B(B1;zXAbJMMWI5SQ@sUxoPJ4|yEA)RGaAyB#`uq-UtBX|^6+0}840t-ff9wN0e& zFNQ?J=Ss<6;H_$~Vi)9!7GgF{L>iW29n0?h0I`Kt%BSX`CYC}9l26|?C!xD?cwhI7 zalxm%u|mdpM;t4*b=5;yh^l}B#;e0cme(IUhmn1Try)=2mJe&X>DmjpmFH4G!ZEVF zJAaWE7S7v~7C~%gD1W|RjHhrBYm){2&{TqN~Sd5)^>-_ z`S9GcaXUKC@{fJT!tJDXK%nl|4%k|o|I}XP>Gt$zB zuji#&HM2769N4!RFjZZ163Qsz{*QCuS9gW(tGncEb0xa@v(MkYGSLn(w}$0MbL-X? zKTPKM`Kr|YYUAs6r}h`RE~4~yOVd5m*}6CS^YN-gu+4I_OBGg{EL(2gI5{6DsYqvw zC<}}i*B4GNT#go3&(?>Eq^eNjZwMm3b?Xg3(TV32oazK$Qa{wJsZ6UT2k}u*Ww2LryR&G>6$4_orPzt>eyaO# zfAQnLQjlbo%2N8W00ILkSs=B(vCsT{n=m%HT%S4C$;LqBB-i2>_o5aLCGl$i+_e!3 zXmcDIO}MhyuFK46!QC^d@C&%~0L$Ft|JbxW)>mx!!Im&UII3KHAorQ2es=c!f%VKI z>E_v$H&18M%-J0Pv_zqP0NO(n7Ly-vpC+H=eW!pmbWOh`BqYpr+v7~-aEsqE#SxzC zjKHaut4%DL*pe`1u$L{eS~apBd0@2itE@Wklr^E0%+i!2<02iEaZrWNYnxG((Hhfa z0xQvvStJ(~k$xetskk+vHZ(LWjf_-@Ln;fS%yHA)2Jo;DoCAiG)l@;s?JsVcSoz%qb#5_E}A zOk`(a>Hqr|H6_UuSJnkB@DE(kaO@v`d08xa*pn{6U#AHb^FX z9Xyz&jh?B2-dLzs#rC09r7^mH)6F$L@eEttA(AdvCPS4{3bGZkK!rW-vvl*t&MH)) zVUun3WlYTgw6Mt;>J-oCT+Bec)BS%J`TxX$|LbA|NKxhg_azx#)5tA7i(s@nm$VR1 z*bOEGz$>Cm1Fu6PKyGqw?0|Y4(i!(vVoy6;5-V4>1f_rKgeLqUoY3If$ z+#<+8pv!=z5CwufD8_}{*2_$gW=FIX-hK!eIVSOz*?{eZFE9!-D^9xL8FWhvN~%@H)h@R=&+sVZde>B=c8#0Yu!`^uv&MmqeIh`)g)n z#rwC;PRI^1QNApS1^3MI#O_4RzCa}9z_(;$iX|{JRg{rmbUJeo90V9FG&$Hd_3LAQ z>&SnP6vD30`!=`V8Ng%j1fDZ=gSA)k4BktKneFQ@lexkzZoYAazI0tc4~l+rTzW$( z2awD8gZQi}a=rE(+1LmRoWZq+;yZZKJgH-PlFg>ry=^5KN?8TPeZ?J(n9Ww^f4&1) zS*;x8uyc`pmCs8(zUU}V3dc8Je;r|=xHmrp_#g?uNeb9P8GZ#NGI!mf+j(C8BEaj(~gzS$OW+bL1*$*@nfqTsB`f&PA5Z{&? zR&^K&TN!!>D4Z9w{NdKP@Q(09;aIpQe8TyiwE=v8c@=c(!nY$mk_f^qpGo+FD*d`%It6wU}YgQK(`yo%jWL zU&3$C?_*zPW|0wwsVi4z1af$(jxtZd#D69@>4@iF&xBu(i zeLcO@L8;nKzo6~WCN6xn2b=8SDo)baK1B&y?Z=DJS%!hs>(zSO+u!^R_cM>i5_^>* z5kpmRGauBf&3+sG(_)7uAi-Glk>y#<#4lmwWEMX3^~qHC<@m_6SJ}XnwL@UaJ#6~C zb(hMqMg7VlK{zwMrD!k$_ht3b&O=)4nwOKGW$TOUL-92(z0IJ9m&0(ob8pYJKm zS*gHa-_G9Liqi?-gE>uy?(H>ReR+~$JrqDpyXFkWRrKB%1Ny9E3pd-sRWNvql@iuj z(D@fshu*+ZTOA9^ExWHuobz{$gL0A1)rDFq`S z*#_|6*_Sl?<<~s??=zyx-p(t3?1^8L0kQDR%h~aZo6*aY^a}WhoVu-uBIWDW9rhkJ z|0H|4^}it;E8hL#PPj=NBOZBZ#z#Yc@3VjZVwwLtK;B;uk`E2O$#2SUjL=t&^-Nxy zw>6W(T^D^B34OxCm;QCV7pE}2ZiWw+0?X8JP3F?vKBR0zqq``L*XqRPb}lZnm-c6W zNf!g3pj(3W@m_*F;d}airM(j>jwYOzd)DT#(Lb>U6z0_vZ%B+O3QJL?B;{tCRrkct z|NYlpB0{~UC;JdPs-2-pDqo>$!!h#u;}aY)AKwAhBL4?dV=kCk6LZcC?`0#9qP{mW z#=9ryTG0RNMk_|Eut;%x)SU^jw9^|YY(pQEzpd>9PUR0~gk?wJSD{_|d>E6@x-Q%|PzlExp~2Mtx zeP>eNNt|-JDv>r35-*dP{7EwCtG?qY+~L`m^5DtWo{wIB+~qFr)Ag8wbV01BEiJP+o4gq_iH0cM}g{sQPHgza1rR5valF4!jh#8I3W@oaubH$)4rS6A$+sm z3;YDjHTH+p$&&|@k0kBq_Suo^`1VJ8QBo|9BM&vE#hW}4>Is>wl$1clh6q410r5-@9F(rH>vO%56#!lnUvE%@n? z0v`Ulp_gZ^(eOx;;>2^&OmKLXFyLrO;q}c{%E%vi0KYyrh06HiErY(z`;Gc#Vk?uA zh2Ldme|hr_Qcei$+oDD9R)$zMBsar8!?NP-LH<2HVQN=Cp5^9Ae8iEdt)#6@sh~$) z==EQ2g0P#Vl`19JPxkI{is-BdDp_DI8Z`?F*W>kyN~S^;D`Q{kxuL&neD5=SvZd7L zlVWrLnqoM8V{rDf*Ah_8w62?WbUl+YOwBvAxdS&3U~KQ`!sugHzIbu4HU`ocDF^Y< z+X-c0kDJB7!MUwrk*g1)5L%qgT!+qo)=F_~{+ z6HEg^+ma&LZ_3}x#m1t9kla=TvfEC1*2FtZrt?vAtX@aYHq`n~$XeoShFBzIac8IS zwHQ)F{kJV`@U=@^z|Gk0<;B?+Gp2JX7^8Xl1O!iMzDwrZIvpEXfzx}LHr3Ms%o&D_ z99y~tj;f__671T+&-jwXR-_^m7MaY!dB1dPdkL~;!>02Cl|0s{G`5@KYFKuuMj?yI z2hLvl8VVaKC+E;19zLE>$HU0ZF5gHJ9)m5IE_|F;A9Vb?0a5E%3P!P<(8VoA=Lef* zOGj1`PJYgi)r!0vtB-(=IO)UNJE>VoN$D{4(c8Ww!AeUKIdk36zx!!L3MAxW7qIH| znF}wB6M0~>;`ZJsYU85d^45J2SwrtP1!tYcM=d>u(H1?mw~f&_Y**C^kb&z=VD0-k z@zwib)L+ddM!&o?KW$R3_&+%P@5IE}`z17=V}7jV*_<$;9)D2U)jl2Bv_YD*kbv-k zu0-C?;cLf+tb>`EQ?gk=?lBSTwobWP$xj_sd?Z~{+=!{@H%4di^4S>NcXWCN9GFmO z`^CZ=cveiDl2*OMX7v)E%}2q}BNR=u{S&Gq&V_w_w2`E8V#6evUR`ad+!|WlNb+tu1lm$d*y^O$y zrV%lZhy5uz*v@IlUJ`cdI+mJiw2gBP!oRLpN|xqp&R3+$NJ&td^?r23ov`oLhbeNi zGYQ#VGLqbPA0kFhsJ5*K_DM=hntMJm^tBSC zNPu+d^o52HY~K^G(|jZhFN*$mqvv#R=3BPM`f z2&&Gb-wXv(lCnjRAkedwOJmSjbhg4e?%JVmNTZgM-w8eBr;3y(M$?@#uB|Im&h#HOA~J3%>Qbsw)eq)G-Z}Xy`h$pmrcRUF6^Q2 z9alRLde)RSZPbQ>S7`cZg4y-zH~iPF-aMIL;&F3Sr_Lj@`E4`6%scg%NY;X9SDhJ2 zRr3;h`h)W61h5No>%qLmOo(W{o*T6!MBjCf@tU*RwghBmFcM3C@~ixMqjB)M%P?eZ zxGYR|xHvAK`XN`$H0JdJQuF$aq*#N5NvcnAXghqTU)7-<8vMqM=>;!Wfp7Rmm-MR1DtwlA}q$^v> zd_*HYlYiXi=SjT%WKd9IFwX@-c|yioXH36f6Jen6T!WcooeWzMJ2pdDluuHI9i-|t zcDnD}EaWtYqm}Nx*%y0*r`-iIjHH?#5yp~86>y9r@28w~Svu6WAFPMG608T+#NSGX zrIT#6>L)F3A}VCPJb&Qfn+6Q<&B8d(7}Z|9yhz5PY3~^ByTOvr2#2F)QFPvO9=D^i z#d-lgLD0MJ|3eAL6;o#Lhp!veb}G7#Hskg(Uo0_*$AXgH*cUnf1srz$&CvRxH2s!; zBC^eZN}Mx7lQO3A1f|xq;@X?j)16zr791g0AuS?O1u9uQWj|OLHSfdlzL*Y&5xTae z6QWEM6P$~DraQRNjZ#c++osm(8|YsH=@&d`bW);zf< zgDjklG0hlbRg0FOYD+!CwgqP)?hQ%QtDtVY(t)P^7zVX#`bt-F@&?iO0tS zWU*o1QS2Xu_Vy|KkLEhNT+L}rd}8TK7mLZhyFr-JKANNTN1s0SSeYO3Ee?^>5l}mnW8Y_eA zgvW0>4%Ro2;4JVsBgg3?iQX95QX)o0f~|_iEZ8uaoXfA+UXv2175(`Qb-OG8rDkLF zr@Jrk8#&yj%=9y_zb4Sfv{{Vb{ixcUuyM}YoprL6JE1P^esFD=D^?u+Ww8rK%QEQQ zGf*}ch3J?HWnmq@dzbZm}Q^D|tdhu;W5+@(ABuOD6tL03-z4 z`z?LfdyuQu$V?XGIz6N92aXapyLO^35E(4P8?L0_(#z&v9JRAkk$SgnB{Dcj+s|*E zlU!M<7%yB+wBrCur*l^NPOfsI?`rgVX9Zygb~i7)AIy^#kxr#J{L+ia4Mt=p3qov~ zk;flmWWQ*tk9Kx)_!mE?@0UL(wrd-5i=Fi72;Hx&Cpkw&v#Y8Kg;c$+aEnE$9lyGZ z$^QO~Ym=T3eYe=QjhT&VxUFqzpmM+UZS(sm!5{@+I9g9L@S>RM+`sFn>Mp$Yddvj{ z%U%cz-G52pi(|~U2`RQPKcgf=p;A%&*0(abYbTluE<{z$!6)lo6>2r!k7YNt>AdTXOuT1KqUE($ zXKmDiAn?-r-b3&0KOx!KPI~0%<~!0VZk~spdp0X~FxB5pdTf}3-}wfIH*A>m*~-88 z6>&3{a!zB-O{~B2bquzMEcRTvh&w*|{>4FcY|>!oO$#?+srkr9@qF@XQ4<_GD8@57 z#eW;#_!dh4_1~7f7?yJXMXjEAjH!VEI-Y+H*GE4M3MDPK|BT80{>9BewT8+s{SV2W zBP1plZq*fj%Uh|s^$ui43&|s$Vz9JB{9%l5x{Avl{QaE%=8Sk7SK@BmTgUn+wAMB7=MPh-6N2F&94aCmiJ!ixLeonT*EIUBmvu5Z!-%g6XEsSl<3l zDnIe51vBL5lYe}zX%^irS19P&x&@=(kGUYgtAm4(UV0JeiN34WYUSeF@1p6Z?=bc9 z^T_lDJQrQK7$Y%jkze`La|@nQ|H)5L|H-AddaHWh`?1&5(D}p@jI4PAO;tUXV31Ti zj=H)5=T&dVQCo|xxFqA}%7i84{RruF&i4Gwv8hC2UNdLOCd?AUUWZsPZCd&sYqlMw9;{@-nCV Ye@a;7-u|Gu0RR9107*qoM6N<$f=@$<;s5{u literal 0 HcmV?d00001 diff --git a/nginxsnippets/errorpages/custom_500.html b/nginxsnippets/errorpages/custom_500.html new file mode 100644 index 0000000..6471c04 --- /dev/null +++ b/nginxsnippets/errorpages/custom_500.html @@ -0,0 +1,18 @@ + + + + + + + + 500 Internal Server Error + + + + +
+ 500 +
+ + + diff --git a/nginxsnippets/errorpages/custom_500.png b/nginxsnippets/errorpages/custom_500.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9d664f24eb23009205eb8931c1fc33cd6671ea GIT binary patch literal 21121 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 Z{{Sxl|D;zh + + + + + + + 502 Bad Gateway + + + + +
+ 502 +
+ + + diff --git a/nginxsnippets/errorpages/custom_502.png b/nginxsnippets/errorpages/custom_502.png new file mode 100644 index 0000000000000000000000000000000000000000..27e5280a6439c096414492344b97752d2c355166 GIT binary patch literal 20188 zcmafbWmH?=6D_4s+}+*X9f}7j?heJ>U5Z1o26u|PyB9C+ZbgGriu=32|6A|#`;ZW_ z;NG*&oY^z8_fDc!lw?s52@#>7pityMQfk1@C*V;7{|R^|yGGxDg8C3{BPppOCn-tp z?CNA`V{ZWkMGp=Di+~1Hu)~$rrNQ4r#ifWTo0M>+q=}mmrOVK5!?j2hjh^7X5GG>d z$@Vq>`7>>{*f*rB4W})R{_?@a(^<_OjCpB?$YR#@*P9Ho>E?YY`nfD6-O(%dW5x_*Am)R09fz-4b?&j(z4zhQZ0k$Ls8f}bN zVkCOW$hp6v?|ql6Ywe>5Yz){R1&s~vsi57@p>Hcr1IaoaUt!=yKWfX28`pf`$}7^= z*L#3JTK~jaqo3IUXK(=(s$62mfWiP$_4?=cMzOGx^7TV ztW^I!K6n?4c>-_3xyyZ#hCBLzjZ1|afjTk-1w{@eCnc`oy>^!43}rUYN~8AMS8{tSY}Rm;8@j3-%lO^eC2SZ&B$ z9JhXYd`q9z`5Jdt&%7ERaB(_@W2cnCb?I|?Uw(NFf)PhYr!b4=Slylm-|@Ee{DuCg z#*p{)#5Z&7zWXbi79>>=qr)ggOUJ*lAT@rnXzyTW@mu}dz+RtaD;6{B;iOX_mwd4r zF+KQ*(#Q@yQ7&R_{n&rUr$zXk*ii5zVlP?c;`jOEL37@(+=LwX$Sd}|h=_a)CCBwUp`~8NJ=8ZC^-8H^JgnDYcW|i5_B6S%vwv8&gah`&)9O) zYcc}&nU&5yhao%Om=31PGl5736%U-!>FI=xoDNwwnl`VpXDH$$e~SI|QLvjdP9{{Q zP@FZ5ZS)!{*3%>3m4C*%8AOeFB@NuY9-VsE< zKe)QUOYO(}-iHy%;&uD;=C`^$D=zE85aIPgB&|f}*+~NI#j07KHFv@C>Fnt(@K5`$ zkGl$5;wA;P2|Xo~H`RfOGaYyz(i53hJ6 zfy7oavDbItT1?$Gn%poDC)1?IV%zL{m2DUD4N8$jp#RU7$W5)`_|aaFB>a~H;qKLA zNqzm8>C2HFceBRTnbX^X99B$2DJ3Fd+``l1w4<&^nI~Vr6#{0-#}+RYEtPNM2mNOC zCY%{{>67?#wjJ`tdKwZmSO};NI?B`P%A9w#BTC+ZwM)NL0;qU`p;%jqDkmdW&BP05 zqu4a4JEH7AFtX2VD6Sg@6=I?U`zy-fX^Q^4NKfeZ<9Yy!fo4L6? z+&cB)A!E9C*00;IoOvp8*>?2RQNvhic~`y4YD4HAVS`H=2w!kgu(7fKxbxQ)1$>G* zp+b*l-EEGY`3+xz3?SR3H4*UDS zzaHd_Gg`mX#k#t~AZ4hp5WJl*c|2&_Xj-o`xS$6ddnmIV_RZ7f`M1hE4q@)Wi+;=k zivta8oE>=u7vNxx+7Fv^<}cc&aVyfmLrZYVU6TZnHxx3|+M(Ja$1brI(&7*1Oy#$x zPZk&gF$p7wzv1JX|F=$*vC)=_nw52@Sxcv*_MPqvZq{Ukz!&Gxz8^FsR+ySF;wD|K zc-`a8)<~ZrZquCJ+ho^*UJ@ndPMe$+-(y_-g!$)8MZ5dR*A6IWr=1iNV(Tv1f=b?N z*6~vqRVrriH;c1G&iztD75& zF1iG9adAkEo3O#hv#Or2yAU7ahRuTk6>a6<=>!0=Qn$DZRp&C>s-YNZGNBTz)9a$RFdyW6Io4ha$tb1zA6E~;E!ryV{yx37Z8{Pk|Nds3 z79%BAi%v>rbr}#;@E)Iq@y)X_^yBR~d~%BFk15qWiuO@+iDI=6?A?CLAw6si@QSNv zds@cIJb2(wnt?(#lrZ5dsil{>-9R-)*gbhta#CZf#eyA4euGHHt$=l zwg!fCObYeUv3t&dRlCTYRVvSuQiaCmScbwHD-)9Prb=Xzz1Jl!HUTm z)ch)2Ech|5+!ZW^9wkf3z3oml+V_H+_7N9u_URMjcj$6TyyFeO|Lw#@kJk9BHa6db5f`pAtE==P)*j@=8!fb+MJx_jlEo;pHW{M?ZTjh-~-UEGH0 z;Xsmdj97(Q$|dO-YoxJx0N~-GE`*SFk19N$|*A zb|fU1jv|S|+M{fdklThxgl;-`^iA~6@bUZwm;2`^(JxKSxarFQ(aOhAd^X@vC@K7_ zmyBEqoJ50nTKz#;syNEzF@CkQ@Q01L=oe&s!9|Eb0zRb9BwCbKy`Xtjr9y*Vv%;sB z3m38eHBD@~GfFCJQM$pDATSTDb3R<8+d2Bb<+^3=zjk`oU!NL}^4HN?$S*Cjl$KF6 zU)y^Mo{l=sVkgQC=lPh4PvdHqb2+47BT6f!2x7#{`Y)4Z=v~_z-4m;o3FvHtzOdsw z=dD&1VD0^f=emh>N$%D9<2|*3tk=4rn*EeanU`CS7Hcn?q^{m!~03<;c@Bcz#2-@xQ6E*vDu(;6kTd#{dth7Bvp9uXIscp)gcU0 zig!|XH&Wn~O(8<3TC@SHnEdcfe3K6S;FMk9H+F&4v!-7>2I~=WW=`F}Zo{fx0OE62`F&7sg#i;GxMuV0 z80d2bU02_Rsr>~7$Y+_vtVv5CJ!ziWBdzHN?}%!qsrx^VeSDSI{0JL|0uwSM+nT|O zIjU~!7XsE^Vx17xuH?v=EL*U}mZ#w?PX;<1p_(4XOTRNdp&!~>s+hfRmS2(lhA1(q!horuDgh+Pwoo)GA4o69G&il$NT?BmH(JoodmtuXm=snXe> zYK-FOD*+>9Q5UP=Jj0r$`d$}-Hxu;Af#7+dPi+2vAYb<2nOrcE=Bq4HZ z^Q`9q-*wA49~={XSxx`Bf(;|rm1})lA&`AaiB7%8!vfUX7S}(@s!Q9NxRW|BocU8H zK9c0+8nqesCECg|D=N?5C6OH(5_T+JNULgwPa8+AA1Ey*;hpvX#kusyR#NxteQ#Fb z;YDKye*0fadHL@yodyJnY!;R)4}GCX9jw&gg4tsgrWE4#XC+JkVFHO}2n7tbL3R95 zc3P^)97X^f67RMD>gg33{*%{01b=rld9%Q$rlu7!ZJh3^SX|k}YLRYpGLs*^dZ#8} zTaCL^OLccL{uq!ZHP({pD?dKY0OFI(X82B#_;MqTT+7l-4Y!u-on4b>4hc+PElS)Y=V|CBdKBqoyGPV9%aosZImxr}nVl z`_!F|4=D95_BibWXC@sz;Kam4MTyu|GXaNqh7VDSip)RuyGGrSM4s=iXmqdeQ4GB7a>oOt1I4ivh{HFebTI7Xmm(K9oR;%MHLrh2g%J1zN-+{k#f7L#x2hiEC+Vf*W;G~?Z99y{;ds}Y3A zf&XUl#K7MmZM@E2E-x|9tbv$<7SteBRodS5AFL_vw6yO!<2};7RubqdDn<(8x<0t0 z)7D)E==hh%JIDG?efZ2W`6@G8TS}B*U}iEig-=Lm+{>(lxYLqoRUDVs6tm+GrqKRU z9N#8*zH+C+h+}yY;loQct1j=;)=0KJ^G@VBObgiux@HHjE%C@9d0=c>w3IBIMb|ay zLjll2AaRs>(rZ)B`*gV7(?^;lH&G23MM@4XCuCB%3Z@XD3)zG_%UaLab)pxR)bT+) zlI}%R2#=mIy5G0y;h{;CMf)N=>|EetT-xJXJOsZ^(_p?fS5%kMYCsx+Vd#?Vka+um zZAeo+={uDWar$&fYVW8yX5y%H=XR8uq@M@LkPT#A5wVuSAuSK=1&!R?Tz|g2>{`@? zm^KnRWIJHbnX`O*1jJ-a>hi4Ue9URW1B#$J%+B`e@iim0m$s3hSj|U9Qe+2=u^ZWm z3o%k-$WmZpsFDYdrf!Kjab`@>XY9_;pS_Io*t_}u#eq{7`Y>r33-Kujs1hV8W^A)% zwm@DhF;5U>adSgz!DlG1OsK|I^W4#iy6D_o>CWZ5&#*Pa!wY7Io~6FMIi_*aAlg+A z2-)$`MnYEsbnAL3&t~trzf(IiW}y39LSARpv9 zRFF&Ji-Y{w>UsJX+SpG6x-@dY*u6Vsh3o$+8WSVsAoA8<$k@4RFB1^)ZzcT3$+idL zC{bHw+RFE>umUk*IZN*wGj7wTk09#Z5?t`n<5yrZ5E0P(KxfW*m#n$Vf@tC;Sg%{1 zK2gGTl0Fvh&5w+v_)e^Gdh{Po05cj{^`DC6)9IB0*qO((#+yxFDiOVpNsG-7{yhs3 z`AtsdCB==aBmVXGaJKUEVy(v|Na%KO__<;@@0D@Ra(st!`@3ep(K}_ zPL^_~W+3-+JrX^)IF-I;G9f4wpHt>U)$2_k#S4IsYNZpApg(qcK{QrN z&E-27EB@mX0Gh?}T37eMxvV>9DeuKue3@2m(e=J#lYgG3cFLV=FnY_#GhmO2T2kGf zfpI`zD}H{jFL!D}D5d8L=vmdN%{cU&dU+uAhyCQ?eNESNU;c45GdYMVqM$UKT8YsL ztn~gorNU(3OhQPJ2^}@>&))L!DnZXk|9O0BOeG);%36eNzU4>^C6`}sk}rA6 z`AVqU<->tq_*DuM27pQ6vRQ9Jj-O1jdSU!Lc(&a2ZLW1wgXw{ii7wO8anyM`+@2_n zZp~0#R98mdY}#)=?3`+097iT7HLe`gMt@JplL^qP^vPpfX3vNrzqWcsKTl8gelSVc zlq{$r?d?TRTaWv{T-zj}bOD><`MLK|U-n2xEU#iP)Rg;#ffaXdeG%B82tFaM{vfDV zx}eoh^+F(d3P+nErPPZ%RuEo^tzZ_YeiBev0FjY5bS@=dK!x^S^Tqg=^&h28LT!RbNT z>ixDc$cBLvw(~SiT}x9scqDZF*r4I7rZ%?u# zeKqxx!=(Wx1zF~+OlBTR`q}AMh;~oi(LG6{4hK51NLLUUkI>^D~pVr7AWO3)0J#Qg^Ki}_qxdOH*C)d;V-w=`z$_?TriuLBq$tkL9 zS`FNq5?($Orqtk6(j&wC^;N%e1&B(~bAPPX-0zqH;`n0z>G_ct)735d_5^S*fdY1lV+(&ve( z&+QTvi3Z6>NV4||YzH?@Bj%i_Pak!v$|(UU;c8<2FyvSMZLRYkx^3fzTKpsijd?w??gTDd6&3lSwEjcwegZly@Id>!`!q*3a~ zrQZGvHh)3Me?O$gQoj>^udL*fW@Xm08+)X6)WV1ktiWGswllI?3T$=K5=VH=$Z-Z5 zS+kIw-Uou{ElE0I5yq7I?kZbxHi4qqf+cGedhD{r6KR@`ABqk4;K zkZhBdSo8XL2>-5g_P=g!DhgkFJ9chb4;);XuxHE?AX_cWvqGIK3s3!d^*Z!;6D>va zaUiig=*KOIl8I6OpSH8Mi<=;|;&RGD+zz=DNZeR%i{0Hd>oRg09$@`1k}(lmao2bj zM_whu=RhA@trYnWS#akGs7u#$+7OQm@xr)^j!)l1#F3H6Z7}gUvQ+6)=<#gOeBEuo zJM?yQ#Oz~~Cwu(2Y+hi#{fAAgM8}(jGN9WO`8oNh*1<)I6a4cYywSNpsm4IjN|$s} zF@OAH)Z9v{KbA~%BA3iChl|mfc{rKyZh==tQ#H8tC)7c(l2QwXIxz0*R}qX98n7C# zTq>19loDcR+!s@HX-ArXVXQ(%*y9!^bf}zj@;~*+kQyL)q{F28t*z*013FzvNmWl> z+BT2kWVruRWu9VhxDu4U)L(blMSHa5=-A3z*jJR%=;%f-pAMb7atOQc@8jVXe*!9= zR;6_Jj3J=meEVhMC$!#sH&o@&IIqTF$3*1J$6Cmb|Lefhs^aK7HJ;|Z^vJK4>T6P> zB_fWaTR>NH7u+Op>8HU&$h_={8O6(+8jo;dWE|2ojGG3SD`RC(68_^$lu?``_wpv~ zMQGs*E+U5xKF935{qa-`fT2+TGmsLf1>P@^GRBOxU*+u8;L@j8jGX5toU~!vVTOk` zv@QBDPPo1(TGEHmA%DY92ckX>r@pO4V_ae0| zGl)!q5T(Rw+EmL6!I~ZQBXKU6Iw-BlQ;mraQ;|rQ8~>Qvcxg{ zX{I+osCxTF-YCuebduOcM@EzV+xqEH?v{L|A}!uR6NPz;+2XMZLkhi8;!!;)>`>_P z=X?CNRRAf_L+UI>RZ<*yGttxk+Ho~)UZ1YmB>}n*j@XNBv067fMv9+}tFuIN_51T> zEr1ed9wa8z3nm+tO(DGFHu`K~!{Atp7qc0^YB^xd&AGAEQCH8ALBDLRQm*k^dAC&= zP}lBGYb23OCoT*85#e>J#1_fg(QRIeahK1>^(R^h*$|5q?%$Uvjj_r_6pduwL1U?w)Sn+B9TWi}bgQJ`Rx(J(RNu3ASf$CXZh23S5(mdedcnAWx-X5$W|ALRDR+pIgoDxcrJ`m zjocYN@R+XgbZ%`xV0?tTj#J5Fh^B^?#-F=KHC~^N!tbE}LKgpf5C+^W1Q8K6Yu*EP zgh9RH^tf&s_UG$W5XVhg=e1x^!e*%bs;hrskPJ#o5nm8!t~#VNA=}^DL8Dr-c0PZq z&|ia+u=t=}R^VZrY*Jw9;_sa9`e$j23htKqgF(w?(?%d(|LYb_0mX_utmKdm&`|o) zPr3^DQEWQ_aqM!V?~TkbW%)7k#`05IZILkguhU!0HT=`~@-EB^5ub$T_+FF?a) zBiie*6bBw!^q9Ao*X+FYOk|$V2=oi7#LWGQ>Og0Y_PIVAI;SBlLAYk zG`=eqO8{s7$2fS@TrnZO;rVVI|K+sXZAuv)`uU|8d6`c|%Rn)BIug+TY@5xLyy`KC zn1S}+jbF({9N{M+8C`}VrJP?*I1Tx;vn(9RvOim`Tj#Cir&GdmR%ZF~K~`+15<;ZL zl)uo0lOpvYs|hE8Ecd5R21X^!T4uaNmX$b#qhZS?pDSm7+B;EsUdIjkqE1yBo>l5c z^cFzpZRgdGS|yrD`2n<<-KUnV0jWY&%u#d8@dGnZnK@Vx+`#bc0D-Bilw|My&y1T-EwNxqG%ms2)T| zo9=yPikW3JT73WyE!6d)gfLarD4P+RV-G!hHNdmO>*2qF>xIlvOS;S9@&z-%HYC4K z-0X^9N@z&WC4}7Be413R_T?~o8uo5YB$mhMvjch5_+B57 zkM(-WjFt8WG-*FQ+mB980Nu~BVhGR`Z}eCY+q3g?gpPaeSt*4w4+BzPE#b}qVKgBrPe6(>NU^~DdNbF?+d!p{$wCXLXp`UN0glN26IuoU-L z{PwouQ3{Vw`Ppeqr88{kih<)9Dx6XzmDS<;C?%(;()u=O;eE?CDPIwuD*fs{o4A^~ zLfmxPRoV2)u1uk-eH=AF^L=!ydkBMoK75^*LG6B=1Y`yl>ku-7PS35t(-E`C^@NTR z+#vEFiP^YFv`NRwAW}fAe#c61d#DkLuT-TDR%#4wsnGK;roqO3aPBbBVM$datTd{{ z>jsu@{I#NUGJ;t}X7|^X0)3}1+FawEg^aBoz<`Pva_Dn(BMkJFe|&q_^CC zRz+<`&REfJYtOTYur&$(vAM?YXAiurCVnUH);%V$cV4|hz2D11K3kiIfkC}bZ;CDGm4FikqTmwgyz>a0x6S1#tJYbS~nH7eFSJUHR*)K zFcKQi)5PeOTKFW-K19a2ROYlzM$7^>7G8C0-oiz|@YP(Ns;tKXSUC#&zRj8oijL0j z6}klp;UM3d(Mp*PF281Fcj6wpiL> zSDgmJrj-EZ6~A5YlSTjO^1he&Ij7dkp^QD9%8r-tEw-IgN3Lp297h6P2iQNeAmSl+vd4^nyi#V5p*lS7)F zg$3;QCx}=EYWU2FM>??Af+U31pK^FL>5Qti3f0OvH4Tc?juB|upcK*2=6k;i1x$;j zrQPJ7BU#_V;vB(e!r^!z>b%S5cT?BP{8+xi}Ocg>ZGra zgE$)gyIARl7uls@1EyO(9GjYVy0r11jT))(4Jgqzp z$q2cOL|o%EX<@L!QoCP-0hg6s*t@4gF7 zpFQd(U8xe_jvv@flHn^@!N=ea7!xIBo$z;dIuAY!w zCK+Kx3JbCnOEikLRlfitxzP`ijG{-U1eXV3(*7%wjAsybIycS^1AT<#Pk$@eWU27| zp}nFE5juazG;x+b=`~=GmM-Ju;_!DSUV5O%c}U(@iSqpUQ>!BSZ{20^odeNaIdlMD z&R(KbW)T) z2R)Eb)8=^8pl=947;goX#GXQ*VrVpfQnGYg@wP+(4z55_H$!qxkuUQe%bbs`aK>2E z#A%~P^I6B9KGC0It{wwc&QW7+LVyU}_y$D$+5LnKXcHo{R$Xg5Dp4N2-O+=gL4tN< z9%?1~KgY+xCL9qV(DuASxQzmu$^G`jK&ex{_sBy?iH_&Rpqx!eIon~k16aV{WKJ@< zg~an2p8-it#cu!e&tx6(4}eWBax#L(u<%Rea-l-f`i~1JCQJhWpRvesW9l!COOGE1 zs&zWo1hCvQelQSl=o2)o5&V0s7bMZC<~{Qil1V}+?E4WNG>y6)&D#bKP~gGloTFRa ze!A}uy(+bS1o~cdb2Q0+waUdsC+^ns3=JLbIjtG)y7dpCzjFM?Jx3pl8T9{^~N+nOmlLKQhriI|8VbXvo zs{`&?Y&{2~Wslw`MwZ?;n);URjOm-Su9zpMS2o~JuBvk^srOu{)flcoFc}hH24j}p z=FqAyEE1ff*Ox(jS2giiMh_);ONGtrZlqbn_$K$&t?V67c?M7NScQggEB}h8RlUw{ z+tOHsE&}x5AA`<%pM=`akt=gz-d@;c@|?uQJV!`^Ox)*X7Q&^&*7TfT*ZpRmUqJ_m z)SL`kNLqClcE+Z*=hx+$bwA;^aq=W9G%(xt)sg|`!bc8p9{Tb+N}(r$EdEV&su3b% zSLroB3@T9{ZMTPBl;&BwE~8R*w#<3I4}?WVtlrv-df6}d%AUPJ*|a3)^yM{hZ{1U-Fa ze!ebjJ2`bTTECsk^pQjTK}>26sSO%Bb$U4uS@13%4cj|UV{f~oF@w8v`JMdue&V1xZL1`{qjJi>|jR zbT1bG{bTvF-A7!k<>c$T(qivBTo0Om)V_}G+^`>NaaxxK-Rucd?eNum&$o%=$vXo3 z?TIC__rI}S)Xl3Cr-64!A!$8d<$6oK6tMI~gJAPZP(WX_s2O=As1;{5#fFVErTd7s zK<6a)rh%6S8CO|rE#b3tZ@GHdO6v8o-qihTY=K7Rmm$$T9(G1}0w=Bt`~MN=H{#k3WpVO>AzZxcHN`J3(z1eQ_HHsoCG@ijMHz(}VIKeK zXyy*OU#Et9#*k1it2{-gH0?5eXT>3Vq-QL|=pGNh1kCfd19oMdr_-Qn&)rBtKK~KD>jpEkraM(d zUqMTIwl8hzS5SbZxEMdLNSuGFy0iJYLOIT~$;6T#tB&})cCXy_rPJ>du;<@ZtGZPG zJ)&Zwe3I(+tJFR73N(AWI55a#LIe7Sg@4G3RS0eo@#F8?tC)J$y;^vrL z&(dWNGfxCVw5}s$-@p_C-xSLWcGdGrj+u;qcR0D<$HTsxgv*3#Y4x<}inLOh!uHNi!RY$LvvYy$w z4i^zJA!0qL18A=}x8F4t-l}%$Ia&;Fdnreir9JY1UdQ>;NJ0|u)u@`=+h0r`$kIh? z6hmhaYx5qC7TFX0!Rl+-x^H1FHMW7x-CvtS>}hU9~;7*(?<1z(i& z)f`DZsra=tPJ*%Tgk~QDKuv-&>v}GWi^U+?Bva>3NV9^+xHkFx3I5}{@rN1B<=pT2 zS^t(wibK#5sAjXsBS-ibmeXh^H9f|oNkr4tPX#jV72^vTIx?;nqdiy(&|xus%uH~7zE^Avi?)orsmDs<6r+QC;vCo1ygxVJki$7@^q%5N)X z>p0u(!o&^<5Gh9#@fbkA4Aj0)?WAiDWJE((8EJ{g?s-Fm!Qdp4gdUQ0g4Iqu%eZ>FKZZY;+G( zUL^Mxilj$Uy1KIN+cnA8j2N;d{2iY``>u+3MuQJi=Ta?>=JxlF4>Jdk<@Ru$Q6$#W z{KI3Sx8>mq5mzplv(|Utl;bH<%tsEBqG9qc9I1V=IFm94O~mTA23EGb9=l9)06OEX zRNL+ER;T(N)QaevaT^ig3LvV?XsPv$ZEpwm7vK{p_X7*Pw&BFWg<%>bXh&m4kdiGBaf?Wr59fFwfGOuh1_q4v}ZUtZn)L2 zUR&S;v_!r0WdF-Z>aQHTJL~}4UUaK(Jb9<>zt`DjeD6z~lEU11N#Sd(E4y9I2mR-L zn~ZtQ8-yeOl;@xQ_wH-lW~gAY7v|!Q$cRs1qPQ@< z`^2MjS^*MD{|ELGBrSA;BiWkShSR%sc!U&~ z^Ce}&SB3A+0o^|GEpod7k^f<;Es;ymj-5`70}1V1*2$Y|tU-QXiSKQkb-Y^;3A*#5Bk7K*SKNJ@^(^m&870W~N5Osfdl^+- zVR*H+vB!o>tfJD~O*5MX*g#ba7E{jlwuN-km|xTB-r7$HsM*wdB>8ct@aO9>E(g;5 ztUhprm2u|6V){CEtyIg$oCno-ZU&x4S6A88d3`sBx9+d@tQkNPW&iRIFMX?v)JGgc zGw;RyMC3Viuv2j5X;m4EaDrEzrO!<3_3kh^f=?ld3pR!W4=0}!pT6gY#JlIIy6SY| z0EeHEY5uKB5c<+zdw8SrWu=#G&6~fnvi-=bbwc+KjjO=YTtn6UPS606I_gylp1R9p zq`H(?m+8m+>a1vwCi3P^c&BYe_rLI1&v)oVgyy@S=>P$H8EG1elw|VDZ%H_=J4aws zD62ccjlEL;?~)5!gm@}H_v2j2g1V{6+u@3Het zOf=qV)irx@5kBO{6-QXB{m(t)_w4&eJu=@PI#&9JPJ4cA5Ee91c^AP5(RE$V3jEbh zxM;0N^vn>cZ0}3c2+}qKvSUda>@;Gyg+ zXrB1G1d2(m)$&V6@wB)eH`E8=o>Vdw6?rfB{~Etbj9@A6`_KO87Rs}+^jZ5L*nJ_Z^H}nXuT;=cq<}sVlRH5t9%caxY>B?JR7$lccE6qBxo&=Oq$JM84V`Xw=f;X>kG^rM2A;Y!w z@4GAzo>W z1WsnChSDe;n{g8gR$~C1S|v&OX82mB+Gb_%Uz)MnP6SN{s;AcOq}{w1#PH3jc;nZQ zNo`~4=~NbhOCNjOyotl#l<`uuR82u*7p=w;*7Ho)tg*u}+dt~7fx<^<*P_MU?V(QF zMSl+$ofndmdvre46*fa_-f)ikd4)6pOUaW*xXqub}T>)N!d@S~id0b}zTm_bt) zwR-jLb%hz)%Ab-Dr6u9b>LdqWQEFWuU%u2(c6dbK-;8nkS|d`qyfpC9EmYw<{O9+l z&$N1Gj4ZMsT34A$TsvX^_q&T&DqTyj8JF?PsA4YB55spCLyy6Q+2AQd{sa5~(UaN- znr zOIdPSou^|Z%9-N|Eh%hAOBK@wmT@ul9Tkxz#WA@F-W{qBVAbPafx-ZD86_c2o}&?P zCZVpt6qMC|b%96Q2oBy1lKa_G+buX5RK@ujY_EI~p63$}sZU0_Syvh#74Hu{5!cyt zf~6`Y9lZ+Z8K^L#(G$W5M7+@{a6e=SC;4HJ2!^cfQ3&(OaN^Q%3d(z%o6C(1EVeQ4 zamNC6Bn3pU(aN@G^&J&u$7g`(Fk;!YZ~xlm%42!n|560#o7NmVNcX~PC9#k#bNKw$ z%PbFufIX@2Wm?bWS>VH5olRalDB`2w$w*+E^y1^Xo0esGJwV~Nv&GdMqb?cv5k5kLx#zvwl&z^jp<)MmeOA0xdEczzbht2~E@i5nV*zByb{Z!Af?IBVk`15Cu| zF~iek+v8Eu#c>87&7+jc6H=oj&vD(+4LCU417RuX^c1jddQLqOr2MN+qoBrIc)v^` zNO9p9hW$-FhAj3Ef+b`i8v%-s|LHegEEO5g-g7}iyLIQeV96y*`l6thCG7kLI7PCK71#ph~S^tg<+uj~S-pmi%us*-MPv2QRx)H{{Us-QJ(@Bv?DTXn~~KOkJK zJv;F}=$nci($yB}FrNeYg2y-WwU+TJ{5SG{A(TJ|NVl~JKG20xS+l1ftEe-0a|s*e zXbRrl3tK3$Zh!PT0@#Xz)dSrmOYY`1#CrHlr0s7L7ZQmBtSmYn7)dsl#T+VOOXq#B zI|&?htX{hjv!}&>cPEieuyEsg=R7TUT(kPY1~gNpQ=Yv(*gbq6QhZ1ae(& ztd12=SMQuBypl21zKKuy;ddEn(BNdSmr4~M{^@-Sm#-bU?n6^|-eENN6&W)@unnSE zdy=8Ozm%l}o0OLiY4HZ#9h${OcK48G48^l^L|oiDQ3!KOae_@MYVn@+wF#wrCks8qLuP!C@e;-MMB8YZA3DI)A5fij)MJgg;A$)n84N^g9*sy0ivr-988rQ zRP~0e%tJ#fa|CgXa&%l7^uFusuC$stV{Q947Dbwedloz8MA~LS_s>!8p6q~8;qw0k zTnwZ0xySq5{+{<`7D7cy1tX9Ch4APIW$*t0aM zuYW_9Utp=m!(LT|u6`Nj_g+qHXb_df!eC1azKdUv{h0LSyekDb>Kl%})LAP4`HFOYZb!hg_w` zSXYN_#R?QQJKgu*#oil!gH$fZT3Wg=qR)PK=PV;X6OyQ@No`jg9?XO`X2%w@B*vO& zG5QO0I(v5B@M|P$H8r36Jc1xFuxB@IkN=C#=bmNT&A(;C6`w-kDL`Lbyx<8Q>h6X_ z9Cd9yf?STwW+&2pDChIUCMVDr7gPA=w;cdR7$j`hw%+-a}s)B*DhKf zePmv;8-2c1t%A@L;q9AI1j`s}JDRs{4g@ov@6IrSN(0Q;YPhG*XPMmGKIr;O%^D*_qUy+ozPy=?j16+IBhB-^NJ z8&f}Oo*hk6s~tlQ2U5pVPcr%3QiJl&kQ&UV2^wZn4naJ2E{m(szE)bY= z?t#@$p{}SRIUU0N*0(a;)ReurY}+z#A&rcqW?5rSPyB3^FF7#*i8#s0qo2>0$B++7 z-t%7ES9~7t$3KDN)1S}S{z5XDwaCmSgH$FmZ*tvn8es9LNrQr&kjf=8SOfdJ+2cIG+%usLNYmTm`{Xl|-ke*!T0F% z(==(CsI48b#)KMU@RlfGjkk%&CEQn7U|BA*_uYP2_{*}pU?R!X%s$_kVQ=UEp7%ZH zIp;YqZ8yHb(xOEcH4>RpNw?+}>RGc;d)Vl7Uwn?kZo^@*P_}I|xvCXSLL3$ z?3z&K)RdOc(@*xSOiL#qItFWFEn=k_n^r?-O>OU{Xu{C0H7a(*!JPJhmgty1Q7MaD(7#z)!;0>WxLM?5F0yOozbS%P`Y$JoxNvja`1+04X)P(i-gBGQ z)2FC>@2^z7yN}zA4IU-6=87AbYilr&%ZILwv5>~ndDktr$o^)6^Xl~ZI>{mx#xwOYZM?Ok2ib*-2#6${~=uA<_eLU?sX z29c?$DCg&p^2|nplgD7USvmLY2D-Ic_eIm2qqZDAM0D{cr$GSfLdeG+X4-X~<>guh`}M_LnH#@FXqozfJqUKEhIU zlb(_}(Wlu%D>~TUKnMv32kC8~F=#PJbNE+xA(&$>L ze&tt~wJk0S)Gr`_hqgMEQP%oup?-XB_Ee!6!V^JrW$ns)&(}wU@ZiE6Di7?(+}X*k z6Q2<}c`~Kjwo-TY3`V^ko7qffLjzs)b#xRSL84O8cK$1R&J|(N>3%S~07TE2;a+{& z_8ezsKFk9v@&wUJAD5Bx+-4jmlMwZQb0$K6=00`H^Fz+zQ>fL*vYd{jTAt_D?WRzx zk!4R64xq4v!MUU1vWLs&l9VL)aQLF79vOeJzf8vX*WVQKYT;xznK1YC;INvB+p&|Z zoxdA$-~vGEnzg8(-sC*V>zsK}XK#KapYd}N7cF*Y+Hc+@X!3N@)^9*8k#OUkeeMg| zPlDpnxz0xYeog(~1vd^J;N;9{bQB)JR8xh`U_drD6aR!Hto79xbUM09&tq*Iz*G23 ziQV!d**kylRg<6ac%G9`OBw@W5ti<5%q?1CUfh95EJl_w9#LSB&=DB$v$3Ra+~oE? zF_R_{x5GVU@%Esl=@W>4;pKaFbg`cwil`_OmgZv7wI0lW4}Na9*)gqy6YQO`jbO7U!0_V|A)-@;3K{{upgtgnbaqr_F88h zYG)meIo_A|?hyt8s5fjuIc_}l$BtsrHe)FLitHnWlq|kOzKnP*hnNL9jLgcyUnU#! z{p-%2p=#e=0%J!JoID0qW|q*^*L?jt<$LonRaX(YXbFi+mLeZSiPwDn8np!lw0}~7 zG$n&cyWhY+D2UUmpFlZx9uaA2ggrR=o>CaE<+F|sYCbzoTk!=(q@~k*=pc#Pwxdi< zrQ*;(X)8R2tzAdh{6(mzOeH!yd(bs9Tz0WrtyCU6hUVV|7%!I+GB1ZQPpv0xkP3`J zr=#vv5fZta_?fe){P-xb)29;@arY|7w#o`FuFm7p6Ga|dj$6xbaxr%y$-DANm_7SP zT_=60Ec}$p?OU08;;hHJ2V8Dy8E!c2c0^(^Hj8D@A%i~_OkG_BC=@tsHeu7~`;I<% za4egRE{%qsmKNkuQ7F`E^tCkv$Q8)K!hSLXGKa-Zjg15;mEZYL{5~+Ww`0(?5gHdS ztmEQWU%{+xX4+eO20zh#@WF@wf9Pv#Df#6J>>WCyHom~PXP(8_(ZQ){StRdz%c z6yEzx=YtRT52}wI5rkMx`Ma?ijoiBE6eg)BOz@t^`%LG95BCqc%UrKbGwAiy{o?=; zdFu!YkMKFV4?g@9AREw?S-fr)h6`sIHOQDVpQHQW!+nPM9M|%+wXv4)<*QH)(Wv7i z<9zVpK7;1sMJo2~!Fcr&>eWw?x^~@=Z2$iN-Dg^%w~dpx00000NkvXXu0mjfkjCTJ literal 0 HcmV?d00001 diff --git a/nginxsnippets/errorpages/custom_503.html b/nginxsnippets/errorpages/custom_503.html new file mode 100644 index 0000000..18176bc --- /dev/null +++ b/nginxsnippets/errorpages/custom_503.html @@ -0,0 +1,18 @@ + + + + + + + + 503 Service Unavailable + + + + +
+ 503 +
+ + + diff --git a/nginxsnippets/errorpages/custom_503.png b/nginxsnippets/errorpages/custom_503.png new file mode 100644 index 0000000000000000000000000000000000000000..bd02d37339cf68e01caa03ac7df3a8282c0f5ec5 GIT binary patch literal 21265 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 R0nGpa002ovPDHLkV1lZ literal 0 HcmV?d00001 diff --git a/nginxsnippets/errorpages/custom_504.html b/nginxsnippets/errorpages/custom_504.html new file mode 100644 index 0000000..2c2a0a5 --- /dev/null +++ b/nginxsnippets/errorpages/custom_504.html @@ -0,0 +1,18 @@ + + + + + + + + 504 Gateway Timeout + + + + +
+ 504 +
+ + + diff --git a/nginxsnippets/errorpages/custom_504.png b/nginxsnippets/errorpages/custom_504.png new file mode 100644 index 0000000000000000000000000000000000000000..b382174bb55b91dca2b88322114a7c1b744be0d3 GIT binary patch literal 21866 zcmZsDWl$Z@(=`Nlg1fuByI;>sX#aS|sN zM+<8^b1*QP1pfpSCY={v#QUqRUgtt0WhvKdzmhYO%bruesqby@AnNVmsYoYN1#rIVRuE_-c+;JZHsoRwgf+!xkzxH z$I*FS4s*VfI`9jP?N0{RoOzZl?S3>f8D$mG&y+mje;wjY$U*z8#P7;|%t>;TTA!l{ z5NO21{$6~0?>%2yZX1DPrp18ZGt$2&|KxW1>9*oHfVjiq6%tkmLQ87Qs2ZF-uSiQz z_W|}`1)8Z^FS8v+{|xM#Qi%yI60MBf@b1@p_NNlWsX&CApWd#vx!X73GSffNxPSGM zvSgN?xaWC#woIO`=kC1(fW-#8)Z520uLE|0Hj$H-0HX(U1#6Mt(2xi2z&Xk2xPpN( zk$?Pvdld_N05@UWKnjvD2jCc3mm-K9QpOz*(aviuio`PC)@FldZVbAB�=#s*q zm%3Z9wsOOJ9)=qym|zxXHsX@K|72o2;jQRB;a%-|uSW$+{QmWqPV`8(5cJ)t`B=l` zU*@!HVxvbo=x?I(e~uy9L|r~vlA9!<6D)OR2r3EmrgohoK1Mn{`tf8d{w^-=d>nU_ zs?v;#K%<~0xmXTLR%CBcg9wcX z4dIi6+$2RVqZpt4^;d?R19{Ff@5Q1`^ZGkA-;3zh0Oi9=00A z=n>SYTjgbJ36^XE4{3-HuAn&8<%|v!5QuG0Na&WFYU;D^OXJ)DjJtU1@skVRq5-#X zI(*tnqH?Z4oetZmAd!N~$M~ztt8QLzUV5=5W(_3Pb!3bm-1;=?o^J7?QNY2aeQ3MaqTx%OcCAiTdVNK?RH2SK8>m#3z{gr}HBNYNksKw*?VYGAB7e~0NQ_j# zkQp#?<#?!KDLRV!hZ$9RK?Q;Pig#-P^j(v}a(d3Rrtddgva({Ws}9*r*j$yEQFDT9jcBaiX*06z-4$k&)3$FPo%jd<wFj(En=D^yuuJ=b`VRYD)HyjbQosM>VS+SUzptT@-%6t3(whDJv!bM| z47Oz~gwd8)Gb1^XntUo%z zfQ!jtchV<)CL}K1?MO=^!e_D?<}zYke)5S77A0`t2Bw@fPW5*H*fyPO3E@(_odJT+ z0hgwsVWEo}`cj<*i4}=x0y>A|4lSm2x^>zN2e(g@NCWW{aI`rV`;0y0&GxRMrpQO~ z(OlI(m3f8oSc_><3$pcnwaQxXH z6Q?I5CvSYcM7dcFU@wHn)T_*znxFlvt{=T{JkEnv-`i=?;4Q@?V`mba@cN9q*dCJ4 zImy=55OV0K-wPxBvZ>Y_7~^(kdCvXT@xy=H1uAQ-5>8!fla_9D;7Er7>q{6q1@(oG z1YgS5#nY|ZKR<}+9L7feR{|@mA_|Pb{rgRiHuj3#@z6ON$(k8bEgBiALPTP|VHsb3 z2z+jq%h{t&oF-66rUAdFs;-KttLyb|JNHBhGq+?y;a5n>R50L21WTX5 z=u%__>;O!x;g&~6ti293VtrbGNmnlOZu5W|9HqmPm1R3B?@OpeGhxF8DM|CRTBD0I z>fydUix-8#>+XIkj2Va|}5a=F!z;Hsv#djDntqZTtho07aS zY1lJofzDe2>_|gL8OkI#$K~O(nt+6x8;l%el;?_Lxa2hSKR${Eiqujup*IJx;vF7; z?{3uOs{)BsM}j93lq*@y+Hl`(33I=HZi+jd*_c>G+|WNt5l2 zR(omR^V|(@&etUO1}DNs(}UH7Gkp0T-^L{QbiIFnlzV#@uX6qM1dt)P4&g_#c7+U@H(=|BNg zj4f^TFEza|VVwTs+pSTbuOWm0`u{qHoW69{J#WkE)^iZ~bf;rLV5KiwRuEiZH*u&E z+@Q^1#eoM#*5Sc$;Aago8QuId8<8bF@EJFwf@-CvE7a?`I(U$Pg+IO8@ketjPTWe) zWzn)-n=k4Ix~9rGLR3|qJT1jV*ssWo@sBlEmZTBv2Vr;IVBz9^S*U7Z zxf$XIJDAT}obHU=iiH29(=m4`THg?&Eq{N{_<&a;k2R~yh*yObBIfM!H-Tc%*LUgh zwg$s5_EhrAiF*?U)Th=?!#^JU7EzMwPnf{sG^78Mv83h?cta;+u7NVHnH$*D*jLlg zR8%2}hl>|fJj#f|FxlQl=#DK?4biEQE>_PKz%@*i88kWReB=B3E#&htcvh5`DY^z_ zzI@Px9aB|pAAq(zS#vY$k$uNTW|MI}N)`JoXthgPVnyDRyXNK?*x1`{ZBA|ayyu4z z6h9B9E`n>!|5yxFX%>z&V`R?=r7Co;`=1jdH1{D@Hl36^me3Lmo?q`0PysPaSvjzS zCNvKjabxQD^I>@X=HkF)hA}&}bz_>lgO2P<8PZmA$a!)UJyrYs=-9fP5*wCbGoon} zF@zG4P=#);;HWfb~mYX1L$S07aNabAq*z%6WE{}12O~e-{fI z4A--`myHb^Bm_^Ktvut_$JWU%M*FvzFW#vCXi!konM_I*l8KG4xm8n1uB|T*EcI~* z3o%`S@zjU#fwM~(#=^yh}djggwKAEX`uSFZ5(tS^f{wmPJLVw~}CCb+Mi{-)d z;Tg2Ox2KD}cQt;jmOt~<%XAiM6BA41p%S*$8u#=pWMoTm18r`Ds~M}OO;~VPa1hJX zD|F_D)yaA%RvgW3#%G`iU1f@QjZN9zH|6ctr~7@sg?}Kh6Be32pTa_WQ=|VOd)s6nFS@O(n34|T-32-`zf*t;Y{y-1);-j|9JT6C z%r8^@Hs8e!c5SQWC-{x*i6tr^8Dy%eN+EXqdcXVmU$W|Wd%K00!ua>TV%}g^z8nNa zbokFP*V_9!G-WF2Gf_=2c%8QSgRh zs=3!TtT1Fgar*FFs{WFaMW0({Tz|~oF6|i!6>;+X!ic*l38zE~*0rU!A9b`KF^jq% znw2W$bKVQnkF!Z_91Teoy8u&G;=`s{z#IG2Z<3YzIDWFE>PPn%lyjP<(W`0mfd-~+ z{d?h`L~A2P;5>8-4kQdo(umBE2}05qhK>5t-e0<6Hdn^Pe&r#dyMTt;PIb6NW!;$4 z>evDi66#)^DoucT6SIFUeSf&&U|cXvLbwWvF1;Mcq>9YUf(?<2OOe&32p%h|pp`Pz z@Ay&oxe5!2z@#cAi!}@5$1;d;zpP-UVf#hDYGRKb;f?;@jE0~*wn9b95BWeDkkf); z-vva^q#6`Amexi^O(BQA?2j^7&-tkKbQ^uX42pW|*WkfeJVvWo8$>=rye2$~2!ocF z*oQNFs2JkEc#G?uiN-w9tGmBXFO3^kBn3W#kp{RC?dU3Clu>=uTFt`zYvM^3xAPpRm>kWDCH)0?Z%K2ih56mzCUxOn|LvqK z$d=vAO5E=Av(9zy6wN}xef`nVu}f^ITFX;)xi8^)cm&!Pi(fh*ie*D|3%_`s8{P#R z2O{86gJ=ELz?hrgKr*A4ExdFp_#E@`YBIsLZEx+kkS%?iSpBObmN#w1?(GSGJUQVLhCFU+}&=9&!nL+#x&-0z@9Wk2i_*t}-WhAH!6F8de!?|6bhah&Q{$ZvZ zqr5!iR@Z$9p4hYBs`x$ox(qSQ*{5sq#KR6M)f^iYaC=-u2N^VULBW%Uvt5~)$Nr1R z8c2VCLCQ_166$X=8T2~cJ5ff7;Yx~F1g#y)^7L~jWwvA($mp<;PUeJ2(Eo+4P97v& zyd$x;HB@!nMvN!5?cp3;YMPp<2zO1(cBSL6%;0qq5ydGOlo3egbIIx&pK0iR@4Ia3 zn>f~eIILN$|zzo~^_Qx}tP#S?TeC1snRf?9Luy$i!jouGYGz@KD_ zOI340Nz4>)$d;d%PC!cH$*r{JM!x4nOP3Pq|9qDqTipLlC!=WG9UdFka5_pagMza6 zD)e*yuYsPDGfy;i$Ai5Gzt1<)4rHaCDjG~Bh9_2T%rsMgVU<;bXLf%JO%m10i8_^= zC04bpiiM3Us<4EwZiF6i+~in5zS#a)9hf8a5F<{hsXn#O%DK zn{WGGu_4FGKrqOdWd>|{^Os3efo5eIXErGxo7k1i!WMxXFd1*o0Zv>pXS3sV9fnkM z%0x4Y-*?1@BbqI7BGx==(*rgG45O6@z_7$Q02eN1UBW@@vYK!7I7Ch7NZb0*cDKd8&G`TP9)4s;u;WK(dC0SC`NUGK^*==C@vw zq7QJrR*70Zdqz))Ilc;nY5qLnE?o1R zYPvcg6_w8u>>{cu6cNJ*u#86U@UM6f+qbt~5a7VftA9#s?EHaGM5l2REuJ}PyEjB5 z^tG^C(bSg$NlGfV*YOirs^97XVU7J#`^Dw2`9yd>&N(11-uLO%O^uSMUprM7nAjWZ z8JNvi)U7zCK@M^D70^EQkhfshofa31&lcG{SZz<~UVrr&JcmKjENXv>cH90)?O3wp zEt4ThL1^fcf=wHj_FO3CPg21HL$m6YbCDhySE|J)f~TF=$R$SleN2I{S_())J;LJM zT=+goaAs@?KbU0{f1m;x%A)_Sr$xnAc&HBgip#X`PVK8aCmsx%WA%8Omf~!9Ay6e8 zNH$1roLuPeAs0Sz?#pa=F=JATU^z;{3g-$7(^cH8I(kYZsKXe-!^>hCbaVB-jZlyy zT^6&m&A#t4SIYa*_P%xw0x2m&Mfh1rh0|_>j6cs}@UQ4FCSgwVuk3^uqlspFK{Ivq2%JdcW?8)>0stV-F@1kd|cK=LKf&_+ahE+^FSZ}h`K=f<`a~xGfbXQ z-|TYWpGB?$b~Xb;(O>67)-C&^>3JYD2{tU#{TS{E8X^{AfMUv;bUAbxZDK5R(9gHk zk~*&niBTO_dTVvZ@|U4y8$87Jox9k86@bHNEhFpeJL!4L)Zy+?RaN{!@tyH_gdK1N zb%&y4#fJS!6qc(EVx>c#&oNx+wk4|h(^jc5{c7bH9cP_Mm(*{H5=@qI3giPC8m;w^ zo>b0;am!5LHby|`XC$J7ODx& z7foj;Y;fQKs_Y^4XAoJAV#DzS|3SwtG*~nAnA80H7Bk&wI{ZZKA2e{%kuEBhzjKm+ zmy9RVP(%ps&S9h_n{fWSO;x1Kj9QwopSfv2Uaq9&d&8Mbgb=%HV19>k9SJKm{8gi2ht zc=7((*J3sT;$S+9HRN~eKL-X)da9(uXgJ&iiil>I_dip_4n~cpilaN)e=Hhh%_pcl zbsYr_2dW6i%#N95Ek zE4zMT*bNuoT8laLl(HLo3f`bc=2~$j0oLOZq8K7~XE?(e?4+gaq^$`^`MbON*Qh+b zo9)=86YX&e4jWFJCLe3c`Ja)?4dw_P-8UK86kSVN!3Exwy~e02N=XJJds6wKX+dhdo0&HE5IMy^Bir{!>0NpVSym4D?)@Ug zNnhUN1+x1#f2F%~gkOPxd^4STFpl8M!Q1*|b;U9Puj##t#;ttqK$GxGn%aa_dXflb zgmV{olVX^DzBU^~4+ZE$_U`EMl9wd>$YiGE%{4H4?F^5m;hAMqWKpx@cObEX`zD2j zE2TN}m7Q2{ep^g(NC2|`m}68D1#(qj0)+6(L}HGKeE#5xTfw-jvz+LWD&P2Kn$ZM# z>zAq^1^NkcZ8f=s^*G^`$=ip1UlsBXRZRenoQt)06Tc?U-L*$5uCNuSay+)zN}^_g z*>Ob>WOB11diQcM8hn?heylCSf0!;CqgmQ##qvY594lw1$SqSG5O5aug%ZeH0YcQO zIHIYl8pk|nTsp;-{wC9j4McZNH|LA2rJDgg+)nze^4nKTTp%(b*513kw{-Q%{G>CY zGbM)Pf(@7j%d?3WtT7_|H}&nmk8#`g(tab9X=mE zc06FkRXB4zZPQemw?Pr{FpIHL^TZo5(M6q>x&zOpIfq_dJ$Qb5z0tE#H^!;h!?pWR={VPVon2z4+_ZDxc;!RW_HCZ^7N6l8&g2MXzs@L+T z&3@5p(2T=`Edx-n#_xxe6M!0KiM(S4yozM0kOudw1OvL`n`8)3LRpo zJYAXvc?Jl|O}shY_}lKrX*izovRf#%HE zbANiJf!NXApOp@SEhbRrn=C>-#0x5LinAerlvdknvoSk`y6x(vkpvHwE@oh3MIn1*WB_$Mt=&$Rsw8|{u|@pzHij4!c=M3F81geDH@QUz_Y96L%$A~h~_KDhyO8( zl#@YYt3u9E4AU*7jozS)cr)N%x=UeBIy#?N;jpW%?P^Xi29oflH5|b6EmOn)t2%1K zvw=Sm1==~dD^!i#a4Itg$j(HBi^-NQy=CEtcVGPlc`8BRLzq9<*wDa3vx7G-y%kDF zSXVp`cQTU~s28^AvMa(gJry+%%OfB8cmzH+uv2W4OVRUB^5z{?&~*lh3__=!x-r9k zKqwj+7pv$`_vh>t=@Z3ZK$vouGTAg9|2l0fq9-zPt)6^^A@=`z0R$#;!-#e^CcA}ASA^2?CZ4D&D%el) zSBbchJ0QYlBBre{G7tgzClxIr;d9Ypc^ll2RlgZm{si8dQds74i$DHzPoTHxGclVk zu6|qOs4{F10BM`QfP$-+#=t+T$rr&&H7a(gBx{E-xn}uC<70=rx3^rK=PxH7Pq+Z5 z9nsNWKKglet?4@=CR9)YW#iT7d?`4lX&t#;%~? zXL5lEix$(!rW1pbNYe++lb1ZhD3);{A0icjXQ;N7Ve(jzx0*2wrV{(-?c`4+o#m?2 zXlv=nmDMK}h=7HSg{&sP^?EhAO30Q*oM!cSa#nNy09eE_Yk?pxqFc!0{j8-ylbmQ8 zcS&6%uAw4vG!YfR@3gU$qzy$|oY;>?@>40I>E_QIPT6n_8y{j>aM2s@=XkO-?Hwka zBmZPB?^n~4c6MfUXu+3mo>;9Mkx8T|fq}uA{b#XkB3h-IFLdNKY`CAGfWP#5>KIRS zlEu3Bb$sA$&y|*uc_>ez-jg?Hkr4T(=5gX(*hjsI1>tW*e}skxXw(Z^gD$>^l9UgW zc;L0=?Bm$o{o~cMJ&J{cTTN3pk~(YJxJh?k9UNV4=DNEiT|ZW=P_%R=UzJXU217zh zdg*p03-@Klfc;Jhgl6CC5{jQyM#ET4gZk^#!?b0kPPeK-HXVq2Ar)a1r(h+atpSgR7pV=Pfc&M z;q1ca{u{8$3~HQgJeAyW0piJms;WXdg5UdN-@|}f3NSfD>hS+Gs_^MjV*brLGd58U zJcIgb<;(v>^qgST>d?7m`NN{oQTfqSz-$h}*4axBK@dPLGn4Z2M zx}1{h+>Ug=4U~q;XLwHL1&$4ShmsMj#yn!frBQz(JV(TU!+A7R`GTjQEChE@$GE~GpJ11!fzmQi2 z06uNOVspv+x1CiF-Ky=TOk}7I)gui&S4R%k-~6upDI>;r-7)57Q5l$e_ixQrn@>D2 zs1a-vD5&nwD9e>u3RqbzIA%_76K)>s(#HYMh-Ab9D9`5`_&38iKa=2yFd~ws%Ymh0 zJ&;M3aKHKtJe?f7BvTxpaIEHM-qjS{kA&_I=O!j6#eMSx5A=+Z$sm1Zuy^$2UfGRar9Ujlw=((gh;U`0WxHEV^i zt{AH1%CfdQllO5OaF;#_{N${y>ckV*;M4%X+|Da})nO?0)Pzd45qNZtC`%1b+9rB@ zHYXcsatc)q9la&G=W@LZK=h?s9idpXaKg-O3(sjd{=9K=&Z#cX~RPzgaVf zf4r3?zt#X7mHjidPO@wUqJ|}m>GpR2ma}>(>M$M18YtZ?-3c2p&=hWlkB<*OVymjD zB!HGiW#vn}_k2gq*zoZ1E_}Kq3a91mJMAy zN+9-evb1-UK6MbZz{iZ6A=O_83P%i4t@~ zmMe}9#!myBQ03*va<&)W`*;KlfkqdHG~4;;&_^;Zp^3E~0g1`+9=nUOk~Vn(ENZeT6b=hLn^1}2n~ufU>xv%XC# zKuT+BA2KPf``o6;=L!<{jeh$#0YR8U!{<-rfb!+v?G1AM=6hFrze4T7Ax|@Vvyv0d zqc5NOy$leFcP}?wI#@Ht5o|0NL1;;@uLNFpoYK|LkDz;EjpIe2amYYT&Vc0W(DsOz zV#AJyx)1sU)W_qB;k3#x{B{c6-miwJ|0zN95WV9AOpU$oyRN6bPX{vbG5dbH{lSf)&HN2LTeI=6vZl`&t;v05JFemG$rh)H7w7u1t|MEU zK@-^ed^yP9dgGt999e$MSxp_W#h7y7ApzCDeNfJ^0FX8=ZuSxAJbzmCT+@u-$1+y7 zHI@e9W**^v3X)f|1R50pJTR#<9nfkW|ZTbPKBMP4Yed@;EHvgV@ z5`&_NaNxU`f-gzGl_Vt)Pddcmw;XH#$r`a6G-Dg@Nof4~fd=@OR>|0J*TOPqHne{6 zViBj?c|}Lt#6w4y6YX*wc;=42B`l?PJckNE+rYGyqN0rsTIyeGDjy#l8~ft>jM5CR zy9jU2s9g23C3IL;ea%>5)L+N9dt0jv^U-d!>L0Fb*~a1N_3Ysh_*C!hnVF_@qAh&$ z`S-RLC!Y$7ku9G-wCn2U_kJ^41i&joax z_PJmXm?;l{A{A?^<)zNpq|J~Kt1rfhiAv#_if+I+4#*Jw3B&=Gy+g`*uHdHkr#fHaln~_TOBv9C~GsbQ_{2CCL*C{rQz?8PVD4(YwH!KRjKpTzSg2(PeR)nuv)K6>-C@oyBrw+>8tGE7u*W#KVs_m?-9j3s+QX zIMZ54YCk_?zf+~gv_bZHLHsVqiix@D#8anJl@Xk&NpBGaRXCllCWl#5j|mUZylBI$G8g`YT?QpEc~Aoz&Xna$H{wz^qO{sCiA`C+8$U$_o3V{d zO`$&DdrrCkh!PJ&PQb$xV`YmDaDzO(Kvm@nq05mH=1suoc3>f;Ws~4AZ)7Q7AlG4t zK0*SDwunm(I#fw;!0;;kz+cc1QiY#$G^2znBW-4FlIc=vn?BxHTelvcnAp${)A4Iy6B}$cKJ}g@)S~<7-^iht*W{rO6h{P$dDjAlc4Oseex!+4Y_P4-rd{`-`ob3B;S= z;NU?EJpHBmA|e1^e+91p?tQElZ~>w3#|1PU0~gTY`4N4W0N?!oe05CD{c;hiw8DlZ(7-m1U~Z?WTw;GN%)9)8dr!YpujK5@0=AR7dN@cJY4})xE#SdP z6w8nenu&FS0Au?&kZ}z4V}vYgNd^A(8XP>_+|_F{{>T z{I#{6^8V_0qroX}zY_U(v)}KG4o~Qsw}70yEE-ytDF6n2Rr(;{&ASA}t>6}$_2z;6 zpyGHcEj2NgS|&Dbljr>t-P-+Irzx>+ODu$NI~h5oKtpC#6~FiKx@Mtr64CEkc$ zzPRr)JYW2|!FjH$-Uh7-dFdZ+^Oi!kJMEHQRqIRWCyrtZ5Tw~L8$1WxnG7$wYr=*|pSM5OJBjfOc zH~(mXXT)-u@9Gq6$Ij1&`f2Y1ac+PfLrwL<@iW0MaizZa$G0{-i?n_py=IpKY~kTo z`^s`~5!<>S40I#<8JgLZ=lm#D29pC;bdQaJv-!R&ZYkBH~U)E!v+e|;tn%zns+*isN8{42sR`na$z zaBsQX9ClU3TI@5EDbw#D}4a^nBhE=cU9=*8*cINomm&IG=RV zv7g)7gQ@GUNv1?7uYpQeVw!sUMb z;xz|BP_Z7lH-+b0Q;(Q!-Jivg87CL~<=G9Aq{*KXf!4`G;bP_u`)|Z6%^4B7xx6E6 z=areVyXwOOVnFD=5W{WUy%7`rwhaeJUTyZ2#1CMRc5N3+8}>F-FW>T9cix2a1@B)d z1HGo}Sep&s0)sacA;i-BgVzED#4pAjM*`z8;RlJ{>18W1hl+`%jnpNITCl4IGA-+C z)6z`6?|Y2l!Yr%v_bfgcb!7J~ykLA?Hqwt8G($@Yz?+v*G{`wP{8HPLa+u!>l|#eD z#dW<1-$kq~X>)tlwAtpp{Q#Z5l2EpNB>^>^x{ z$yhWN2mK^-_|(|?eZUT%VBIUB+|z{#I=Wr=RY$)^b2#@S$1e<6w!4S*>7`Teo=QY1 zut7tw*m6O8iqg^uf)g^gq{Qrl!se8f4__1QLu4G^7i9 zurtAR)Ob8M1)@g%;N61vxRn`X})NY^ZYjnVzG-ZUpbeFMkSX7#V4D0Kp0o zLqSAGMJH-`v{s#B#bg(oa=cd;;xdVDVoiFor5Oij78Nzv8LA;IvA0ZI&;Iq)!HkmA`jJ+0Dg;E6O+PMeM0o$%MQ2PQ?ah2~s#%{7^Vk4R5p zJ#*h{o4E#jqb)8VeaccudPHx{N6g-;PWb?DB;ns;Dx>z=E3S z``)3;yg(uU$yZawV7XG&lfWxDjk+W5o&kMz4pY1P zz44Q$`32Ce=j7s@gehga2KH9KLPvSqO<_YO5?A2$u>@Du(CZ`@Dek^FnvBW8TXV_ht8HOlw7@j`QT} zO=oNDT2?g#$wT0}LE~e5i}+n7zMA)Ov^c$9W4Ip`%dDjp}vDy!m?M%hJcN1jXCe$?W}-1HLCkYvZN7Kb&Wz4 z=;=i}i6=m$J5rrqein3r9OK<*tMkQfF0t@;%$QhaikM5=eg3)xFwWTHezT=TtWWo>A&oJh0x3WNy@ctjr!aN%Ujh~AmSP$TpO zAtB|~+dH_e3#kf*B^)BjJ8DbU7eHTEAWS{_9h}4ln@-;-QptKE$pYuk7-noOTL&3jpdnJglP`>$=8q=h5>; zZLJ}VHf3>){wi1cqJX;&f2yiIzCun&;M~)+I$c^#<+Dp+#H9g0uFo0n>>HRW8S62O zV!rC`XW8AJ!0d!r|HjwJ{fO=>v>|+JLj{*^S1nQlcfl&7(FGc=z!y~}pPh1@1;cwJ zt-`t$-j}cr@8djTsXIDax2uey!!Y(iEYr zsEo!L-v&LM0?Dqy$gBAGlfQbrKWSNIP88o5oR5~JX}xDZRNEI(4=O|Vl}fmfS9Jh} zmzhzEmrXq3{XNy?Nv1{`&Dt|&~=VXH75Oab?LSz_r84|5e`@g+5%5X9SKk7)Or7l#31@DhNxGVgDPP{Us8SsqvGg#%&=cOV*zIZ*9Ns)O!6m5>wKQ5|UzP z8oq;gn4dW)heEoF$R7t-VrA`0pQ-p!{{ys_N=@fYrGPbREq0b{Jhr6fKf$9r+$NFzA(V$_p%DT z-j~=Tq{T9S8Q#p0@W}p3-m<^)QZ&M9aymrDdE@AH9bvx>_4D(iyotIAGNjeZPASj3 z5(=CD1z0HN{tqW#n(m#x1A1GW)yB;^vc*4=*K~(+Gj0x{+Emo>D>>}V(o&&Im*X}0 zH5C&{TVN+?hN1Okkk8UWvD-$%&a%uuo4qyG#CbA~GGr-$Q(qLOtg67V!#WXnqbHYc ztJkIIeY(#PBuQf+ zRp(wP;{46~C#7A?)#F{sU^MG%$=n5cW!WY4=3xr8JBms7CQfrB2Aj2Z zPiL^%UYr<~Wod&+O+U?gNX3Ab?pT(ZSAC0xMWOZ3+bM!VBh_Ltt z3=CcIN7u1BUf67T9@;?O~SD_1hn z(?e=}409m3=tMKr-j1=Vn#9N`k=|a$)~-PvE}a+2$&8j6_NBSrW0~GS;EP`cxq|+u zpCFY;2woq-8p07FZ5j*+q)N~)rR#g zZ=>&)8)jkTWA~!J=&c!NWFk2$am$S+Cbzd_91O?JW3u-Ma+`zLjxD))JE6U_fHiW` zrzBS@Df_^`Fx|d~WKTEa8((6&>%ffSn#y1pWl;%{P3uW^b>w-|0Mrf#s)`zHmwXIq zatwW_G*8_fe)%O-4hM3zmWiGo_CNJxu1Z6+t(B>cee|qfhjZmhw%+h7_N`vcf#;r` z_X}&O&J+z$g)8#DMq}Hz&8p_C_|Eq@|F2IF{Kge|`^)qOl)*6Gcm6Zy{rsvKb|ACg zPw|`HL^2j*-Df{V_jNxfk+o%}$Hy?d>Fp?kVY+X)3}B zPf-8Ut8ivRJl?f_6aT!uop(I5hPOZTH&$Ko-C2)e^83-0Rgu`+no}zdKJo|}qY>W+ zKTOei=c6zhQHRUW28+=*HZ!?@KQfsNTV4GL>!U5!d^j5$QP`YF6Jr?O_!go=L!?tF zrh0pDzV&TOk}8#oM)AGr&BS_p=)2_x3@gr=m*YW_B&_essM?zP=8RUOm|eb*(rE%; z{yMhm8pe0+AT`jR_g*SBT4L>O=*!A+Ui?lHhYn(XbsAYJNwj4XsqryX{vy&LALp_MTMX3Z~aRN2>Qo9`POT>{Gcsm{y#Fro1}O8!yutP!)$T zyy@+j-+u|-%l>m-&uX?cQqZT!;Bpc8w|_^P93y$;AhNVHgAh#To`*VIin62({Y7s@ z84Ty0YPAqkB`+Ki{Jo#DAlDvRu%Q?D#>d4P}_q+Fg_xt_syVi)eLAcWMMft_(JMbHL?0qPFW(9;&DRc{; zfX~&L%@tLZAlDJifvHzRX)O~iJlSnESmQUXQA6eQNJg1^@aNm3H5&CSS|H5-~3 zv#MNBa1G-6d+&hp`yifF4#(GDfK(++fVUvvcl1G^HGmL`K=(VKUc4;gIxq|a>$k_y z^1&}4RH{Ho`2-zJQ-DYW`?tqnZ@dJ7RtI%t!zNf$OZu-Vpi+9*#t-ZDY(y{=J}nfW*#J39Rl55NMG_4 ztcMScU(Zo|WZe07YQ^Kj&K+U5R2CJ(b@~M80SDZd&LeQg2yX~e=DBzVzU%D7UDc9W zB;@4}pY^Rh5N2e9_IMysC&FjxLC@7IKu|%XSPWTKHuNi2!r#>i#_NW+v-7?THX$<; zgj5E`>42!PWO#wB-EjBWqqDNMaJ(sT_FM=hksZ7B%Y(S}qc=Ewa`vvh5G#~ntYb8a zoOk-r8XzgDfIu64pn+`09MC==tlxYMY4IdjPDgHap#yHyDyc zz~Mkb<#b-M;CH#e3^)Li#9;kN$P0>L4QZ(q$>m5`!a_yv#s&})DLn1QnAnO~qk%9z z8;UtkK$Keu%Gxt3M(uBF=CQRyM_SFQwE!uANS7AG9EXFFA~z2SrDb4*LbSgBQ!ZdW zh>wgr$b}lQHUhYtQd-K6AF^3FdOEa@ikCIj9YaE9R>;D+5iqquph^H82tZX(09R)x zdK%f9Hfcr{oY$K$(Ao-FNhtyr3uvDY$~41-4OXI5!m#;e78fA+uRpRRAsXJm1!q%x zL|n$+-j0rc+YMQD4U$%^NA}ijycQSLlGu{UJIyxI|xbiOeu5CTF?$V2$F=) zY)1c?QxToWa_t(L4}2aq&?RJKfYj)~xCY^AY=9`Y5RTU2iu1&rT#f}}k5?3|XU~lK z9J7JwgrD&_WMAR6k{Ecvh2>!xa)s%Gmxtdz2|1 zWU>aTkTFZiMMWt2@Rumq@)8n@ijZ7Zj`TTmkvX63i|ae^8@Lw zK)YSgFIWKE1wKRMx_mLLtRmvZV#ws2-`{!zq(aHnB#tyn%Hsj$u!HgW;JbbWplH}l z?fh(FU;s^j|0Wokj#_3RQ7VzN=xLsF3Z%oZfGjBqDbH=@Wx#&x=%qNZ(g%mDW@SO3 zH6U=$1c6o$#x)4@1P8HBL;`LX7@r^Q|MD|*?%D}?%>q#U_6KH3qpg8RtAq1uBNFF5 zfyC)E!%9_znYm!R9(bFtg9&yzM6y}N>tP4NjtH*zYb&W`?AQ+4 z+6~+9{u2#bHlnvRJVorj$Qow$4}To7hfbQ9grp~zK%g~%4rXxPC@o-V&u!!_j8dmV z_S|_eR8=9psv5eoG9=~YL6w%qUmS}Wwu={_DJp`dsOY{yW?6DFbkiy!(`sQqc><~> zwU8DTL$1~FFriQ*6e*NYFJ1=i>hD2PJ{7|3{HQFY?c3vEXbOzqkDEJQgYENAFwoV7 zfX5TWDl*}|dKr?(Dth2($(;P6ve9`3Qs*=Q9*FYN^qK*os)803i`WF{uQ-zxxC}(`~py zux)}MxY85=$lbUp9N!O4Hwg{A?p{_m1W8V~H+?)lLV6tbut3tVYAO1IeSi#2qw~@w znBIQ}in&jsptd&ZKP*_i29(9jv2*SqJ38_@!mKfzV$@yL7Mp3jx{3; zH?GIIAHM~^+YNbcK4^yx{`TAOwzZ(;4`1NQul9vGwz4c7NbkCI5iYA0t^c}{cT`Ty z$$=;%6NFqb+%iWJpaTIMt1QQN^Jbv;vtL8~^a^N48F9sC*26W7q(&FUnx>ZV|30N` z^q?6leekivSv(;7VcmR1kR%j(J%q{0tOHX4_&Uv?Y`x9{>{4(;-Sq0;yI*K5IS#rZ(8>M__8fE&%zg`Mh8q3tK5zxf-Nc3__&_DU-wA zc6)d;yLJ`gbT+e6%zYB+5&CeIdVN?{+wT6( zA+But9@LAMq3XT&A(TW1nAMq?yawW)6My2)_FRB_^B*IQ7aBJ^y7;M>8L%WljlA0B zxb@km@b&kj^Vm@&&YX#c9e<6EQzzlE+d=t!=)Zdx19v*u>9ATYde79ub@~MSHd|!H z&wCPnV=D-W6te0X=+>-*dhS9D9QiK@B@)<=90DPcf_B(I+pI9Y{Ui7+Jz@BsVgCHE zXSeLwj*|;#A${$7UP}!@5GdLH8W^vaSDp|$m4c8fQ2P2`jag%;)af9rVuOhG+4W&v z3`(62vg#TRzDNq`eSDbu;04ygLe6fJpIJ33v-_Z8xzY%4OEXBB98ACu-_2_X+%v&^ zpEc^Gs zRbK}|S_Y>4!`l(ZI|;;M=r{8(n=$R(#U)jd?(rBMa>nG`$zQ zOKnJj07|_cxvN&gZ|?&k6hRT(VF%4-^fupwv%4F2zNo zFCH{7xeB?9mxMchK_Mo8^yzTdKuEDEp;V({_x^EhFa$xsuwvz?$3Xp3mcdJUX3dz) zYOM6ZPgaE7#EjJH>W6Yny?x{eZXG&=j*s?3m}Wrw+I74Mv`t$#qH*sYv>pB?>T^!L z{whu`UBbgK0rs}8rjP!ePZ*d?IJs#9k5Qx@Hni;6j)Bfj*xTDtSNk-qUw;KbS_T-e z2aMAJ+F`?mHMIzMJm|iBi6e$w7tREy?NGS1X&pLFo{WjDC6xvd@Ua5Hd>uA}#8(w1@(zfqF!OB$; zNfd%0F!`13xRsRy^Ot{sr?CO*rEU=CRV42RRS~TK<;Z#AGw( zziIR2kPcjq4?*!*tueHiA%I3Fs_2Q{C^kYR|mNgjIP}~5%74>83g@xQ>Vri z6qk6Ai_4=e&fqvD?&xZ_qvN-qA!YpwkSC|a6%?0vkc-QsEwT|~wa>k<0q(P>khOGK zTsd)x2f4UB`jWGpUv?C@XF~F`8=xJd2stis0pi3%TpkfIU$}tQeS6@!dI`GkzlhRJ iFZ{2tx^a2*<$nOaa2hdABN#vc0000