From ed5c7bd37951799105bc7c68ffb4a3e399666ae6 Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Sun, 15 Mar 2020 20:23:14 -0600
Subject: [PATCH 01/13] change .gitignore
---
.gitignore | 2 +-
| 139 ++++++++++++++++++++++++++++++++++++++
chat_box/views.py | 10 ++-
dmoj/local_settings.py | 2 +-
dmoj/urls.py | 2 +-
5 files changed, 149 insertions(+), 6 deletions(-)
diff --git a/.gitignore b/.gitignore
index 8cfbd3f..e8b3edc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,7 @@
*.py[co]
*.mo
*~
-# dmoj/local_settings.py
+dmoj/local_settings.py
resources/style.css
resources/content-description.css
resources/ranks.css
diff --git a/ b/
index 83027ee..326f10f 100644
--- a/
+++ b/
@@ -554,3 +554,142 @@ INFO 2020-01-26 05:15:35,531 judgehandler judge1: 3 test case(s) completed on: 4
INFO 2020-01-26 05:15:35,729 judgehandler judge1: Grading has ended on: 42
INFO 2020-01-26 05:15:35,729 judgelist Judge available after grading 42: judge1
INFO 2020-01-26 05:28:39,295 judgehandler Judge disconnected from: ('127.0.0.1', 34940)
+INFO 2020-03-10 02:09:35,857 judgehandler Judge connected from: ('127.0.0.1', 39482)
+INFO 2020-03-10 02:09:35,878 judgehandler Judge authenticated: ('127.0.0.1', 39482) (judge1)
+INFO 2020-03-10 02:13:06,037 judgelist Free judges: 1
+INFO 2020-03-10 02:13:06,039 judgelist Dispatched submission 43 to: judge1
+INFO 2020-03-10 02:13:06,060 judgehandler Submission acknowledged: 43
+INFO 2020-03-10 02:13:08,730 judgehandler judge1: Submission failed to compile: 43
+INFO 2020-03-10 02:13:08,730 judgelist Judge available after grading 43: judge1
+INFO 2020-03-10 02:15:06,114 judgelist Free judges: 1
+INFO 2020-03-10 02:15:06,114 judgelist Dispatched submission 44 to: judge1
+INFO 2020-03-10 02:15:06,122 judgehandler Submission acknowledged: 44
+INFO 2020-03-10 02:15:06,762 judgehandler judge1: Grading has begun on: 44
+INFO 2020-03-10 02:15:06,835 judgehandler judge1: 2 test case(s) completed on: 44
+INFO 2020-03-10 02:15:06,985 judgehandler judge1: 1 test case(s) completed on: 44
+INFO 2020-03-10 02:15:07,944 judgehandler judge1: Grading has ended on: 44
+INFO 2020-03-10 02:15:07,945 judgelist Judge available after grading 44: judge1
+INFO 2020-03-10 02:15:42,912 judgelist Free judges: 1
+INFO 2020-03-10 02:15:42,913 judgelist Dispatched submission 45 to: judge1
+INFO 2020-03-10 02:15:42,932 judgehandler Submission acknowledged: 45
+INFO 2020-03-10 02:15:43,099 judgehandler judge1: Grading has begun on: 45
+INFO 2020-03-10 02:15:43,169 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:15:43,375 judgehandler judge1: 6 test case(s) completed on: 45
+INFO 2020-03-10 02:15:43,626 judgehandler judge1: 5 test case(s) completed on: 45
+INFO 2020-03-10 02:15:43,877 judgehandler judge1: 7 test case(s) completed on: 45
+INFO 2020-03-10 02:15:44,392 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:15:44,555 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:15:44,649 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:15:44,881 judgehandler judge1: 4 test case(s) completed on: 45
+INFO 2020-03-10 02:15:45,131 judgehandler judge1: 6 test case(s) completed on: 45
+INFO 2020-03-10 02:15:45,382 judgehandler judge1: 6 test case(s) completed on: 45
+INFO 2020-03-10 02:15:45,632 judgehandler judge1: 6 test case(s) completed on: 45
+INFO 2020-03-10 02:15:45,883 judgehandler judge1: 5 test case(s) completed on: 45
+INFO 2020-03-10 02:15:46,327 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:15:48,509 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:15:50,033 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:15:51,309 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:15:53,383 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:15:54,865 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:00,216 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:00,455 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:01,919 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:16:02,733 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:05,140 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:06,445 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:06,764 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:06,858 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:06,953 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:16:07,057 judgehandler judge1: 3 test case(s) completed on: 45
+INFO 2020-03-10 02:16:07,151 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:07,575 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:08,317 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:09,451 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:09,639 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:09,780 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:09,873 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:09,967 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,061 judgehandler judge1: 2 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,184 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,276 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,392 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,486 judgehandler judge1: 1 test case(s) completed on: 45
+INFO 2020-03-10 02:16:10,586 judgehandler judge1: Grading has ended on: 45
+INFO 2020-03-10 02:16:10,587 judgelist Judge available after grading 45: judge1
+INFO 2020-03-10 02:17:15,351 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:17:15,362 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:17:15,370 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:17:15,933 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:17:26,544 judgelist Free judges: 1
+INFO 2020-03-10 02:17:26,545 judgelist Dispatched submission 46 to: judge1
+INFO 2020-03-10 02:17:26,561 judgehandler Submission acknowledged: 46
+INFO 2020-03-10 02:17:27,964 judgehandler judge1: Submission generated compiler messages: 46
+INFO 2020-03-10 02:17:29,114 judgehandler judge1: Grading has begun on: 46
+INFO 2020-03-10 02:17:29,152 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:29,291 judgehandler judge1: 5 test case(s) completed on: 46
+INFO 2020-03-10 02:17:29,682 judgehandler judge1: 5 test case(s) completed on: 46
+INFO 2020-03-10 02:17:30,872 judgehandler judge1: 3 test case(s) completed on: 46
+INFO 2020-03-10 02:17:32,315 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:32,723 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:35,293 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:36,588 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:38,202 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:38,699 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:40,776 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:41,393 judgehandler judge1: 3 test case(s) completed on: 46
+INFO 2020-03-10 02:17:41,681 judgehandler judge1: 7 test case(s) completed on: 46
+INFO 2020-03-10 02:17:42,583 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:44,278 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:46,662 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:47,980 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:48,266 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:49,537 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:51,243 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:17:53,592 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:55,442 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:56,961 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:58,601 judgehandler judge1: 3 test case(s) completed on: 46
+INFO 2020-03-10 02:17:58,997 judgehandler judge1: 8 test case(s) completed on: 46
+INFO 2020-03-10 02:17:59,290 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:59,384 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:59,477 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:17:59,582 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:00,870 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:18:01,125 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:01,255 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:01,374 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:01,514 judgehandler judge1: 6 test case(s) completed on: 46
+INFO 2020-03-10 02:18:02,809 judgehandler judge1: 3 test case(s) completed on: 46
+INFO 2020-03-10 02:18:03,552 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:03,764 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:05,172 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:18:05,641 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:05,939 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:18:06,521 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:06,880 judgehandler judge1: 3 test case(s) completed on: 46
+INFO 2020-03-10 02:18:07,692 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:08,482 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:18:08,624 judgehandler judge1: 2 test case(s) completed on: 46
+INFO 2020-03-10 02:18:08,718 judgehandler judge1: 7 test case(s) completed on: 46
+INFO 2020-03-10 02:18:08,823 judgehandler judge1: 1 test case(s) completed on: 46
+INFO 2020-03-10 02:18:09,633 judgehandler judge1: Grading has ended on: 46
+INFO 2020-03-10 02:18:09,634 judgelist Judge available after grading 46: judge1
+INFO 2020-03-10 02:18:12,080 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:24:00,857 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:24:01,320 judgehandler judge1: Updated problem list
+INFO 2020-03-10 02:25:03,175 judgelist Free judges: 1
+INFO 2020-03-10 02:25:03,176 judgelist Dispatched submission 47 to: judge1
+INFO 2020-03-10 02:25:03,193 judgehandler Submission acknowledged: 47
+INFO 2020-03-10 02:25:04,166 judgehandler judge1: Grading has begun on: 47
+INFO 2020-03-10 02:25:04,239 judgehandler judge1: 2 test case(s) completed on: 47
+INFO 2020-03-10 02:25:04,349 judgehandler judge1: 1 test case(s) completed on: 47
+INFO 2020-03-10 02:25:04,417 judgehandler judge1: Grading has ended on: 47
+INFO 2020-03-10 02:25:04,418 judgelist Judge available after grading 47: judge1
+INFO 2020-03-10 02:26:44,823 judgelist Free judges: 1
+INFO 2020-03-10 02:26:44,823 judgelist Dispatched submission 48 to: judge1
+INFO 2020-03-10 02:26:44,827 judgehandler Submission acknowledged: 48
+INFO 2020-03-10 02:26:46,040 judgehandler judge1: Submission generated compiler messages: 48
+INFO 2020-03-10 02:26:46,545 judgehandler judge1: Grading has begun on: 48
+INFO 2020-03-10 02:26:46,583 judgehandler judge1: 3 test case(s) completed on: 48
+INFO 2020-03-10 02:26:46,648 judgehandler judge1: Grading has ended on: 48
+INFO 2020-03-10 02:26:46,648 judgelist Judge available after grading 48: judge1
diff --git a/chat_box/views.py b/chat_box/views.py
index a032014..110c3c2 100644
--- a/chat_box/views.py
+++ b/chat_box/views.py
@@ -1,7 +1,11 @@
from django.shortcuts import render
from django.utils.translation import gettext as _
-from django.views import View
+from django.views.generic import ListView
+
+from .models import Message
-class ChatView(View):
- template_name = 'chat.html'
\ No newline at end of file
+class ChatView(ListView):
+ model = Message
+ title = _('Chat Box')
+ template_name = 'chat/chat.html'
diff --git a/dmoj/local_settings.py b/dmoj/local_settings.py
index 607c415..df260ac 100755
--- a/dmoj/local_settings.py
+++ b/dmoj/local_settings.py
@@ -17,7 +17,7 @@ DEBUG = True # Change to False once you are done with runserver testing.
# Uncomment and set to the domain names this site is intended to serve.
# You must do this once you set DEBUG to False.
-ALLOWED_HOSTS = ['0.0.0.0']
+ALLOWED_HOSTS = ['0.0.0.0', '10.8.120.148', 'localhost', 'd7272478.ngrok.io']
# Optional apps that DMOJ can make use of.
INSTALLED_APPS += (
diff --git a/dmoj/urls.py b/dmoj/urls.py
index 23cdb9c..0b960d0 100644
--- a/dmoj/urls.py
+++ b/dmoj/urls.py
@@ -367,7 +367,7 @@ urlpatterns = [
url(r'^custom_checker_sample/', about.custom_checker_sample, name='custom_checker_sample'),
- url(r'chat/', ChatView.as_view(), name='chat'),
+ url(r'^chat/', ChatView.as_view(), name='chat'),
]
favicon_paths = ['apple-touch-icon-180x180.png', 'apple-touch-icon-114x114.png', 'android-chrome-72x72.png',
From 47c6e52e0625dd8c87bf1293df5f5324108811f5 Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Sun, 15 Mar 2020 20:25:06 -0600
Subject: [PATCH 02/13] add changes
---
dmoj/local_settings.py | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/dmoj/local_settings.py b/dmoj/local_settings.py
index ba4b7a7..df260ac 100755
--- a/dmoj/local_settings.py
+++ b/dmoj/local_settings.py
@@ -24,7 +24,7 @@ INSTALLED_APPS += (
)
#path to problem folder
-DMOJ_PROBLEM_DATA_ROOT = '/home/Projects/CP/LQDJudge/problems'
+DMOJ_PROBLEM_DATA_ROOT = '/home/cuom1999/DMOJ/problems'
# Caching. You can use memcached or redis instead.
# Documentation:
@@ -38,10 +38,10 @@ CACHES = {
# Documentation:
DATABASES = {
'default': {
- 'ENGINE': 'django.db.backends.mysql',
+ 'ENGINE': 'django.db.backends.mysql',
'NAME': 'dmoj',
'USER': 'dmoj',
- 'PASSWORD': 'admintl97p1',
+ 'PASSWORD': '',
'HOST': '127.0.0.1',
'OPTIONS': {
'charset': 'utf8mb4',
@@ -56,8 +56,8 @@ DATABASES = {
# Internationalization.
# Documentation:
-LANGUAGE_CODE = 'vi'
-DEFAULT_USER_TIME_ZONE = 'Asia/Ho_Chi_Minh'
+LANGUAGE_CODE = 'en-ca'
+DEFAULT_USER_TIME_ZONE = 'America/Mexico_City'
USE_I18N = True
USE_L10N = True
USE_TZ = True
@@ -108,11 +108,11 @@ EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# A tuple of (name, email) pairs that specifies those who will be mailed
# when the server experiences an error when DEBUG = False.
ADMINS = (
- ('luongd', 'doannguyenthanhluong@gmail.com'),
+ ('cuom1999', 'your.email@example.com'),
)
# The sender for the aforementioned emails.
-SERVER_EMAIL = 'LQDOJ: Le Quy Don Online Judge '
+SERVER_EMAIL = 'DMOJ: Modern Online Judge '
##################################################
@@ -124,7 +124,7 @@ SERVER_EMAIL = 'LQDOJ: Le Quy Don Online Judge '
# webserver to serve the static files. This is the directory where all the
# static files DMOJ uses will be collected to.
# You must configure your webserver to serve this directory as /static/ in production.
-STATIC_ROOT = '/home/luongd/Projects/LQDJudge/online-judge/static_root'
+STATIC_ROOT = '/home/cuom1999/DMOJ/static_root'
# URL to access static files.
#STATIC_URL = '/static/'
@@ -137,8 +137,8 @@ STATIC_ROOT = '/home/luongd/Projects/LQDJudge/online-judge/static_root'
############################################
## DMOJ site display settings.
-SITE_NAME = 'LQDOJ'
-SITE_LONG_NAME = 'LQDOJ: Le Quy Don Online Judge'
+SITE_NAME = 'FOOJ'
+SITE_LONG_NAME = 'FOOJ: Modern Online Judge'
SITE_ADMIN_EMAIL = 'admin@example.com'
TERMS_OF_SERVICE_URL = '//dmoj.ca/tos' # Use a flatpage.
From 6419d2157621c724d2ca84f09aa94eac3b8ddd35 Mon Sep 17 00:00:00 2001
From: Phuoc Dinh Le <47278241+cuom1999@users.noreply.github.com>
Date: Sun, 15 Mar 2020 19:26:33 -0600
Subject: [PATCH 03/13] Delete local_settings.py
---
dmoj/local_settings.py | 314 -----------------------------------------
1 file changed, 314 deletions(-)
delete mode 100755 dmoj/local_settings.py
diff --git a/dmoj/local_settings.py b/dmoj/local_settings.py
deleted file mode 100755
index df260ac..0000000
--- a/dmoj/local_settings.py
+++ /dev/null
@@ -1,314 +0,0 @@
-#####################################
-########## Django settings ##########
-#####################################
-# See
-# for more info and help. If you are stuck, you can try Googling about
-# Django - many of these settings below have external documentation about them.
-#
-# The settings listed here are of special interest in configuring the site.
-
-# SECURITY WARNING: keep the secret key used in production secret!
-# You may use
-# to generate this key.
-SECRET_KEY = 's(8*xdlaiy4r@09cidu#)h%%iey39099g=hp(#+kzz+7vefs4u'
-
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True # Change to False once you are done with runserver testing.
-
-# Uncomment and set to the domain names this site is intended to serve.
-# You must do this once you set DEBUG to False.
-ALLOWED_HOSTS = ['0.0.0.0', '10.8.120.148', 'localhost', 'd7272478.ngrok.io']
-
-# Optional apps that DMOJ can make use of.
-INSTALLED_APPS += (
-)
-
-#path to problem folder
-DMOJ_PROBLEM_DATA_ROOT = '/home/cuom1999/DMOJ/problems'
-
-# Caching. You can use memcached or redis instead.
-# Documentation:
-CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
- }
-}
-
-# Your database credentials. Only MySQL is supported by DMOJ.
-# Documentation:
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'dmoj',
- 'USER': 'dmoj',
- 'PASSWORD': '',
- 'HOST': '127.0.0.1',
- 'OPTIONS': {
- 'charset': 'utf8mb4',
- 'sql_mode': 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION',
- },
- }
-}
-
-# Sessions.
-# Documentation:
-#SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
-
-# Internationalization.
-# Documentation:
-LANGUAGE_CODE = 'en-ca'
-DEFAULT_USER_TIME_ZONE = 'America/Mexico_City'
-USE_I18N = True
-USE_L10N = True
-USE_TZ = True
-
-## django-compressor settings, for speeding up page load times by minifying CSS and JavaScript files.
-# Documentation: https://django-compressor.readthedocs.io/en/latest/
-COMPRESS_OUTPUT_DIR = 'cache'
-COMPRESS_CSS_FILTERS = [
- 'compressor.filters.css_default.CssAbsoluteFilter',
- 'compressor.filters.cssmin.CSSMinFilter',
-]
-COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
-COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
-STATICFILES_FINDERS += ('compressor.finders.CompressorFinder',)
-
-
-#########################################
-########## Email configuration ##########
-#########################################
-# See
-# for more documentation. You should follow the information there to define
-# your email settings.
-
-# Use this if you are just testing.
-EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
-
-# The following block is included for your convenience, if you want
-# to use Gmail.
-#EMAIL_USE_TLS = True
-#EMAIL_HOST = 'smtp.gmail.com'
-#EMAIL_HOST_USER = '@gmail.com'
-#EMAIL_HOST_PASSWORD = ''
-#EMAIL_PORT = 587
-
-# To use Mailgun, uncomment this block.
-# You will need to run `pip install django-mailgun` for to get `MailgunBackend`.
-#EMAIL_BACKEND = 'django_mailgun.MailgunBackend'
-#MAILGUN_ACCESS_KEY = ''
-#MAILGUN_SERVER_NAME = ''
-
-# You can also use Sendgrid, with `pip install sendgrid-django`.
-#EMAIL_BACKEND = 'sgbackend.SendGridBackend'
-#SENDGRID_API_KEY = ''
-
-# The DMOJ site is able to notify administrators of errors via email,
-# if configured as shown below.
-
-# A tuple of (name, email) pairs that specifies those who will be mailed
-# when the server experiences an error when DEBUG = False.
-ADMINS = (
- ('cuom1999', 'your.email@example.com'),
-)
-
-# The sender for the aforementioned emails.
-SERVER_EMAIL = 'DMOJ: Modern Online Judge '
-
-
-##################################################
-########### Static files configuration. ##########
-##################################################
-# See .
-
-# Change this to somewhere more permanent., especially if you are using a
-# webserver to serve the static files. This is the directory where all the
-# static files DMOJ uses will be collected to.
-# You must configure your webserver to serve this directory as /static/ in production.
-STATIC_ROOT = '/home/cuom1999/DMOJ/static_root'
-
-# URL to access static files.
-#STATIC_URL = '/static/'
-
-# Uncomment to use hashed filenames with the cache framework.
-#STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.CachedStaticFilesStorage'
-
-############################################
-########## DMOJ-specific settings ##########
-############################################
-
-## DMOJ site display settings.
-SITE_NAME = 'FOOJ'
-SITE_LONG_NAME = 'FOOJ: Modern Online Judge'
-SITE_ADMIN_EMAIL = 'admin@example.com'
-TERMS_OF_SERVICE_URL = '//dmoj.ca/tos' # Use a flatpage.
-
-## Bridge controls.
-# The judge connection address and port; where the judges will connect to the site.
-# You should change this to something your judges can actually connect to
-# (e.g., a port that is unused and unblocked by a firewall).
-BRIDGED_JUDGE_ADDRESS = [('0.0.0.0', 9999)]
-
-# The bridged daemon bind address and port to communicate with the site.
-BRIDGED_DJANGO_ADDRESS = [('localhost', 9998)]
-
-## DMOJ features.
-# Set to True to enable full-text searching for problems.
-ENABLE_FTS = True
-
-# Set of email providers to ban when a user registers, e.g., {'throwawaymail.com'}.
-BAD_MAIL_PROVIDERS = set()
-
-# The number of submissions that a staff user can rejudge at once without
-# requiring the permission 'Rejudge a lot of submissions'.
-# Uncomment to change the submission limit.
-REJUDGE_SUBMISSION_LIMIT = 10
-
-## Event server.
-# Uncomment to enable live updating.
-# EVENT_DAEMON_USE = True
-
-# Uncomment this section to use websocket/daemon.js included in the site.
-#EVENT_DAEMON_POST = ''
-
-# If you are using the defaults from the guide, it is this:
-EVENT_DAEMON_POST = 'ws://127.0.0.1:15101/'
-
-# These are the publicly accessed interface configurations.
-# They should match those used by the script.
-#EVENT_DAEMON_GET = ''
-#EVENT_DAEMON_GET_SSL = ''
-#EVENT_DAEMON_POLL = ''
-# i.e. the path to /channels/ exposed by the daemon, through whatever proxy setup you have.
-
-# Using our standard nginx configuration, these should be.
-#EVENT_DAEMON_GET = 'ws:///event/'
-#EVENT_DAEMON_GET_SSL = 'wss:///event/' # Optional
-#EVENT_DAEMON_POLL = '/channels/'
-
-# If you would like to use the AMQP-based event server from ,
-# uncomment this section instead. This is more involved, and recommended to be done
-# only after you have a working event server.
-#EVENT_DAEMON_AMQP = ''
-#EVENT_DAEMON_AMQP_EXCHANGE = ''
-
-## CDN control.
-# Base URL for a copy of ace editor.
-# Should contain ace.js, along with mode-*.js.
-ACE_URL = '//cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/'
-JQUERY_JS = '//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js'
-SELECT2_JS_URL = '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js'
-SELECT2_CSS_URL = '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css'
-
-# A map of Earth in Equirectangular projection, for timezone selection.
-# Please try not to hotlink this poor site.
-TIMEZONE_MAP = 'http://naturalearth.springercarto.com/ne3_data/8192/textures/3_no_ice_clouds_8k.jpg'
-
-## Camo (https://github.com/atmos/camo) usage.
-#CAMO_URL = ""
-#CAMO_KEY = ""
-
-# Domains to exclude from being camo'd.
-#CAMO_EXCLUDE = ("https://dmoj.ml", "https://dmoj.ca")
-
-# Set to True to use https when dealing with protocol-relative URLs.
-# See for what they are.
-#CAMO_HTTPS = False
-
-# HTTPS level. Affects elements generated.
-# Set to 0 to make http URLs canonical.
-# Set to 1 to make the currently used protocol canonical.
-# Set to 2 to make https URLs canonical.
-#DMOJ_HTTPS = 0
-
-## PDF rendering settings.
-# Directory to cache the PDF.
-# PROBLEM_PDF_CACHE = '/home/dmoj-uwsgi/pdfcache'
-
-# Path to use for nginx's X-Accel-Redirect feature.
-# Should be an internal location mapped to the above directory.
-# PROBLEM_PDF_INTERNAL = '/pdfcache'
-
-# Path to a PhantomJS executable.
-#PHANTOMJS = '/usr/local/bin/phantomjs'
-
-# If you can't use PhantomJS or prefer wkhtmltopdf, set the path to wkhtmltopdf executable instead.
-#WKHTMLTOPDF = '/usr/local/bin/wkhtmltopdf'
-
-# Note that PhantomJS is preferred over wkhtmltopdf and would be used when both are defined.
-
-## ======== Logging Settings ========
-# Documentation: https://docs.djangoproject.com/en/1.9/ref/settings/#logging
-# https://docs.python.org/2/library/logging.config.html#logging-config-dictschema
-LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'formatters': {
- 'file': {
- 'format': '%(levelname)s %(asctime)s %(module)s %(message)s',
- },
- 'simple': {
- 'format': '%(levelname)s %(message)s',
- },
- },
- 'handlers': {
- # You may use this handler as example for logging to other files..
- 'bridge': {
- 'level': 'INFO',
- 'class': 'logging.handlers.RotatingFileHandler',
- 'filename': '',
- 'maxBytes': 10 * 1024 * 1024,
- 'backupCount': 10,
- 'formatter': 'file',
- },
- 'mail_admins': {
- 'level': 'ERROR',
- 'class': 'dmoj.throttle_mail.ThrottledEmailHandler',
- },
- 'console': {
- 'level': 'DEBUG',
- 'class': 'logging.StreamHandler',
- 'formatter': 'file',
- },
- },
- 'loggers': {
- # Site 500 error mails.
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': False,
- },
- # Judging logs as received by bridged.
- 'judge.bridge': {
- 'handlers': ['bridge', 'mail_admins'],
- 'level': 'INFO',
- 'propagate': True,
- },
- # Catch all log to stderr.
- '': {
- 'handlers': ['console'],
- },
- # Other loggers of interest. Configure at will.
- # - judge.user: logs naughty user behaviours.
- # - judge.problem.pdf: PDF generation log.
- # - judge.html: HTML parsing errors when processing problem statements etc.
- # - judge.mail.activate: logs for the reply to activate feature.
- # - event_socket_server
- },
-}
-
-## ======== Integration Settings ========
-## Python Social Auth
-# Documentation: https://python-social-auth.readthedocs.io/en/latest/
-# You can define these to enable authentication through the following services.
-#SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = ''
-#SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = ''
-#SOCIAL_AUTH_FACEBOOK_KEY = ''
-#SOCIAL_AUTH_FACEBOOK_SECRET = ''
-#SOCIAL_AUTH_GITHUB_SECURE_KEY = ''
-#SOCIAL_AUTH_GITHUB_SECURE_SECRET = ''
-#SOCIAL_AUTH_DROPBOX_OAUTH2_KEY = ''
-#SOCIAL_AUTH_DROPBOX_OAUTH2_SECRET = ''
-
-## ======== Custom Configuration ========
-# You may add whatever django configuration you would like here.
-# Do try to keep it separate so you can quickly patch in new settings.
From f424e609bce577da2f5a2dc9a39469689fbd1213 Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Sun, 15 Mar 2020 20:28:46 -0600
Subject: [PATCH 04/13] update readme
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 2f18197..a742684 100644
--- a/README.md
+++ b/README.md
@@ -20,3 +20,6 @@ python dmojauto-conf
- modify .po file
- python manage.py compilemessages
- python manage.py compilejsi18n
+
+###8. Run chat server:
+docker run -p 6379:6379 -d redis:2.8
From 0ff312e3ba72f09554580e150c8eadc1d1fed485 Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Mon, 16 Mar 2020 01:56:55 -0600
Subject: [PATCH 05/13] change styles
---
| 201 ++++++++++++++++++++++++++++++++++++
dmoj/settings.py | 8 +-
make_style.sh | 2 +-
resources/base.scss | 7 +-
resources/blog.scss | 4 +-
resources/table.scss | 4 +-
resources/vars.scss | 4 +-
resources/widgets.scss | 4 +-
templates/chat/chat.html | 8 +-
templates/problem/data.html | 7 +-
10 files changed, 228 insertions(+), 21 deletions(-)
diff --git a/ b/
index 326f10f..4538084 100644
--- a/
+++ b/
@@ -693,3 +693,204 @@ INFO 2020-03-10 02:26:46,545 judgehandler judge1: Grading has begun on: 48
INFO 2020-03-10 02:26:46,583 judgehandler judge1: 3 test case(s) completed on: 48
INFO 2020-03-10 02:26:46,648 judgehandler judge1: Grading has ended on: 48
INFO 2020-03-10 02:26:46,648 judgelist Judge available after grading 48: judge1
+INFO 2020-03-16 02:34:23,436 judgehandler Judge connected from: ('127.0.0.1', 58500)
+INFO 2020-03-16 02:34:23,438 judgehandler Judge authenticated: ('127.0.0.1', 58500) (judge1)
+INFO 2020-03-16 02:54:41,002 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:20,713 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:24,191 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:28,666 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:30,476 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:38,589 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:55:50,475 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:56:01,002 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:56:25,834 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:56:39,985 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:57:13,328 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:57:47,626 judgelist Free judges: 1
+INFO 2020-03-16 02:57:47,628 judgelist Dispatched submission 49 to: judge1
+INFO 2020-03-16 02:57:47,649 judgehandler Submission acknowledged: 49
+INFO 2020-03-16 02:57:47,758 judgehandler judge1: Grading has begun on: 49
+INFO 2020-03-16 02:57:47,828 judgehandler judge1: 1 test case(s) completed on: 49
+INFO 2020-03-16 02:57:47,895 judgehandler judge1: Grading has ended on: 49
+INFO 2020-03-16 02:57:47,896 judgelist Judge available after grading 49: judge1
+INFO 2020-03-16 02:58:01,408 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:02,052 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:32,793 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:32,839 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:32,860 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:47,946 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:48,942 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:56,280 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:58:56,639 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:59:03,210 judgehandler judge1: Updated problem list
+INFO 2020-03-16 02:59:39,329 judgelist Free judges: 1
+INFO 2020-03-16 02:59:39,330 judgelist Dispatched submission 50 to: judge1
+INFO 2020-03-16 02:59:39,347 judgehandler Submission acknowledged: 50
+INFO 2020-03-16 02:59:40,048 judgehandler judge1: Grading has begun on: 50
+INFO 2020-03-16 02:59:40,431 judgehandler judge1: 1 test case(s) completed on: 50
+INFO 2020-03-16 02:59:40,737 judgehandler judge1: Grading has ended on: 50
+INFO 2020-03-16 02:59:40,737 judgelist Judge available after grading 50: judge1
+INFO 2020-03-16 03:02:36,588 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:04:08,800 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:04:09,051 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:04:27,267 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:04:58,877 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:05:07,980 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:05:08,870 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:05:14,472 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:09,206 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:17,772 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:41,468 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:43,369 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:52,096 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:52,228 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:09:55,720 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:10:01,076 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:10:07,556 judgehandler judge1: Updated problem list
+INFO 2020-03-16 03:10:18,501 judgehandler judge1: Updated problem list
+INFO 2020-03-16 04:05:05,007 judgehandler judge1: Updated problem list
+INFO 2020-03-16 04:05:19,876 judgehandler judge1: Updated problem list
+INFO 2020-03-16 04:05:54,743 judgelist Free judges: 1
+INFO 2020-03-16 04:05:54,744 judgelist Dispatched submission 51 to: judge1
+INFO 2020-03-16 04:05:54,764 judgehandler Submission acknowledged: 51
+INFO 2020-03-16 04:05:55,913 judgehandler judge1: Grading has begun on: 51
+INFO 2020-03-16 04:05:56,055 judgehandler judge1: 1 test case(s) completed on: 51
+INFO 2020-03-16 04:05:56,194 judgehandler judge1: Grading has ended on: 51
+INFO 2020-03-16 04:05:56,194 judgelist Judge available after grading 51: judge1
+INFO 2020-03-16 04:06:28,949 judgelist Free judges: 1
+INFO 2020-03-16 04:06:28,949 judgelist Dispatched submission 52 to: judge1
+INFO 2020-03-16 04:06:28,967 judgehandler Submission acknowledged: 52
+INFO 2020-03-16 04:06:29,005 judgehandler judge1: Grading has begun on: 52
+INFO 2020-03-16 04:06:29,084 judgehandler judge1: 1 test case(s) completed on: 52
+INFO 2020-03-16 04:06:29,195 judgehandler judge1: Grading has ended on: 52
+INFO 2020-03-16 04:06:29,195 judgelist Judge available after grading 52: judge1
+INFO 2020-03-16 04:07:08,933 judgelist Free judges: 1
+INFO 2020-03-16 04:07:08,933 judgelist Dispatched submission 53 to: judge1
+INFO 2020-03-16 04:07:08,950 judgehandler Submission acknowledged: 53
+INFO 2020-03-16 04:07:11,354 judgehandler judge1: Submission generated compiler messages: 53
+INFO 2020-03-16 04:07:11,410 judgehandler judge1: Grading has begun on: 53
+INFO 2020-03-16 04:07:12,039 judgehandler judge1: 1 test case(s) completed on: 53
+INFO 2020-03-16 04:07:12,762 judgehandler judge1: Grading has ended on: 53
+INFO 2020-03-16 04:07:12,762 judgelist Judge available after grading 53: judge1
+INFO 2020-03-16 04:11:38,835 judgelist Free judges: 1
+INFO 2020-03-16 04:11:38,835 judgelist Dispatched submission 54 to: judge1
+INFO 2020-03-16 04:11:38,853 judgehandler Submission acknowledged: 54
+INFO 2020-03-16 04:11:39,737 judgehandler judge1: Submission generated compiler messages: 54
+INFO 2020-03-16 04:11:39,773 judgehandler judge1: Grading has begun on: 54
+INFO 2020-03-16 04:11:39,811 judgehandler judge1: 1 test case(s) completed on: 54
+INFO 2020-03-16 04:11:39,888 judgehandler judge1: Grading has ended on: 54
+INFO 2020-03-16 04:11:39,888 judgelist Judge available after grading 54: judge1
+INFO 2020-03-16 04:11:53,547 judgelist Free judges: 1
+INFO 2020-03-16 04:11:53,548 judgelist Dispatched submission 55 to: judge1
+INFO 2020-03-16 04:11:53,566 judgehandler Submission acknowledged: 55
+INFO 2020-03-16 04:11:54,439 judgehandler judge1: Submission generated compiler messages: 55
+INFO 2020-03-16 04:11:54,579 judgehandler judge1: Grading has begun on: 55
+INFO 2020-03-16 04:11:54,641 judgehandler judge1: 1 test case(s) completed on: 55
+INFO 2020-03-16 04:11:54,778 judgehandler judge1: Grading has ended on: 55
+INFO 2020-03-16 04:11:54,779 judgelist Judge available after grading 55: judge1
+INFO 2020-03-16 04:13:21,095 judgelist Free judges: 1
+INFO 2020-03-16 04:13:21,096 judgelist Dispatched submission 56 to: judge1
+INFO 2020-03-16 04:13:21,113 judgehandler Submission acknowledged: 56
+INFO 2020-03-16 04:13:21,365 judgehandler judge1: Submission failed to compile: 56
+INFO 2020-03-16 04:13:21,366 judgelist Judge available after grading 56: judge1
+INFO 2020-03-16 04:13:38,972 judgelist Free judges: 1
+INFO 2020-03-16 04:13:38,973 judgelist Dispatched submission 57 to: judge1
+INFO 2020-03-16 04:13:38,980 judgehandler Submission acknowledged: 57
+INFO 2020-03-16 04:13:39,209 judgehandler judge1: Submission generated compiler messages: 57
+INFO 2020-03-16 04:13:39,974 judgehandler judge1: Grading has begun on: 57
+INFO 2020-03-16 04:13:40,763 judgehandler judge1: 1 test case(s) completed on: 57
+INFO 2020-03-16 04:13:41,708 judgehandler judge1: Grading has ended on: 57
+INFO 2020-03-16 04:13:41,708 judgelist Judge available after grading 57: judge1
+INFO 2020-03-16 04:25:44,775 judgelist Free judges: 1
+INFO 2020-03-16 04:25:44,776 judgelist Dispatched submission 58 to: judge1
+INFO 2020-03-16 04:25:44,784 judgehandler Submission acknowledged: 58
+INFO 2020-03-16 04:25:46,058 judgehandler judge1: Submission generated compiler messages: 58
+INFO 2020-03-16 04:25:46,121 judgehandler judge1: Grading has begun on: 58
+INFO 2020-03-16 04:25:46,157 judgehandler judge1: 1 test case(s) completed on: 58
+INFO 2020-03-16 04:25:46,224 judgehandler judge1: Grading has ended on: 58
+INFO 2020-03-16 04:25:46,225 judgelist Judge available after grading 58: judge1
+INFO 2020-03-16 04:28:46,644 judgelist Free judges: 1
+INFO 2020-03-16 04:28:46,645 judgelist Dispatched submission 59 to: judge1
+INFO 2020-03-16 04:28:46,661 judgehandler Submission acknowledged: 59
+INFO 2020-03-16 04:28:47,484 judgehandler judge1: Submission generated compiler messages: 59
+INFO 2020-03-16 04:28:47,524 judgehandler judge1: Grading has begun on: 59
+INFO 2020-03-16 04:28:47,560 judgehandler judge1: 1 test case(s) completed on: 59
+INFO 2020-03-16 04:28:47,696 judgehandler judge1: Grading has ended on: 59
+INFO 2020-03-16 04:28:47,697 judgelist Judge available after grading 59: judge1
+INFO 2020-03-16 04:33:13,204 judgelist Free judges: 1
+INFO 2020-03-16 04:33:13,204 judgelist Dispatched submission 60 to: judge1
+INFO 2020-03-16 04:33:13,208 judgehandler Submission acknowledged: 60
+INFO 2020-03-16 04:33:14,148 judgehandler judge1: Submission generated compiler messages: 60
+INFO 2020-03-16 04:33:14,203 judgehandler judge1: Grading has begun on: 60
+INFO 2020-03-16 04:33:14,241 judgehandler judge1: 3 test case(s) completed on: 60
+INFO 2020-03-16 04:33:14,306 judgehandler judge1: Grading has ended on: 60
+INFO 2020-03-16 04:33:14,306 judgelist Judge available after grading 60: judge1
+INFO 2020-03-16 04:33:33,916 judgelist Free judges: 1
+INFO 2020-03-16 04:33:33,917 judgelist Dispatched submission 61 to: judge1
+INFO 2020-03-16 04:33:33,935 judgehandler Submission acknowledged: 61
+INFO 2020-03-16 04:33:34,789 judgehandler judge1: Submission generated compiler messages: 61
+INFO 2020-03-16 04:33:34,821 judgehandler judge1: Grading has begun on: 61
+INFO 2020-03-16 04:33:34,947 judgehandler judge1: 2 test case(s) completed on: 61
+INFO 2020-03-16 04:33:35,013 judgehandler judge1: 1 test case(s) completed on: 61
+INFO 2020-03-16 04:33:35,083 judgehandler judge1: Grading has ended on: 61
+INFO 2020-03-16 04:33:35,083 judgelist Judge available after grading 61: judge1
+INFO 2020-03-16 04:38:54,503 judgelist Free judges: 1
+INFO 2020-03-16 04:38:54,504 judgelist Dispatched submission 62 to: judge1
+INFO 2020-03-16 04:38:54,523 judgehandler Submission acknowledged: 62
+INFO 2020-03-16 04:38:55,380 judgehandler judge1: Submission generated compiler messages: 62
+INFO 2020-03-16 04:38:55,419 judgehandler judge1: Grading has begun on: 62
+INFO 2020-03-16 04:38:55,468 judgehandler judge1: 1 test case(s) completed on: 62
+INFO 2020-03-16 04:38:55,651 judgehandler judge1: 10 test case(s) completed on: 62
+INFO 2020-03-16 04:38:55,902 judgehandler judge1: 10 test case(s) completed on: 62
+INFO 2020-03-16 04:38:56,423 judgehandler judge1: 3 test case(s) completed on: 62
+INFO 2020-03-16 04:38:56,505 judgehandler judge1: 2 test case(s) completed on: 62
+INFO 2020-03-16 04:38:56,658 judgehandler judge1: 9 test case(s) completed on: 62
+INFO 2020-03-16 04:38:56,907 judgehandler judge1: 9 test case(s) completed on: 62
+INFO 2020-03-16 04:38:57,484 judgehandler judge1: 4 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,115 judgehandler judge1: 1 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,208 judgehandler judge1: 2 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,302 judgehandler judge1: 6 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,417 judgehandler judge1: 9 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,668 judgehandler judge1: 22 test case(s) completed on: 62
+INFO 2020-03-16 04:38:58,922 judgehandler judge1: 10 test case(s) completed on: 62
+INFO 2020-03-16 04:38:59,031 judgehandler judge1: 2 test case(s) completed on: 62
+INFO 2020-03-16 04:38:59,172 judgehandler judge1: Grading has ended on: 62
+INFO 2020-03-16 04:38:59,172 judgelist Judge available after grading 62: judge1
+INFO 2020-03-16 04:50:00,653 judgelist Free judges: 1
+INFO 2020-03-16 04:50:00,653 judgelist Dispatched submission 63 to: judge1
+INFO 2020-03-16 04:50:00,671 judgehandler Submission acknowledged: 63
+INFO 2020-03-16 04:50:01,525 judgehandler judge1: Submission generated compiler messages: 63
+INFO 2020-03-16 04:50:01,862 judgehandler judge1: Grading has begun on: 63
+INFO 2020-03-16 04:50:02,137 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:02,249 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:02,317 judgehandler judge1: 4 test case(s) completed on: 63
+INFO 2020-03-16 04:50:02,783 judgehandler judge1: 12 test case(s) completed on: 63
+INFO 2020-03-16 04:50:03,436 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:04,285 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:05,115 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:06,612 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,442 judgehandler judge1: 3 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,536 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,641 judgehandler judge1: 6 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,741 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,834 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:07,940 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:08,041 judgehandler judge1: 3 test case(s) completed on: 63
+INFO 2020-03-16 04:50:08,154 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:08,272 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:08,467 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:09,446 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:09,624 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:09,743 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:09,861 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-16 04:50:09,991 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:10,169 judgehandler judge1: 7 test case(s) completed on: 63
+INFO 2020-03-16 04:50:10,347 judgehandler judge1: 12 test case(s) completed on: 63
+INFO 2020-03-16 04:50:10,537 judgehandler judge1: 9 test case(s) completed on: 63
+INFO 2020-03-16 04:50:10,897 judgehandler judge1: 8 test case(s) completed on: 63
+INFO 2020-03-16 04:50:11,563 judgehandler judge1: 4 test case(s) completed on: 63
+INFO 2020-03-16 04:50:11,681 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:11,813 judgehandler judge1: 1 test case(s) completed on: 63
+INFO 2020-03-16 04:50:11,944 judgehandler judge1: 4 test case(s) completed on: 63
+INFO 2020-03-16 04:50:12,087 judgehandler judge1: Grading has ended on: 63
+INFO 2020-03-16 04:50:12,088 judgelist Judge available after grading 63: judge1
diff --git a/dmoj/settings.py b/dmoj/settings.py
index dd0b32e..3f2b4cb 100644
--- a/dmoj/settings.py
+++ b/dmoj/settings.py
@@ -109,7 +109,7 @@ TIMEZONE_MAP = None
TIMEZONE_DETECT_BACKEND = None
TERMS_OF_SERVICE_URL = None
-DEFAULT_USER_LANGUAGE = 'PY3'
+DEFAULT_USER_LANGUAGE = 'CPP11'
PHANTOMJS = ''
PHANTOMJS_PDF_ZOOM = 0.75
@@ -431,9 +431,9 @@ EVENT_DAEMON_SUBMISSION_KEY = '6Sdmkx^%pk@GsifDfXcwX*Y7LRF%RGT8vmFpSxFBT$fwS7trc
# https://docs.djangoproject.com/en/1.11/topics/i18n/
# Whatever you do, this better be one of the entries in `LANGUAGES`.
-LANGUAGE_CODE = 'en'
-TIME_ZONE = 'UTC'
-DEFAULT_USER_TIME_ZONE = 'America/Toronto'
+LANGUAGE_CODE = 'vi'
+TIME_ZONE = 'Asia/Ho_Chi_Minh'
+DEFAULT_USER_TIME_ZONE = 'Asia/Ho_Chi_Minh'
USE_I18N = True
USE_L10N = True
USE_TZ = True
diff --git a/make_style.sh b/make_style.sh
index bc70d19..1a837b0 100755
--- a/make_style.sh
+++ b/make_style.sh
@@ -17,7 +17,7 @@ fi
FILES=(sass_processed/style.css sass_processed/content-description.css sass_processed/table.css sass_processed/ranks.css)
cd `dirname $0`
-sass --update resources:sass_processed
+sass resources:sass_processed
echo
postcss "${FILES[@]}" --verbose --use autoprefixer -d resources
diff --git a/resources/base.scss b/resources/base.scss
index f04b204..5aae208 100644
--- a/resources/base.scss
+++ b/resources/base.scss
@@ -218,7 +218,7 @@ header {
}
#nav-shadow {
- height: 3px;
+ height: 1px;
background: linear-gradient(rgba(0, 0, 0, 0.5), transparent);
}
@@ -276,7 +276,7 @@ nav {
display: inline-block;
text-decoration: none;
vertical-align: middle;
- color: #FFF;
+ color: #3e452c;
padding: 13px 7px;
height: 18px;
@@ -291,8 +291,9 @@ nav {
}
&.active {
- color: #FFF;
+ // color: #FFF;
background: $highlight_blue;
+ color: black;
}
.nav-expand {
diff --git a/resources/blog.scss b/resources/blog.scss
index c5f0423..1a67fc2 100644
--- a/resources/blog.scss
+++ b/resources/blog.scss
@@ -15,10 +15,10 @@
font-size: 1.7em;
a {
- color: #5b80b9 !important;
+ color: Maroon !important;
&:hover {
- color: #0645ad !important;
+ color: #c00000 !important;
}
}
}
diff --git a/resources/table.scss b/resources/table.scss
index 0abb0be..f0901d6 100644
--- a/resources/table.scss
+++ b/resources/table.scss
@@ -42,9 +42,9 @@ $table_header_rounding: 6px;
th {
height: 2em;
- color: #FFF;
+ color: #2b333b;
background-color: $widget_black;
- border-color: #555;
+ border-color: #cccccc;
border-width: 1px 1px 0 0;
border-style: solid;
padding: 4px 10px;
diff --git a/resources/vars.scss b/resources/vars.scss
index 3f157ea..b599307 100644
--- a/resources/vars.scss
+++ b/resources/vars.scss
@@ -1,5 +1,5 @@
-$highlight_blue: #2980B9;
-$widget_black: #3b3b3b;
+$highlight_blue: white;
+$widget_black: #63c8f9;//68BBE3, add8e6
$border_gray: #ccc;
$background_gray: #ededed;
$background_light_gray: #fafafa;
diff --git a/resources/widgets.scss b/resources/widgets.scss
index fb8787b..a819d77 100644
--- a/resources/widgets.scss
+++ b/resources/widgets.scss
@@ -419,7 +419,7 @@ ul.select2-selection__rendered {
margin: 0 -5px;
background: $widget_black;
border-radius: $widget_border_radius $widget_border_radius 0 0;
- color: white;
+ color: #2b333b;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 7px;
@@ -427,7 +427,7 @@ ul.select2-selection__rendered {
}
.sidebox h3 .fa {
- color: white;
+ color: #2b333b;
float: right;
margin: 0.2em 0.4em 0 0;
}
diff --git a/templates/chat/chat.html b/templates/chat/chat.html
index 7b1eb9a..8a6ecfc 100644
--- a/templates/chat/chat.html
+++ b/templates/chat/chat.html
@@ -34,7 +34,9 @@
{% endblock js_media %}
{% block body %}
-
-
- Send
+
+
+
+
+ Send
{% endblock body %}
diff --git a/templates/problem/data.html b/templates/problem/data.html
index 389ec64..1f328f6 100644
--- a/templates/problem/data.html
+++ b/templates/problem/data.html
@@ -225,7 +225,7 @@
$('a#fill-testcases').click(function () {
var inFiles = [], outFiles = [];
for (var i = 0; i < window.valid_files.length; i++) {
- if (window.valid_files[i].endsWith(".in")) {
+ if (window.valid_files[i].endsWith(".in") || window.valid_files[i].endsWith(".inp")) {
inFiles.push(window.valid_files[i]);
}
if (window.valid_files[i].endsWith(".out")) {
@@ -233,7 +233,7 @@
}
}
if (inFiles.length == 0) {
- alert("No input/output files. Make sure your files' suffices are .in/.out");
+ alert("No input/output files. Make sure your files' suffices are .in(p)/.out");
return false;
}
if (inFiles.length != outFiles.length) {
@@ -248,6 +248,9 @@
for (var i = 0; i < inFiles.length; i++) {
$("#id_cases-" + i + "-input_file").val(inFiles[i]).change();
}
+ for (var i = 0; i < outFiles.length; i++) {
+ $("#id_cases-" + i + "-output_file").val(outFiles[i]).change();
+ }
// add points
if ($('#problem-type').val() == "ICPC") {
for (i = 0; i + 1 < inFiles.length; i++) {
From f74f8b6e054dacb446637933cbf05e5460d0b52a Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Tue, 17 Mar 2020 00:11:03 -0600
Subject: [PATCH 06/13] change e testcase table UI and add CPP validator
---
| 532 ++++++++++++++++++
judge/migrations/0101_custom_validator.py | 36 ++
judge/migrations/0102_fix_custom_validator.py | 23 +
judge/migrations/0103_fix_custom_validator.py | 18 +
judge/models/problem_data.py | 11 +
judge/utils/problem_data.py | 5 +
judge/views/problem.py | 6 +-
judge/views/problem_data.py | 17 +-
resources/base.scss | 14 +-
resources/submission.scss | 92 ++-
templates/about/custom-checker-sample.html | 30 +-
templates/problem/data.html | 89 +--
templates/submission/source.html | 2 +-
templates/submission/status-testcases.html | 105 ++--
templates/submission/status.html | 4 +-
15 files changed, 803 insertions(+), 181 deletions(-)
create mode 100644 judge/migrations/0101_custom_validator.py
create mode 100644 judge/migrations/0102_fix_custom_validator.py
create mode 100644 judge/migrations/0103_fix_custom_validator.py
diff --git a/ b/
index 4538084..1c37988 100644
--- a/
+++ b/
@@ -894,3 +894,535 @@ INFO 2020-03-16 04:50:11,813 judgehandler judge1: 1 test case(s) completed on: 6
INFO 2020-03-16 04:50:11,944 judgehandler judge1: 4 test case(s) completed on: 63
INFO 2020-03-16 04:50:12,087 judgehandler judge1: Grading has ended on: 63
INFO 2020-03-16 04:50:12,088 judgelist Judge available after grading 63: judge1
+INFO 2020-03-17 05:52:30,384 judgehandler Judge connected from: ('127.0.0.1', 43860)
+INFO 2020-03-17 05:52:30,386 judgehandler Judge authenticated: ('127.0.0.1', 43860) (judge1)
+INFO 2020-03-17 05:52:37,582 judgelist Free judges: 1
+INFO 2020-03-17 05:52:37,582 judgelist Dispatched submission 63 to: judge1
+INFO 2020-03-17 05:52:37,590 judgehandler Submission acknowledged: 63
+INFO 2020-03-17 05:52:39,371 judgehandler judge1: Submission generated compiler messages: 63
+INFO 2020-03-17 05:52:39,433 judgehandler judge1: Grading has begun on: 63
+INFO 2020-03-17 05:52:39,478 judgehandler judge1: 7 test case(s) completed on: 63
+INFO 2020-03-17 05:52:39,728 judgehandler judge1: 17 test case(s) completed on: 63
+INFO 2020-03-17 05:52:39,979 judgehandler judge1: 24 test case(s) completed on: 63
+INFO 2020-03-17 05:52:40,231 judgehandler judge1: 17 test case(s) completed on: 63
+INFO 2020-03-17 05:52:40,483 judgehandler judge1: 7 test case(s) completed on: 63
+INFO 2020-03-17 05:52:40,733 judgehandler judge1: 18 test case(s) completed on: 63
+INFO 2020-03-17 05:52:41,641 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-17 05:52:41,735 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-17 05:52:41,828 judgehandler judge1: 6 test case(s) completed on: 63
+INFO 2020-03-17 05:52:42,697 judgehandler judge1: Grading has ended on: 63
+INFO 2020-03-17 05:52:42,697 judgelist Judge available after grading 63: judge1
+INFO 2020-03-17 05:52:47,180 judgelist Free judges: 1
+INFO 2020-03-17 05:52:47,181 judgelist Dispatched submission 63 to: judge1
+INFO 2020-03-17 05:52:47,199 judgehandler Submission acknowledged: 63
+INFO 2020-03-17 05:52:48,095 judgehandler judge1: Submission generated compiler messages: 63
+INFO 2020-03-17 05:52:48,133 judgehandler judge1: Grading has begun on: 63
+INFO 2020-03-17 05:52:48,254 judgehandler judge1: 15 test case(s) completed on: 63
+INFO 2020-03-17 05:52:48,506 judgehandler judge1: 23 test case(s) completed on: 63
+INFO 2020-03-17 05:52:48,757 judgehandler judge1: 24 test case(s) completed on: 63
+INFO 2020-03-17 05:52:49,009 judgehandler judge1: 16 test case(s) completed on: 63
+INFO 2020-03-17 05:52:49,672 judgehandler judge1: 5 test case(s) completed on: 63
+INFO 2020-03-17 05:52:49,871 judgehandler judge1: 2 test case(s) completed on: 63
+INFO 2020-03-17 05:52:50,081 judgehandler judge1: 4 test case(s) completed on: 63
+INFO 2020-03-17 05:52:50,185 judgehandler judge1: 11 test case(s) completed on: 63
+INFO 2020-03-17 05:52:51,173 judgehandler judge1: Grading has ended on: 63
+INFO 2020-03-17 05:52:51,174 judgelist Judge available after grading 63: judge1
+INFO 2020-03-17 06:40:31,639 judgelist Free judges: 1
+INFO 2020-03-17 06:40:31,640 judgelist Dispatched submission 64 to: judge1
+INFO 2020-03-17 06:40:31,656 judgehandler Submission acknowledged: 64
+INFO 2020-03-17 06:40:32,523 judgehandler judge1: Submission failed to compile: 64
+INFO 2020-03-17 06:40:32,523 judgelist Judge available after grading 64: judge1
+INFO 2020-03-17 06:40:44,497 judgelist Free judges: 1
+INFO 2020-03-17 06:40:44,498 judgelist Dispatched submission 65 to: judge1
+INFO 2020-03-17 06:40:44,514 judgehandler Submission acknowledged: 65
+INFO 2020-03-17 06:40:45,380 judgehandler judge1: Submission generated compiler messages: 65
+INFO 2020-03-17 06:40:45,422 judgehandler judge1: Grading has begun on: 65
+INFO 2020-03-17 06:40:45,460 judgehandler judge1: 3 test case(s) completed on: 65
+INFO 2020-03-17 06:40:45,669 judgehandler judge1: 12 test case(s) completed on: 65
+INFO 2020-03-17 06:40:45,920 judgehandler judge1: 24 test case(s) completed on: 65
+INFO 2020-03-17 06:40:46,546 judgehandler judge1: 3 test case(s) completed on: 65
+INFO 2020-03-17 06:40:47,294 judgehandler judge1: 3 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,126 judgehandler judge1: 2 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,213 judgehandler judge1: 1 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,306 judgehandler judge1: 7 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,400 judgehandler judge1: 1 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,505 judgehandler judge1: 2 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,668 judgehandler judge1: 2 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,772 judgehandler judge1: 13 test case(s) completed on: 65
+INFO 2020-03-17 06:40:48,924 judgehandler judge1: 9 test case(s) completed on: 65
+INFO 2020-03-17 06:40:49,083 judgehandler judge1: 12 test case(s) completed on: 65
+INFO 2020-03-17 06:40:49,198 judgehandler judge1: 6 test case(s) completed on: 65
+INFO 2020-03-17 06:40:49,292 judgehandler judge1: Grading has ended on: 65
+INFO 2020-03-17 06:40:49,292 judgelist Judge available after grading 65: judge1
+INFO 2020-03-17 06:41:14,985 judgelist Free judges: 1
+INFO 2020-03-17 06:41:14,986 judgelist Dispatched submission 66 to: judge1
+INFO 2020-03-17 06:41:15,002 judgehandler Submission acknowledged: 66
+INFO 2020-03-17 06:41:15,933 judgehandler judge1: Submission generated compiler messages: 66
+INFO 2020-03-17 06:41:15,987 judgehandler judge1: Grading has begun on: 66
+INFO 2020-03-17 06:41:16,732 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:17,484 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:18,485 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:19,237 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:19,988 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:20,739 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:21,490 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:22,241 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:22,992 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:23,744 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:24,746 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:25,497 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:26,537 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:26,999 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:27,750 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:28,502 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:29,253 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:30,004 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:30,756 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:31,507 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:32,259 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:33,260 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:34,011 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:34,763 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:35,514 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:36,783 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:37,016 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:37,767 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:38,519 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:39,270 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:40,274 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:41,220 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:41,523 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:42,275 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:43,026 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:43,777 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:44,761 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:45,279 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:46,031 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:46,782 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:47,793 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:48,284 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:49,035 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:49,786 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:50,537 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:51,539 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:52,290 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:53,041 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:54,012 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:54,667 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:56,598 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:57,148 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:57,336 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:57,799 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:58,550 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:41:59,301 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:00,052 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:00,803 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:01,554 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:02,305 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:03,056 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:03,807 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:04,559 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:05,560 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:07,232 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:08,571 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:08,748 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:08,868 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:09,316 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:10,067 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:10,818 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:11,569 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:12,523 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:13,071 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:14,073 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:14,824 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:15,575 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:16,519 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:17,077 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:17,885 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:19,195 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:19,483 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:20,671 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:21,007 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:21,584 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:22,702 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:23,337 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:24,103 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:24,839 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:25,590 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:27,274 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:28,934 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:30,623 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:31,010 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:31,222 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:31,346 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:31,465 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:32,101 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:33,421 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:33,600 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 06:42:33,778 judgehandler judge1: Grading has ended on: 66
+INFO 2020-03-17 06:42:33,778 judgelist Judge available after grading 66: judge1
+INFO 2020-03-17 06:43:15,398 judgelist Free judges: 1
+INFO 2020-03-17 06:43:15,399 judgelist Dispatched submission 67 to: judge1
+INFO 2020-03-17 06:43:15,416 judgehandler Submission acknowledged: 67
+INFO 2020-03-17 06:43:16,291 judgehandler judge1: Submission generated compiler messages: 67
+INFO 2020-03-17 06:43:16,335 judgehandler judge1: Grading has begun on: 67
+INFO 2020-03-17 06:43:18,415 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:19,417 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:20,418 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:22,421 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:24,423 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:25,675 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:28,800 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:29,681 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:30,682 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:31,684 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:33,686 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:34,868 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:37,161 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:37,246 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:38,694 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:40,696 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:43,158 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:44,952 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:46,955 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:48,957 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:50,960 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:52,963 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:54,965 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:56,968 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:57,969 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:43:59,972 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:00,974 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:02,976 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:05,229 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:06,231 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:08,234 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:09,235 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:11,238 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:13,241 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:14,242 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:16,245 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:17,246 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:19,249 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:21,502 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:22,504 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:23,505 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:25,508 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:27,511 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:29,513 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:31,516 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:32,518 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:34,520 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:35,522 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:36,523 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:37,775 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:38,777 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:40,780 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:42,546 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:43,527 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:44,256 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:44,786 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:46,840 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:48,436 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:49,104 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:50,794 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:51,832 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:52,797 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:55,050 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:57,053 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:44:59,055 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:00,057 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:01,058 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:02,066 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:03,061 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:05,064 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:06,794 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:07,163 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:08,069 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:10,071 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:12,884 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:13,325 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:14,327 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:16,330 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:17,514 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:19,334 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:20,623 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:21,528 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:22,338 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:23,339 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:25,342 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:26,496 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:27,345 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:29,348 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:30,351 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:31,602 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:33,605 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:35,608 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:37,802 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:38,612 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:39,614 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:41,616 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:42,618 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:44,300 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:45,622 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:46,592 judgehandler judge1: 1 test case(s) completed on: 67
+INFO 2020-03-17 06:45:46,688 judgehandler judge1: Grading has ended on: 67
+INFO 2020-03-17 06:45:46,688 judgelist Judge available after grading 67: judge1
+INFO 2020-03-17 08:13:04,323 judgelist Free judges: 1
+INFO 2020-03-17 08:13:04,324 judgelist Dispatched submission 63 to: judge1
+INFO 2020-03-17 08:13:04,341 judgehandler Submission acknowledged: 63
+INFO 2020-03-17 08:13:05,259 judgehandler judge1: Submission generated compiler messages: 63
+INFO 2020-03-17 08:13:05,297 judgehandler judge1: Grading has begun on: 63
+INFO 2020-03-17 08:13:05,490 judgehandler judge1: 20 test case(s) completed on: 63
+INFO 2020-03-17 08:13:05,740 judgehandler judge1: 12 test case(s) completed on: 63
+INFO 2020-03-17 08:13:05,993 judgehandler judge1: 18 test case(s) completed on: 63
+INFO 2020-03-17 08:13:06,246 judgehandler judge1: 10 test case(s) completed on: 63
+INFO 2020-03-17 08:13:06,497 judgehandler judge1: 7 test case(s) completed on: 63
+INFO 2020-03-17 08:13:06,748 judgehandler judge1: 13 test case(s) completed on: 63
+INFO 2020-03-17 08:13:06,999 judgehandler judge1: 17 test case(s) completed on: 63
+INFO 2020-03-17 08:13:07,100 judgehandler judge1: 3 test case(s) completed on: 63
+INFO 2020-03-17 08:13:07,195 judgehandler judge1: Grading has ended on: 63
+INFO 2020-03-17 08:13:07,195 judgelist Judge available after grading 63: judge1
+INFO 2020-03-17 08:24:22,552 judgelist Free judges: 1
+INFO 2020-03-17 08:24:22,553 judgelist Dispatched submission 66 to: judge1
+INFO 2020-03-17 08:24:22,570 judgehandler Submission acknowledged: 66
+INFO 2020-03-17 08:24:23,469 judgehandler judge1: Submission generated compiler messages: 66
+INFO 2020-03-17 08:24:23,513 judgehandler judge1: Grading has begun on: 66
+INFO 2020-03-17 08:24:24,456 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:25,208 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:25,958 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:26,710 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:27,461 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:28,212 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:28,963 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:29,714 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:30,466 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:32,967 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:34,755 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:37,701 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:38,462 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:38,699 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:38,895 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:39,823 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:39,953 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:40,072 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:40,190 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:40,309 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:40,737 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:41,488 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:42,498 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:42,990 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:43,803 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:44,493 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:45,474 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:45,995 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:48,833 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:49,522 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:50,522 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:51,445 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:52,724 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:54,554 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:57,735 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:59,334 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:59,489 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:59,650 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:24:59,794 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:00,445 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:00,918 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,033 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,128 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,221 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,373 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,467 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:01,769 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:02,520 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:03,779 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:04,565 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:05,867 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:06,412 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:06,903 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:07,413 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:07,779 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:08,780 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:09,618 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:10,282 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:11,281 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:12,546 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:12,689 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:13,287 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:15,030 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:16,166 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:16,597 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:16,792 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:17,543 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:18,545 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:19,296 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:20,887 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:20,982 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:21,550 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:22,495 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:23,691 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:23,951 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:24,554 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:25,556 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:26,307 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:27,058 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:27,809 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:28,560 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:29,311 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:30,573 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:30,814 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:31,565 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:32,316 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:33,067 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:34,918 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:35,862 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:37,273 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:38,821 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:39,952 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:41,092 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:42,292 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:43,096 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:43,911 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:44,383 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:44,502 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:44,708 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:44,826 judgehandler judge1: 1 test case(s) completed on: 66
+INFO 2020-03-17 08:25:44,944 judgehandler judge1: Grading has ended on: 66
+INFO 2020-03-17 08:25:44,945 judgelist Judge available after grading 66: judge1
+INFO 2020-03-17 09:36:18,687 judgehandler judge1: Updated problem list
+INFO 2020-03-17 09:36:57,505 judgehandler judge1: Updated problem list
+INFO 2020-03-17 09:53:24,844 judgehandler judge1: Updated problem list
+INFO 2020-03-17 09:53:45,291 judgehandler judge1: Updated problem list
+INFO 2020-03-17 09:53:45,293 judgehandler judge1: Updated problem list
+INFO 2020-03-17 09:55:08,413 judgelist Free judges: 1
+INFO 2020-03-17 09:55:08,414 judgelist Dispatched submission 68 to: judge1
+INFO 2020-03-17 09:55:08,431 judgehandler Submission acknowledged: 68
+INFO 2020-03-17 09:55:08,495 judgehandler judge1: Grading has begun on: 68
+INFO 2020-03-17 09:55:08,540 judgehandler judge1: 100 test case(s) completed on: 68
+INFO 2020-03-17 09:55:08,739 judgehandler judge1: Grading has ended on: 68
+INFO 2020-03-17 09:55:08,739 judgelist Judge available after grading 68: judge1
+INFO 2020-03-17 10:02:36,565 judgelist Free judges: 1
+INFO 2020-03-17 10:02:36,566 judgelist Dispatched submission 69 to: judge1
+INFO 2020-03-17 10:02:36,582 judgehandler Submission acknowledged: 69
+INFO 2020-03-17 10:02:36,645 judgehandler judge1: Grading has begun on: 69
+INFO 2020-03-17 10:02:36,799 judgehandler judge1: 4 test case(s) completed on: 69
+INFO 2020-03-17 10:02:37,049 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:37,300 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:37,551 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:37,801 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:38,052 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:38,302 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:38,553 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:38,803 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:39,098 judgehandler judge1: 4 test case(s) completed on: 69
+INFO 2020-03-17 10:02:39,811 judgehandler judge1: 2 test case(s) completed on: 69
+INFO 2020-03-17 10:02:39,994 judgehandler judge1: 1 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,088 judgehandler judge1: 2 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,188 judgehandler judge1: 6 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,431 judgehandler judge1: 8 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,561 judgehandler judge1: 6 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,812 judgehandler judge1: 7 test case(s) completed on: 69
+INFO 2020-03-17 10:02:40,939 judgehandler judge1: 4 test case(s) completed on: 69
+INFO 2020-03-17 10:02:41,119 judgehandler judge1: Grading has ended on: 69
+INFO 2020-03-17 10:02:41,120 judgelist Judge available after grading 69: judge1
+INFO 2020-03-17 10:06:16,366 judgelist Free judges: 1
+INFO 2020-03-17 10:06:16,366 judgelist Dispatched submission 70 to: judge1
+INFO 2020-03-17 10:06:16,383 judgehandler Submission acknowledged: 70
+INFO 2020-03-17 10:06:16,445 judgehandler judge1: Grading has begun on: 70
+INFO 2020-03-17 10:06:16,499 judgehandler judge1: 100 test case(s) completed on: 70
+INFO 2020-03-17 10:06:16,727 judgehandler judge1: Grading has ended on: 70
+INFO 2020-03-17 10:06:16,727 judgelist Judge available after grading 70: judge1
+INFO 2020-03-17 10:19:36,305 judgelist Free judges: 1
+INFO 2020-03-17 10:19:36,306 judgelist Dispatched submission 71 to: judge1
+INFO 2020-03-17 10:19:36,323 judgehandler Submission acknowledged: 71
+INFO 2020-03-17 10:19:36,381 judgehandler judge1: Grading has begun on: 71
+INFO 2020-03-17 10:19:36,495 judgehandler judge1: 2 test case(s) completed on: 71
+INFO 2020-03-17 10:19:36,746 judgehandler judge1: 4 test case(s) completed on: 71
+INFO 2020-03-17 10:19:37,500 judgehandler judge1: 2 test case(s) completed on: 71
+INFO 2020-03-17 10:19:38,294 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:39,134 judgehandler judge1: 3 test case(s) completed on: 71
+INFO 2020-03-17 10:19:39,738 judgehandler judge1: 3 test case(s) completed on: 71
+INFO 2020-03-17 10:19:39,819 judgehandler judge1: 3 test case(s) completed on: 71
+INFO 2020-03-17 10:19:39,913 judgehandler judge1: 2 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,006 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,100 judgehandler judge1: 2 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,194 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,288 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,393 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,546 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,789 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,888 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:40,988 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:41,095 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,010 judgehandler judge1: 5 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,330 judgehandler judge1: 2 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,509 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,687 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,806 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:42,943 judgehandler judge1: 8 test case(s) completed on: 71
+INFO 2020-03-17 10:19:43,081 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:43,211 judgehandler judge1: 7 test case(s) completed on: 71
+INFO 2020-03-17 10:19:44,145 judgehandler judge1: 1 test case(s) completed on: 71
+INFO 2020-03-17 10:19:44,329 judgehandler judge1: Grading has ended on: 71
+INFO 2020-03-17 10:19:44,329 judgelist Judge available after grading 71: judge1
+INFO 2020-03-17 10:20:03,524 judgelist Free judges: 1
+INFO 2020-03-17 10:20:03,524 judgelist Dispatched submission 72 to: judge1
+INFO 2020-03-17 10:20:03,543 judgehandler Submission acknowledged: 72
+INFO 2020-03-17 10:20:04,559 judgehandler judge1: Grading has begun on: 72
+INFO 2020-03-17 10:20:04,980 judgehandler judge1: 100 test case(s) completed on: 72
+INFO 2020-03-17 10:20:06,063 judgehandler judge1: Grading has ended on: 72
+INFO 2020-03-17 10:20:06,064 judgelist Judge available after grading 72: judge1
+INFO 2020-03-17 10:39:42,497 judgehandler judge1: Updated problem list
+INFO 2020-03-17 10:40:06,623 judgelist Free judges: 1
+INFO 2020-03-17 10:40:06,624 judgelist Dispatched submission 73 to: judge1
+INFO 2020-03-17 10:40:06,641 judgehandler Submission acknowledged: 73
+INFO 2020-03-17 10:40:07,021 judgehandler judge1: Grading has begun on: 73
+INFO 2020-03-17 10:40:07,661 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:07,760 judgehandler judge1: 2 test case(s) completed on: 73
+INFO 2020-03-17 10:40:07,898 judgehandler judge1: 2 test case(s) completed on: 73
+INFO 2020-03-17 10:40:07,967 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:08,036 judgehandler judge1: 2 test case(s) completed on: 73
+INFO 2020-03-17 10:40:08,105 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:08,641 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:10,832 judgehandler judge1: 2 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,113 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,207 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,301 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,395 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,508 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,626 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,745 judgehandler judge1: 5 test case(s) completed on: 73
+INFO 2020-03-17 10:40:11,864 judgehandler judge1: 6 test case(s) completed on: 73
+INFO 2020-03-17 10:40:12,042 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,078 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,256 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,374 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,494 judgehandler judge1: 1 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,612 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,754 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:13,898 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:14,186 judgehandler judge1: 7 test case(s) completed on: 73
+INFO 2020-03-17 10:40:15,061 judgehandler judge1: 2 test case(s) completed on: 73
+INFO 2020-03-17 10:40:15,343 judgehandler judge1: Grading has ended on: 73
+INFO 2020-03-17 10:40:15,344 judgelist Judge available after grading 73: judge1
+INFO 2020-03-17 10:41:31,866 judgehandler judge1: Updated problem list
+INFO 2020-03-17 11:45:21,903 judgehandler judge1: Updated problem list
+INFO 2020-03-17 11:46:04,956 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:03:42,222 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:04:10,459 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:06:29,965 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:06:29,967 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:06:51,732 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:08:18,391 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:08:33,491 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:08:40,406 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:08:47,975 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:17:40,345 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:50:27,823 judgehandler judge1: Updated problem list
+INFO 2020-03-17 12:50:50,494 judgehandler judge1: Updated problem list
+INFO 2020-03-17 13:03:40,569 judgehandler judge1: Updated problem list
+INFO 2020-03-17 13:03:40,716 judgehandler judge1: Updated problem list
+INFO 2020-03-17 13:04:09,882 judgehandler judge1: Updated problem list
+INFO 2020-03-17 13:04:22,381 judgehandler judge1: Updated problem list
+INFO 2020-03-17 13:07:13,538 judgehandler judge1: Updated problem list
diff --git a/judge/migrations/0101_custom_validator.py b/judge/migrations/0101_custom_validator.py
new file mode 100644
index 0000000..842006c
--- /dev/null
+++ b/judge/migrations/0101_custom_validator.py
@@ -0,0 +1,36 @@
+# Generated by Django 2.2.9 on 2020-03-17 05:01
+
+import django.core.validators
+from django.db import migrations, models
+import judge.models.problem_data
+import judge.utils.problem_data
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('judge', '0100_auto_20200127_0059'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='problemdata',
+ name='custom_valid',
+ field=models.FileField(blank=True, null=True, storage=judge.utils.problem_data.ProblemDataStorage(), upload_to=judge.models.problem_data.problem_directory_file, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['cpp'])], verbose_name='custom validator file'),
+ ),
+ migrations.AlterField(
+ model_name='problemdata',
+ name='checker',
+ field=models.CharField(blank=True, choices=[('standard', 'Standard'), ('floats', 'Floats'), ('floatsabs', 'Floats (absolute)'), ('floatsrel', 'Floats (relative)'), ('rstripped', 'Non-trailing spaces'), ('sorted', 'Unordered'), ('identical', 'Byte identical'), ('linecount', 'Line-by-line'), ('custom', 'Custom checker'), ('custom_valid', 'Custom Validator')], max_length=10, verbose_name='checker'),
+ ),
+ migrations.AlterField(
+ model_name='problemtestcase',
+ name='checker',
+ field=models.CharField(blank=True, choices=[('standard', 'Standard'), ('floats', 'Floats'), ('floatsabs', 'Floats (absolute)'), ('floatsrel', 'Floats (relative)'), ('rstripped', 'Non-trailing spaces'), ('sorted', 'Unordered'), ('identical', 'Byte identical'), ('linecount', 'Line-by-line'), ('custom', 'Custom checker'), ('custom_valid', 'Custom Validator')], max_length=10, verbose_name='checker'),
+ ),
+ migrations.AlterField(
+ model_name='profile',
+ name='timezone',
+ field=models.CharField(choices=[('Africa', [('Africa/Abidjan', 'Abidjan'), ('Africa/Accra', 'Accra'), ('Africa/Addis_Ababa', 'Addis_Ababa'), ('Africa/Algiers', 'Algiers'), ('Africa/Asmara', 'Asmara'), ('Africa/Asmera', 'Asmera'), ('Africa/Bamako', 'Bamako'), ('Africa/Bangui', 'Bangui'), ('Africa/Banjul', 'Banjul'), ('Africa/Bissau', 'Bissau'), ('Africa/Blantyre', 'Blantyre'), ('Africa/Brazzaville', 'Brazzaville'), ('Africa/Bujumbura', 'Bujumbura'), ('Africa/Cairo', 'Cairo'), ('Africa/Casablanca', 'Casablanca'), ('Africa/Ceuta', 'Ceuta'), ('Africa/Conakry', 'Conakry'), ('Africa/Dakar', 'Dakar'), ('Africa/Dar_es_Salaam', 'Dar_es_Salaam'), ('Africa/Djibouti', 'Djibouti'), ('Africa/Douala', 'Douala'), ('Africa/El_Aaiun', 'El_Aaiun'), ('Africa/Freetown', 'Freetown'), ('Africa/Gaborone', 'Gaborone'), ('Africa/Harare', 'Harare'), ('Africa/Johannesburg', 'Johannesburg'), ('Africa/Juba', 'Juba'), ('Africa/Kampala', 'Kampala'), ('Africa/Khartoum', 'Khartoum'), ('Africa/Kigali', 'Kigali'), ('Africa/Kinshasa', 'Kinshasa'), ('Africa/Lagos', 'Lagos'), ('Africa/Libreville', 'Libreville'), ('Africa/Lome', 'Lome'), ('Africa/Luanda', 'Luanda'), ('Africa/Lubumbashi', 'Lubumbashi'), ('Africa/Lusaka', 'Lusaka'), ('Africa/Malabo', 'Malabo'), ('Africa/Maputo', 'Maputo'), ('Africa/Maseru', 'Maseru'), ('Africa/Mbabane', 'Mbabane'), ('Africa/Mogadishu', 'Mogadishu'), ('Africa/Monrovia', 'Monrovia'), ('Africa/Nairobi', 'Nairobi'), ('Africa/Ndjamena', 'Ndjamena'), ('Africa/Niamey', 'Niamey'), ('Africa/Nouakchott', 'Nouakchott'), ('Africa/Ouagadougou', 'Ouagadougou'), ('Africa/Porto-Novo', 'Porto-Novo'), ('Africa/Sao_Tome', 'Sao_Tome'), ('Africa/Timbuktu', 'Timbuktu'), ('Africa/Tripoli', 'Tripoli'), ('Africa/Tunis', 'Tunis'), ('Africa/Windhoek', 'Windhoek')]), ('America', [('America/Adak', 'Adak'), ('America/Anchorage', 'Anchorage'), ('America/Anguilla', 'Anguilla'), ('America/Antigua', 'Antigua'), ('America/Araguaina', 'Araguaina'), ('America/Argentina/Buenos_Aires', 'Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'Argentina/Catamarca'), ('America/Argentina/ComodRivadavia', 'Argentina/ComodRivadavia'), ('America/Argentina/Cordoba', 'Argentina/Cordoba'), ('America/Argentina/Jujuy', 'Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'Argentina/Salta'), ('America/Argentina/San_Juan', 'Argentina/San_Juan'), ('America/Argentina/San_Luis', 'Argentina/San_Luis'), ('America/Argentina/Tucuman', 'Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'Argentina/Ushuaia'), ('America/Aruba', 'Aruba'), ('America/Asuncion', 'Asuncion'), ('America/Atikokan', 'Atikokan'), ('America/Atka', 'Atka'), ('America/Bahia', 'Bahia'), ('America/Bahia_Banderas', 'Bahia_Banderas'), ('America/Barbados', 'Barbados'), ('America/Belem', 'Belem'), ('America/Belize', 'Belize'), ('America/Blanc-Sablon', 'Blanc-Sablon'), ('America/Boa_Vista', 'Boa_Vista'), ('America/Bogota', 'Bogota'), ('America/Boise', 'Boise'), ('America/Buenos_Aires', 'Buenos_Aires'), ('America/Cambridge_Bay', 'Cambridge_Bay'), ('America/Campo_Grande', 'Campo_Grande'), ('America/Cancun', 'Cancun'), ('America/Caracas', 'Caracas'), ('America/Catamarca', 'Catamarca'), ('America/Cayenne', 'Cayenne'), ('America/Cayman', 'Cayman'), ('America/Chicago', 'Chicago'), ('America/Chihuahua', 'Chihuahua'), ('America/Coral_Harbour', 'Coral_Harbour'), ('America/Cordoba', 'Cordoba'), ('America/Costa_Rica', 'Costa_Rica'), ('America/Creston', 'Creston'), ('America/Cuiaba', 'Cuiaba'), ('America/Curacao', 'Curacao'), ('America/Danmarkshavn', 'Danmarkshavn'), ('America/Dawson', 'Dawson'), ('America/Dawson_Creek', 'Dawson_Creek'), ('America/Denver', 'Denver'), ('America/Detroit', 'Detroit'), ('America/Dominica', 'Dominica'), ('America/Edmonton', 'Edmonton'), ('America/Eirunepe', 'Eirunepe'), ('America/El_Salvador', 'El_Salvador'), ('America/Ensenada', 'Ensenada'), ('America/Fort_Nelson', 'Fort_Nelson'), ('America/Fort_Wayne', 'Fort_Wayne'), ('America/Fortaleza', 'Fortaleza'), ('America/Glace_Bay', 'Glace_Bay'), ('America/Godthab', 'Godthab'), ('America/Goose_Bay', 'Goose_Bay'), ('America/Grand_Turk', 'Grand_Turk'), ('America/Grenada', 'Grenada'), ('America/Guadeloupe', 'Guadeloupe'), ('America/Guatemala', 'Guatemala'), ('America/Guayaquil', 'Guayaquil'), ('America/Guyana', 'Guyana'), ('America/Halifax', 'Halifax'), ('America/Havana', 'Havana'), ('America/Hermosillo', 'Hermosillo'), ('America/Indiana/Indianapolis', 'Indiana/Indianapolis'), ('America/Indiana/Knox', 'Indiana/Knox'), ('America/Indiana/Marengo', 'Indiana/Marengo'), ('America/Indiana/Petersburg', 'Indiana/Petersburg'), ('America/Indiana/Tell_City', 'Indiana/Tell_City'), ('America/Indiana/Vevay', 'Indiana/Vevay'), ('America/Indiana/Vincennes', 'Indiana/Vincennes'), ('America/Indiana/Winamac', 'Indiana/Winamac'), ('America/Indianapolis', 'Indianapolis'), ('America/Inuvik', 'Inuvik'), ('America/Iqaluit', 'Iqaluit'), ('America/Jamaica', 'Jamaica'), ('America/Jujuy', 'Jujuy'), ('America/Juneau', 'Juneau'), ('America/Kentucky/Louisville', 'Kentucky/Louisville'), ('America/Kentucky/Monticello', 'Kentucky/Monticello'), ('America/Knox_IN', 'Knox_IN'), ('America/Kralendijk', 'Kralendijk'), ('America/La_Paz', 'La_Paz'), ('America/Lima', 'Lima'), ('America/Los_Angeles', 'Los_Angeles'), ('America/Louisville', 'Louisville'), ('America/Lower_Princes', 'Lower_Princes'), ('America/Maceio', 'Maceio'), ('America/Managua', 'Managua'), ('America/Manaus', 'Manaus'), ('America/Marigot', 'Marigot'), ('America/Martinique', 'Martinique'), ('America/Matamoros', 'Matamoros'), ('America/Mazatlan', 'Mazatlan'), ('America/Mendoza', 'Mendoza'), ('America/Menominee', 'Menominee'), ('America/Merida', 'Merida'), ('America/Metlakatla', 'Metlakatla'), ('America/Mexico_City', 'Mexico_City'), ('America/Miquelon', 'Miquelon'), ('America/Moncton', 'Moncton'), ('America/Monterrey', 'Monterrey'), ('America/Montevideo', 'Montevideo'), ('America/Montreal', 'Montreal'), ('America/Montserrat', 'Montserrat'), ('America/Nassau', 'Nassau'), ('America/New_York', 'New_York'), ('America/Nipigon', 'Nipigon'), ('America/Nome', 'Nome'), ('America/Noronha', 'Noronha'), ('America/North_Dakota/Beulah', 'North_Dakota/Beulah'), ('America/North_Dakota/Center', 'North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'North_Dakota/New_Salem'), ('America/Ojinaga', 'Ojinaga'), ('America/Panama', 'Panama'), ('America/Pangnirtung', 'Pangnirtung'), ('America/Paramaribo', 'Paramaribo'), ('America/Phoenix', 'Phoenix'), ('America/Port-au-Prince', 'Port-au-Prince'), ('America/Port_of_Spain', 'Port_of_Spain'), ('America/Porto_Acre', 'Porto_Acre'), ('America/Porto_Velho', 'Porto_Velho'), ('America/Puerto_Rico', 'Puerto_Rico'), ('America/Punta_Arenas', 'Punta_Arenas'), ('America/Rainy_River', 'Rainy_River'), ('America/Rankin_Inlet', 'Rankin_Inlet'), ('America/Recife', 'Recife'), ('America/Regina', 'Regina'), ('America/Resolute', 'Resolute'), ('America/Rio_Branco', 'Rio_Branco'), ('America/Rosario', 'Rosario'), ('America/Santa_Isabel', 'Santa_Isabel'), ('America/Santarem', 'Santarem'), ('America/Santiago', 'Santiago'), ('America/Santo_Domingo', 'Santo_Domingo'), ('America/Sao_Paulo', 'Sao_Paulo'), ('America/Scoresbysund', 'Scoresbysund'), ('America/Shiprock', 'Shiprock'), ('America/Sitka', 'Sitka'), ('America/St_Barthelemy', 'St_Barthelemy'), ('America/St_Johns', 'St_Johns'), ('America/St_Kitts', 'St_Kitts'), ('America/St_Lucia', 'St_Lucia'), ('America/St_Thomas', 'St_Thomas'), ('America/St_Vincent', 'St_Vincent'), ('America/Swift_Current', 'Swift_Current'), ('America/Tegucigalpa', 'Tegucigalpa'), ('America/Thule', 'Thule'), ('America/Thunder_Bay', 'Thunder_Bay'), ('America/Tijuana', 'Tijuana'), ('America/Toronto', 'Toronto'), ('America/Tortola', 'Tortola'), ('America/Vancouver', 'Vancouver'), ('America/Virgin', 'Virgin'), ('America/Whitehorse', 'Whitehorse'), ('America/Winnipeg', 'Winnipeg'), ('America/Yakutat', 'Yakutat'), ('America/Yellowknife', 'Yellowknife')]), ('Antarctica', [('Antarctica/Casey', 'Casey'), ('Antarctica/Davis', 'Davis'), ('Antarctica/DumontDUrville', 'DumontDUrville'), ('Antarctica/Macquarie', 'Macquarie'), ('Antarctica/Mawson', 'Mawson'), ('Antarctica/McMurdo', 'McMurdo'), ('Antarctica/Palmer', 'Palmer'), ('Antarctica/Rothera', 'Rothera'), ('Antarctica/South_Pole', 'South_Pole'), ('Antarctica/Syowa', 'Syowa'), ('Antarctica/Troll', 'Troll'), ('Antarctica/Vostok', 'Vostok')]), ('Arctic', [('Arctic/Longyearbyen', 'Longyearbyen')]), ('Asia', [('Asia/Aden', 'Aden'), ('Asia/Almaty', 'Almaty'), ('Asia/Amman', 'Amman'), ('Asia/Anadyr', 'Anadyr'), ('Asia/Aqtau', 'Aqtau'), ('Asia/Aqtobe', 'Aqtobe'), ('Asia/Ashgabat', 'Ashgabat'), ('Asia/Ashkhabad', 'Ashkhabad'), ('Asia/Atyrau', 'Atyrau'), ('Asia/Baghdad', 'Baghdad'), ('Asia/Bahrain', 'Bahrain'), ('Asia/Baku', 'Baku'), ('Asia/Bangkok', 'Bangkok'), ('Asia/Barnaul', 'Barnaul'), ('Asia/Beirut', 'Beirut'), ('Asia/Bishkek', 'Bishkek'), ('Asia/Brunei', 'Brunei'), ('Asia/Calcutta', 'Calcutta'), ('Asia/Chita', 'Chita'), ('Asia/Choibalsan', 'Choibalsan'), ('Asia/Chongqing', 'Chongqing'), ('Asia/Chungking', 'Chungking'), ('Asia/Colombo', 'Colombo'), ('Asia/Dacca', 'Dacca'), ('Asia/Damascus', 'Damascus'), ('Asia/Dhaka', 'Dhaka'), ('Asia/Dili', 'Dili'), ('Asia/Dubai', 'Dubai'), ('Asia/Dushanbe', 'Dushanbe'), ('Asia/Famagusta', 'Famagusta'), ('Asia/Gaza', 'Gaza'), ('Asia/Harbin', 'Harbin'), ('Asia/Hebron', 'Hebron'), ('Asia/Ho_Chi_Minh', 'Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Hong_Kong'), ('Asia/Hovd', 'Hovd'), ('Asia/Irkutsk', 'Irkutsk'), ('Asia/Istanbul', 'Istanbul'), ('Asia/Jakarta', 'Jakarta'), ('Asia/Jayapura', 'Jayapura'), ('Asia/Jerusalem', 'Jerusalem'), ('Asia/Kabul', 'Kabul'), ('Asia/Kamchatka', 'Kamchatka'), ('Asia/Karachi', 'Karachi'), ('Asia/Kashgar', 'Kashgar'), ('Asia/Kathmandu', 'Kathmandu'), ('Asia/Katmandu', 'Katmandu'), ('Asia/Khandyga', 'Khandyga'), ('Asia/Kolkata', 'Kolkata'), ('Asia/Krasnoyarsk', 'Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Kuala_Lumpur'), ('Asia/Kuching', 'Kuching'), ('Asia/Kuwait', 'Kuwait'), ('Asia/Macao', 'Macao'), ('Asia/Macau', 'Macau'), ('Asia/Magadan', 'Magadan'), ('Asia/Makassar', 'Makassar'), ('Asia/Manila', 'Manila'), ('Asia/Muscat', 'Muscat'), ('Asia/Nicosia', 'Nicosia'), ('Asia/Novokuznetsk', 'Novokuznetsk'), ('Asia/Novosibirsk', 'Novosibirsk'), ('Asia/Omsk', 'Omsk'), ('Asia/Oral', 'Oral'), ('Asia/Phnom_Penh', 'Phnom_Penh'), ('Asia/Pontianak', 'Pontianak'), ('Asia/Pyongyang', 'Pyongyang'), ('Asia/Qatar', 'Qatar'), ('Asia/Qostanay', 'Qostanay'), ('Asia/Qyzylorda', 'Qyzylorda'), ('Asia/Rangoon', 'Rangoon'), ('Asia/Riyadh', 'Riyadh'), ('Asia/Saigon', 'Saigon'), ('Asia/Sakhalin', 'Sakhalin'), ('Asia/Samarkand', 'Samarkand'), ('Asia/Seoul', 'Seoul'), ('Asia/Shanghai', 'Shanghai'), ('Asia/Singapore', 'Singapore'), ('Asia/Srednekolymsk', 'Srednekolymsk'), ('Asia/Taipei', 'Taipei'), ('Asia/Tashkent', 'Tashkent'), ('Asia/Tbilisi', 'Tbilisi'), ('Asia/Tehran', 'Tehran'), ('Asia/Tel_Aviv', 'Tel_Aviv'), ('Asia/Thimbu', 'Thimbu'), ('Asia/Thimphu', 'Thimphu'), ('Asia/Tokyo', 'Tokyo'), ('Asia/Tomsk', 'Tomsk'), ('Asia/Ujung_Pandang', 'Ujung_Pandang'), ('Asia/Ulaanbaatar', 'Ulaanbaatar'), ('Asia/Ulan_Bator', 'Ulan_Bator'), ('Asia/Urumqi', 'Urumqi'), ('Asia/Ust-Nera', 'Ust-Nera'), ('Asia/Vientiane', 'Vientiane'), ('Asia/Vladivostok', 'Vladivostok'), ('Asia/Yakutsk', 'Yakutsk'), ('Asia/Yangon', 'Yangon'), ('Asia/Yekaterinburg', 'Yekaterinburg'), ('Asia/Yerevan', 'Yerevan')]), ('Atlantic', [('Atlantic/Azores', 'Azores'), ('Atlantic/Bermuda', 'Bermuda'), ('Atlantic/Canary', 'Canary'), ('Atlantic/Cape_Verde', 'Cape_Verde'), ('Atlantic/Faeroe', 'Faeroe'), ('Atlantic/Faroe', 'Faroe'), ('Atlantic/Jan_Mayen', 'Jan_Mayen'), ('Atlantic/Madeira', 'Madeira'), ('Atlantic/Reykjavik', 'Reykjavik'), ('Atlantic/South_Georgia', 'South_Georgia'), ('Atlantic/St_Helena', 'St_Helena'), ('Atlantic/Stanley', 'Stanley')]), ('Australia', [('Australia/ACT', 'ACT'), ('Australia/Adelaide', 'Adelaide'), ('Australia/Brisbane', 'Brisbane'), ('Australia/Broken_Hill', 'Broken_Hill'), ('Australia/Canberra', 'Canberra'), ('Australia/Currie', 'Currie'), ('Australia/Darwin', 'Darwin'), ('Australia/Eucla', 'Eucla'), ('Australia/Hobart', 'Hobart'), ('Australia/LHI', 'LHI'), ('Australia/Lindeman', 'Lindeman'), ('Australia/Lord_Howe', 'Lord_Howe'), ('Australia/Melbourne', 'Melbourne'), ('Australia/NSW', 'NSW'), ('Australia/North', 'North'), ('Australia/Perth', 'Perth'), ('Australia/Queensland', 'Queensland'), ('Australia/South', 'South'), ('Australia/Sydney', 'Sydney'), ('Australia/Tasmania', 'Tasmania'), ('Australia/Victoria', 'Victoria'), ('Australia/West', 'West'), ('Australia/Yancowinna', 'Yancowinna')]), ('Brazil', [('Brazil/Acre', 'Acre'), ('Brazil/DeNoronha', 'DeNoronha'), ('Brazil/East', 'East'), ('Brazil/West', 'West')]), ('Canada', [('Canada/Atlantic', 'Atlantic'), ('Canada/Central', 'Central'), ('Canada/Eastern', 'Eastern'), ('Canada/Mountain', 'Mountain'), ('Canada/Newfoundland', 'Newfoundland'), ('Canada/Pacific', 'Pacific'), ('Canada/Saskatchewan', 'Saskatchewan'), ('Canada/Yukon', 'Yukon')]), ('Chile', [('Chile/Continental', 'Continental'), ('Chile/EasterIsland', 'EasterIsland')]), ('Etc', [('Etc/Greenwich', 'Greenwich'), ('Etc/UCT', 'UCT'), ('Etc/UTC', 'UTC'), ('Etc/Universal', 'Universal'), ('Etc/Zulu', 'Zulu')]), ('Europe', [('Europe/Amsterdam', 'Amsterdam'), ('Europe/Andorra', 'Andorra'), ('Europe/Astrakhan', 'Astrakhan'), ('Europe/Athens', 'Athens'), ('Europe/Belfast', 'Belfast'), ('Europe/Belgrade', 'Belgrade'), ('Europe/Berlin', 'Berlin'), ('Europe/Bratislava', 'Bratislava'), ('Europe/Brussels', 'Brussels'), ('Europe/Bucharest', 'Bucharest'), ('Europe/Budapest', 'Budapest'), ('Europe/Busingen', 'Busingen'), ('Europe/Chisinau', 'Chisinau'), ('Europe/Copenhagen', 'Copenhagen'), ('Europe/Dublin', 'Dublin'), ('Europe/Gibraltar', 'Gibraltar'), ('Europe/Guernsey', 'Guernsey'), ('Europe/Helsinki', 'Helsinki'), ('Europe/Isle_of_Man', 'Isle_of_Man'), ('Europe/Istanbul', 'Istanbul'), ('Europe/Jersey', 'Jersey'), ('Europe/Kaliningrad', 'Kaliningrad'), ('Europe/Kiev', 'Kiev'), ('Europe/Kirov', 'Kirov'), ('Europe/Lisbon', 'Lisbon'), ('Europe/Ljubljana', 'Ljubljana'), ('Europe/London', 'London'), ('Europe/Luxembourg', 'Luxembourg'), ('Europe/Madrid', 'Madrid'), ('Europe/Malta', 'Malta'), ('Europe/Mariehamn', 'Mariehamn'), ('Europe/Minsk', 'Minsk'), ('Europe/Monaco', 'Monaco'), ('Europe/Moscow', 'Moscow'), ('Europe/Nicosia', 'Nicosia'), ('Europe/Oslo', 'Oslo'), ('Europe/Paris', 'Paris'), ('Europe/Podgorica', 'Podgorica'), ('Europe/Prague', 'Prague'), ('Europe/Riga', 'Riga'), ('Europe/Rome', 'Rome'), ('Europe/Samara', 'Samara'), ('Europe/San_Marino', 'San_Marino'), ('Europe/Sarajevo', 'Sarajevo'), ('Europe/Saratov', 'Saratov'), ('Europe/Simferopol', 'Simferopol'), ('Europe/Skopje', 'Skopje'), ('Europe/Sofia', 'Sofia'), ('Europe/Stockholm', 'Stockholm'), ('Europe/Tallinn', 'Tallinn'), ('Europe/Tirane', 'Tirane'), ('Europe/Tiraspol', 'Tiraspol'), ('Europe/Ulyanovsk', 'Ulyanovsk'), ('Europe/Uzhgorod', 'Uzhgorod'), ('Europe/Vaduz', 'Vaduz'), ('Europe/Vatican', 'Vatican'), ('Europe/Vienna', 'Vienna'), ('Europe/Vilnius', 'Vilnius'), ('Europe/Volgograd', 'Volgograd'), ('Europe/Warsaw', 'Warsaw'), ('Europe/Zagreb', 'Zagreb'), ('Europe/Zaporozhye', 'Zaporozhye'), ('Europe/Zurich', 'Zurich')]), ('Indian', [('Indian/Antananarivo', 'Antananarivo'), ('Indian/Chagos', 'Chagos'), ('Indian/Christmas', 'Christmas'), ('Indian/Cocos', 'Cocos'), ('Indian/Comoro', 'Comoro'), ('Indian/Kerguelen', 'Kerguelen'), ('Indian/Mahe', 'Mahe'), ('Indian/Maldives', 'Maldives'), ('Indian/Mauritius', 'Mauritius'), ('Indian/Mayotte', 'Mayotte'), ('Indian/Reunion', 'Reunion')]), ('Mexico', [('Mexico/BajaNorte', 'BajaNorte'), ('Mexico/BajaSur', 'BajaSur'), ('Mexico/General', 'General')]), ('Other', [('CET', 'CET'), ('CST6CDT', 'CST6CDT'), ('Cuba', 'Cuba'), ('EET', 'EET'), ('EST', 'EST'), ('EST5EDT', 'EST5EDT'), ('Egypt', 'Egypt'), ('Eire', 'Eire'), ('GB', 'GB'), ('GB-Eire', 'GB-Eire'), ('Greenwich', 'Greenwich'), ('HST', 'HST'), ('Hongkong', 'Hongkong'), ('Iceland', 'Iceland'), ('Iran', 'Iran'), ('Israel', 'Israel'), ('Jamaica', 'Jamaica'), ('Japan', 'Japan'), ('Kwajalein', 'Kwajalein'), ('Libya', 'Libya'), ('MET', 'MET'), ('MST', 'MST'), ('MST7MDT', 'MST7MDT'), ('NZ', 'NZ'), ('NZ-CHAT', 'NZ-CHAT'), ('Navajo', 'Navajo'), ('PRC', 'PRC'), ('PST8PDT', 'PST8PDT'), ('Poland', 'Poland'), ('Portugal', 'Portugal'), ('ROC', 'ROC'), ('ROK', 'ROK'), ('Singapore', 'Singapore'), ('Turkey', 'Turkey'), ('UCT', 'UCT'), ('UTC', 'UTC'), ('Universal', 'Universal'), ('W-SU', 'W-SU'), ('WET', 'WET'), ('Zulu', 'Zulu')]), ('Pacific', [('Pacific/Apia', 'Apia'), ('Pacific/Auckland', 'Auckland'), ('Pacific/Bougainville', 'Bougainville'), ('Pacific/Chatham', 'Chatham'), ('Pacific/Chuuk', 'Chuuk'), ('Pacific/Easter', 'Easter'), ('Pacific/Efate', 'Efate'), ('Pacific/Enderbury', 'Enderbury'), ('Pacific/Fakaofo', 'Fakaofo'), ('Pacific/Fiji', 'Fiji'), ('Pacific/Funafuti', 'Funafuti'), ('Pacific/Galapagos', 'Galapagos'), ('Pacific/Gambier', 'Gambier'), ('Pacific/Guadalcanal', 'Guadalcanal'), ('Pacific/Guam', 'Guam'), ('Pacific/Honolulu', 'Honolulu'), ('Pacific/Johnston', 'Johnston'), ('Pacific/Kiritimati', 'Kiritimati'), ('Pacific/Kosrae', 'Kosrae'), ('Pacific/Kwajalein', 'Kwajalein'), ('Pacific/Majuro', 'Majuro'), ('Pacific/Marquesas', 'Marquesas'), ('Pacific/Midway', 'Midway'), ('Pacific/Nauru', 'Nauru'), ('Pacific/Niue', 'Niue'), ('Pacific/Norfolk', 'Norfolk'), ('Pacific/Noumea', 'Noumea'), ('Pacific/Pago_Pago', 'Pago_Pago'), ('Pacific/Palau', 'Palau'), ('Pacific/Pitcairn', 'Pitcairn'), ('Pacific/Pohnpei', 'Pohnpei'), ('Pacific/Ponape', 'Ponape'), ('Pacific/Port_Moresby', 'Port_Moresby'), ('Pacific/Rarotonga', 'Rarotonga'), ('Pacific/Saipan', 'Saipan'), ('Pacific/Samoa', 'Samoa'), ('Pacific/Tahiti', 'Tahiti'), ('Pacific/Tarawa', 'Tarawa'), ('Pacific/Tongatapu', 'Tongatapu'), ('Pacific/Truk', 'Truk'), ('Pacific/Wake', 'Wake'), ('Pacific/Wallis', 'Wallis'), ('Pacific/Yap', 'Yap')]), ('US', [('US/Alaska', 'Alaska'), ('US/Aleutian', 'Aleutian'), ('US/Arizona', 'Arizona'), ('US/Central', 'Central'), ('US/East-Indiana', 'East-Indiana'), ('US/Eastern', 'Eastern'), ('US/Hawaii', 'Hawaii'), ('US/Indiana-Starke', 'Indiana-Starke'), ('US/Michigan', 'Michigan'), ('US/Mountain', 'Mountain'), ('US/Pacific', 'Pacific'), ('US/Samoa', 'Samoa')])], default='Asia/Ho_Chi_Minh', max_length=50, verbose_name='location'),
+ ),
+ ]
diff --git a/judge/migrations/0102_fix_custom_validator.py b/judge/migrations/0102_fix_custom_validator.py
new file mode 100644
index 0000000..a0dccce
--- /dev/null
+++ b/judge/migrations/0102_fix_custom_validator.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.2.9 on 2020-03-17 05:05
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('judge', '0101_custom_validator'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='problemdata',
+ name='checker',
+ field=models.CharField(blank=True, choices=[('standard', 'Standard'), ('floats', 'Floats'), ('floatsabs', 'Floats (absolute)'), ('floatsrel', 'Floats (relative)'), ('rstripped', 'Non-trailing spaces'), ('sorted', 'Unordered'), ('identical', 'Byte identical'), ('linecount', 'Line-by-line'), ('custom', 'Custom checker'), ('customval', 'Custom Validator')], max_length=10, verbose_name='checker'),
+ ),
+ migrations.AlterField(
+ model_name='problemtestcase',
+ name='checker',
+ field=models.CharField(blank=True, choices=[('standard', 'Standard'), ('floats', 'Floats'), ('floatsabs', 'Floats (absolute)'), ('floatsrel', 'Floats (relative)'), ('rstripped', 'Non-trailing spaces'), ('sorted', 'Unordered'), ('identical', 'Byte identical'), ('linecount', 'Line-by-line'), ('custom', 'Custom checker'), ('customval', 'Custom Validator')], max_length=10, verbose_name='checker'),
+ ),
+ ]
diff --git a/judge/migrations/0103_fix_custom_validator.py b/judge/migrations/0103_fix_custom_validator.py
new file mode 100644
index 0000000..2720bb8
--- /dev/null
+++ b/judge/migrations/0103_fix_custom_validator.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.9 on 2020-03-17 05:17
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('judge', '0102_fix_custom_validator'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='problemdata',
+ old_name='custom_valid',
+ new_name='custom_validator',
+ ),
+ ]
diff --git a/judge/models/problem_data.py b/judge/models/problem_data.py
index 6f6c88c..d94369a 100644
--- a/judge/models/problem_data.py
+++ b/judge/models/problem_data.py
@@ -30,6 +30,7 @@ CHECKERS = (
('identical', _('Byte identical')),
('linecount', _('Line-by-line')),
('custom', _('Custom checker')),
+ ('customval', _('Custom Validator')),
)
@@ -52,6 +53,12 @@ class ProblemData(models.Model):
blank=True,
upload_to=problem_directory_file,
validators=[FileExtensionValidator(allowed_extensions=['py'])])
+ custom_validator = models.FileField(verbose_name=_('custom validator file'),
+ storage=problem_data_storage,
+ null=True,
+ blank=True,
+ upload_to=problem_directory_file,
+ validators=[FileExtensionValidator(allowed_extensions=['cpp'])])
__original_zipfile = None
def __init__(self, *args, **kwargs):
@@ -78,6 +85,10 @@ class ProblemData(models.Model):
self.generator.name = _problem_directory_file(new, self.generator.name)
if self.custom_checker:
self.custom_checker.name = _problem_directory_file(new, self.custom_checker.name)
+ if self.custom_checker:
+ self.custom_checker.name = _problem_directory_file(new, self.custom_checker.name)
+ if self.custom_validator:
+ self.custom_validator.name = _problem_directory_file(new, self.custom_validator.name)
self.save()
_update_code.alters_data = True
diff --git a/judge/utils/problem_data.py b/judge/utils/problem_data.py
index 9c185fd..0339799 100644
--- a/judge/utils/problem_data.py
+++ b/judge/utils/problem_data.py
@@ -69,6 +69,11 @@ class ProblemDataCompiler(object):
if len(custom_checker_path) != 2:
raise ProblemDataError(_('How did you corrupt the custom checker path?'))
return(custom_checker_path[1])
+ if (case.checker == 'customval'):
+ validator_path = split_path_first(case.custom_validator.name)
+ if len(validator_path) != 2:
+ raise ProblemDataError(_('How did you corrupt the custom checker path?'))
+ return(validator_path[1])
if case.checker_args:
return {
'name': case.checker,
diff --git a/judge/views/problem.py b/judge/views/problem.py
index 07924bb..23e6e5a 100644
--- a/judge/views/problem.py
+++ b/judge/views/problem.py
@@ -287,11 +287,11 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
context_object_name = 'problems'
template_name = 'problem/list.html'
paginate_by = 50
- sql_sort = frozenset(('points', 'ac_rate', 'user_count', 'code'))
+ sql_sort = frozenset(('date', 'points', 'ac_rate', 'user_count', 'code'))
manual_sort = frozenset(('name', 'group', 'solved', 'type'))
all_sorts = sql_sort | manual_sort
- default_desc = frozenset(('points', 'ac_rate', 'user_count'))
- default_sort = 'code'
+ default_desc = frozenset(('date', 'points', 'ac_rate', 'user_count'))
+ default_sort = '-date'
def get_paginator(self, queryset, per_page, orphans=0,
allow_empty_first_page=True, **kwargs):
diff --git a/judge/views/problem_data.py b/judge/views/problem_data.py
index 2c392aa..00bd38c 100644
--- a/judge/views/problem_data.py
+++ b/judge/views/problem_data.py
@@ -8,7 +8,7 @@ from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import ValidationError
-from django.forms import BaseModelFormSet, HiddenInput, ModelForm, NumberInput, Select, formset_factory
+from django.forms import BaseModelFormSet, HiddenInput, ModelForm, NumberInput, Select, formset_factory, FileInput
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
@@ -50,9 +50,12 @@ class ProblemDataForm(ModelForm):
class Meta:
model = ProblemData
- fields = ['zipfile', 'generator', 'output_limit', 'output_prefix', 'checker', 'checker_args', 'custom_checker']
+ fields = ['zipfile', 'checker', 'checker_args', 'custom_checker', 'custom_validator']
widgets = {
'checker_args': HiddenInput,
+ 'generator': HiddenInput,
+ 'output_limit': HiddenInput,
+ 'output_prefix': HiddenInput,
}
@@ -62,14 +65,14 @@ class ProblemCaseForm(ModelForm):
class Meta:
model = ProblemTestCase
fields = ('order', 'type', 'input_file', 'output_file', 'points',
- 'is_pretest', 'output_limit', 'output_prefix', 'checker', 'checker_args', 'generator_args')
+ 'is_pretest', 'checker', 'checker_args') #, 'output_limit', 'output_prefix', 'generator_args')
widgets = {
- 'generator_args': HiddenInput,
+ # 'generator_args': HiddenInput,
'type': Select(attrs={'style': 'width: 100%'}),
'points': NumberInput(attrs={'style': 'width: 4em'}),
- 'output_prefix': NumberInput(attrs={'style': 'width: 4.5em'}),
- 'output_limit': NumberInput(attrs={'style': 'width: 6em'}),
- 'checker_args': HiddenInput,
+ # 'output_prefix': NumberInput(attrs={'style': 'width: 4.5em'}),
+ # 'output_limit': NumberInput(attrs={'style': 'width: 6em'}),
+ # 'checker_args': HiddenInput,
}
diff --git a/resources/base.scss b/resources/base.scss
index 5aae208..27a7cac 100644
--- a/resources/base.scss
+++ b/resources/base.scss
@@ -180,7 +180,7 @@ header {
}
a {
- color: #FFF;
+ color: #9c3706;
}
li {
@@ -206,7 +206,7 @@ header {
}
& > span {
- color: #eee;
+ color: darkslateblue;
vertical-align: middle;
display: inline;
margin-top: 11px;
@@ -223,15 +223,15 @@ header {
}
#nav-container {
- background: $widget_black;
+ background: linear-gradient(#c1e9fd, #63c8f9);
- // opacity: 0.77
+ // opacity: 0.77;
// filter: alpha(opacity=77)
height: 100%;
}
#navigation {
- position: fixed;
+ position: relative;
top: 0;
left: 0;
right: 0;
@@ -276,7 +276,7 @@ nav {
display: inline-block;
text-decoration: none;
vertical-align: middle;
- color: #3e452c;
+ color: #9c3706;
padding: 13px 7px;
height: 18px;
@@ -371,7 +371,7 @@ hr {
}
#content {
- margin: 52px auto auto;
+ margin: 1em auto auto;
// Header
width: 90%;
diff --git a/resources/submission.scss b/resources/submission.scss
index 5d3e54b..ea71252 100644
--- a/resources/submission.scss
+++ b/resources/submission.scss
@@ -203,9 +203,7 @@ label[for="language"], label[for="status"] {
}
#test-cases {
- .toggle .fa {
- margin-left: -1.28571em;
- }
+ font-size: 1.1em;
.batch-cases {
margin: 0;
@@ -215,28 +213,13 @@ label[for="language"], label[for="status"] {
display: inline-block;
}
- .batch-cases .case-row td b {
- font-weight: 500;
- }
-
- .case-row td:nth-child(3) {
- padding-right: 0;
- text-align: right;
- }
-
- .case-row td:nth-child(3) span {
- float: right;
- }
-
- .case-row td:nth-child(4) {
- text-align: right;
- }
+ // .batch-cases .case-row td b {
+ // font-weight: 500;
+ // }
.case-info {
margin: 0;
- padding-left: 1em;
- padding-bottom: 3px;
- padding-top: 3px;
+ padding: 1em;
border: 1px solid #2980b9;
border-left-width: .5em;
border-radius: 4px;
@@ -245,18 +228,50 @@ label[for="language"], label[for="status"] {
.case-output {
margin: 0;
- margin-right: 1em;
+ margin-top: 1em;
+ box-shadow: 0 1px 2px 0 rgba(34,36,38,.15);
+ margin: 1rem 0;
+ padding: 1em 1em;
+ border-radius: .28571429rem;
+ border: 1px solid rgba(34,36,38,.15);
+ font-family: Consolas;
}
- table td {
- margin: 0;
- padding: 0 5px 0 0;
+ #testcases-table {
+ width: 100%;
+ border: 1px solid grey;
+ border-radius: 0.5em;
+ border-spacing: 0;
+
+ thead td:first-child {
+ border-top-left-radius: 0.5em;
+ }
+
+ thead td:last-child {
+ border-top-right-radius: 0.5em;
+ }
+
+ td {
+ padding: 0.6em 0.8em;
+ width: 18.75%;
+ border-bottom: 0.7px grey solid;
+ }
+
+ .case-row td:nth-child(2) {
+ width: 25%;
+ }
+
+ .case-row:hover {
+ cursor: pointer;
+ }
+
}
.toggle {
font-weight: normal;
}
+
.case-feedback {
vertical-align: top;
}
@@ -266,6 +281,31 @@ label[for="language"], label[for="status"] {
}
}
+#overall-row:hover {
+ cursor: default !important;
+}
+
+.overall-result-AC {
+ background: linear-gradient(45deg, #a8ff78, #78ffd6);
+}
+
+.overall-result-WA {
+ background: linear-gradient(45deg, yellow, red);
+}
+
+.overall-result-TLE {
+ background: linear-gradient(45deg, #D7DDE8, #757F99);
+}
+
+.overall-result-RTE,
+.overall-result-MLE {
+ background: linear-gradient(45deg, #fceabb, #f8b500)
+}
+
+.col-title {
+ font-weight: bold;
+}
+
.case-AC {
color: green;
font-weight: bold;
diff --git a/templates/about/custom-checker-sample.html b/templates/about/custom-checker-sample.html
index a2a74da..91ad799 100644
--- a/templates/about/custom-checker-sample.html
+++ b/templates/about/custom-checker-sample.html
@@ -2,10 +2,7 @@
{% block body %}
custom
-A checker
Python script must implement a function that is called by the judge:
-def check ( process_output , judge_output , ** kwargs ):
- # return True/False
-
-
-Variables in global scope will exist throughout the grading process.
-**kwargs
is a directory containing
-
-submission_source
: the source code of the submission
-judge_input
: the judge’s input
-point_value
: the point value of the test case
-case_position
: the index of the test case
-batch
: the batched the test case belongs to
-submission_language
: the language the submission was submitted in
-binary_data
: a boolean, which is True
if the data was not normalized to Linux line endings, and False
otherwise
-execution_time
: the runtime of the program, in seconds
-
-Additionally, if the check
method has the flag run_on_error
set, it will be run against the submission’s output, even if it receives an IR/TLE/RTE/MLE verdict.
-The only built-in checker that has this flag set is the linecount
checker.
-Return:
-check
can return either a CheckerResult
object (from dmoj.result import CheckerResult
), or a boolean (case_passed_bool
).
- A CheckerResult
can be instantiated through CheckerResult(case_passed_bool, points_awarded, feedback='')
.
-Sample Checker:
-Here is the checker for the problem: Print 2 integers having sum equal to n (n is read from input).
-
-
-
+
+
+
+
+ 1. Custom checker (PY)
+
+
+ Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm check dưới đây:
+
+
+
+def check(process_output, judge_output, **kwargs):
+ # return True/False
+
+
+ Trong đó, **kwargs
có thể chứa các biến sau:
+
+
+ process_output:
output
+ judge_output:
đáp án
+ submission_source
: Code bài nộp
+ judge_input
: input
+ point_value:
điểm của test đang chấm
+ case_position:
thứ tự của test
+ submission_language:
ngôn ngữ của bài nộp
+ execution_time:
thời gian chạy
+
+ Return:
+
+ Cách 1: Trả về True/False
+ Cách 2: Trả về một object CheckerResult
có thể được gọi như sau CheckerResult(case_passed_bool, points_awarded, feedback='')
+
+
+ Ví dụ:
+ Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n.
+
+
+from dmoj.result import CheckerResult
+
+
+def wa(feedback):
+ return CheckerResult(False, 0, feedback)
+
+
+def check(process_output, judge_output, judge_input, **kwargs):
+ # process the input
+ input_arr = judge_input.split()
+ assert(len(input_arr) == 1)
+ n = int(input_arr[0])
+
+ # process the contestant's output
+ output_arr = process_output.split()
+
+ if (len(output_arr) != 2):
+ return wa('Wrong output format')
+
+ try:
+ a, b = int(output_arr[0]), int(output_arr[1])
+ except:
+ return wa('Wrong output format')
+
+ if (n == a + b):
+ return True
+ return wa('a + b != n')
+
+
+ 2. Custom validator (CPP)
+
+
+ Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 3 arguments theo thứ tự input_file
, output_file
, ans_file
tương ứng với các file input, output, đáp án.
+
+
+ Để test chương trình trên máy tính, có thể dùng lệnh như sau (Windows):
+
+main.exe [input_file] [output_file] [ans_file]
+ hoặc thay bằng ./main
trên Linux/MacOS.
+
+ Return:
+
+ Chương trình trả về giá trị 0 nếu AC, 1 nếu WA. Những thông tin được viết ra stdout (bằng cout) sẽ được in ra màn hình cho người nộp bài(feedback)
+
+
+ Ví dụ:
+
+#include <bits/stdc++.h>
+using namespace std;
+
+int main(int argc, char** argv) {
+ ifstream inp(argv[1]);
+ ifstream out(argv[2]);
+ ifstream ans(argv[3]);
+
+ int n, a, b, c, d;
+ inp >> n;
+ out >> a >> b;
+ ans >> c >> d;
+ if (a + b == c + d) {
+ cout << a << " + " << b << " = " << c << " + " << d << endl;
+ return 0; // AC
+ }
+ else {
+ cout << "a + b = " << a + b << " != " << n << endl;
+ return 1; // WA
+ }
+}
+
+
{% endblock body %}
\ No newline at end of file
From cb8eb2689cb47cd8276f7cea033b3f78f6e1177a Mon Sep 17 00:00:00 2001
From: cuom1999
Date: Wed, 18 Mar 2020 23:13:55 -0600
Subject: [PATCH 09/13] add icons and chatbox
---
chat_box/models.py | 6 -
chat_box/views.py | 24 +++-
dmoj/urls.py | 7 +-
resources/chatbox.scss | 58 ++++++++
resources/icons/android-chrome-144x144.png | Bin 2841 -> 28755 bytes
resources/icons/android-chrome-192x192.png | Bin 3726 -> 47140 bytes
resources/icons/android-chrome-36x36.png | Bin 797 -> 3234 bytes
resources/icons/android-chrome-48x48.png | Bin 1043 -> 4908 bytes
resources/icons/android-chrome-72x72.png | Bin 1453 -> 9141 bytes
resources/icons/android-chrome-96x96.png | Bin 1915 -> 14460 bytes
.../apple-touch-icon-114x114-precomposed.png | Bin 0 -> 16354 bytes
resources/icons/apple-touch-icon-114x114.png | Bin 2049 -> 14224 bytes
.../apple-touch-icon-120x120-precomposed.png | Bin 0 -> 17914 bytes
resources/icons/apple-touch-icon-120x120.png | Bin 2262 -> 15518 bytes
.../apple-touch-icon-144x144-precomposed.png | Bin 0 -> 24569 bytes
resources/icons/apple-touch-icon-144x144.png | Bin 2713 -> 21291 bytes
.../apple-touch-icon-152x152-precomposed.png | Bin 0 -> 26980 bytes
resources/icons/apple-touch-icon-152x152.png | Bin 2964 -> 23362 bytes
.../apple-touch-icon-180x180-precomposed.png | Bin 0 -> 36222 bytes
resources/icons/apple-touch-icon-180x180.png | Bin 3294 -> 31389 bytes
.../apple-touch-icon-57x57-precomposed.png | Bin 0 -> 5189 bytes
resources/icons/apple-touch-icon-57x57.png | Bin 1146 -> 4500 bytes
.../apple-touch-icon-60x60-precomposed.png | Bin 0 -> 5639 bytes
resources/icons/apple-touch-icon-60x60.png | Bin 1198 -> 4882 bytes
.../apple-touch-icon-72x72-precomposed.png | Bin 0 -> 7595 bytes
resources/icons/apple-touch-icon-72x72.png | Bin 1425 -> 6585 bytes
.../apple-touch-icon-76x76-precomposed.png | Bin 0 -> 8264 bytes
resources/icons/apple-touch-icon-76x76.png | Bin 1442 -> 7170 bytes
.../icons/apple-touch-icon-precomposed.png | Bin 3939 -> 36222 bytes
resources/icons/apple-touch-icon.png | Bin 3294 -> 28487 bytes
resources/icons/browserconfig.xml | 17 ++-
resources/icons/favicon-16x16.png | Bin 830 -> 1429 bytes
resources/icons/favicon-32x32.png | Bin 1364 -> 2748 bytes
resources/icons/favicon.ico | Bin 15086 -> 15086 bytes
resources/icons/manifest.json | 2 +-
resources/icons/mstile-144x144.png | Bin 2841 -> 28275 bytes
resources/icons/mstile-150x150.png | Bin 2802 -> 23361 bytes
resources/icons/mstile-310x150.png | Bin 2498 -> 22374 bytes
resources/icons/mstile-310x310.png | Bin 4489 -> 64911 bytes
resources/icons/mstile-70x70.png | Bin 1874 -> 13946 bytes
resources/icons/safari-pinned-tab.svg | 55 ++++++--
resources/style.scss | 1 +
templates/chat/chat.html | 130 +++++++++++++++---
43 files changed, 254 insertions(+), 46 deletions(-)
create mode 100644 resources/chatbox.scss
create mode 100644 resources/icons/apple-touch-icon-114x114-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-120x120-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-144x144-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-152x152-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-180x180-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-57x57-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-60x60-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-72x72-precomposed.png
create mode 100644 resources/icons/apple-touch-icon-76x76-precomposed.png
diff --git a/chat_box/models.py b/chat_box/models.py
index 297b921..748e933 100644
--- a/chat_box/models.py
+++ b/chat_box/models.py
@@ -19,17 +19,11 @@ class Message(models.Model):
body = models.TextField(verbose_name=_('body of comment'), max_length=8192)
def notify_ws_clients(self):
- # inform client that there is a new message
notification = {
'type': 'recieve_group_message',
'message': '{}'.format(self.id)
}
channel_layer = get_channel_layer()
- # print("user.id {}".format(self.user.id))
- # print("user.id {}".format(self.recipient.id))
-
- async_to_sync(channel_layer.group_send)("{}".format(self.user.id), notification)
- async_to_sync(channel_layer.group_send)("{}".format(self.recipient.id), notification)
def save(self, *args, **kwargs):
new_message = self.id
diff --git a/chat_box/views.py b/chat_box/views.py
index 110c3c2..d507c98 100644
--- a/chat_box/views.py
+++ b/chat_box/views.py
@@ -1,11 +1,31 @@
-from django.shortcuts import render
+from django.http import HttpResponseRedirect
from django.utils.translation import gettext as _
from django.views.generic import ListView
+from django.urls import reverse
+from django.utils import timezone
+
from .models import Message
class ChatView(ListView):
model = Message
- title = _('Chat Box')
+ context_object_name = 'messages'
template_name = 'chat/chat.html'
+ title = _('Chat Box')
+
+ def get_context_data(self, **kwargs):
+ context = super(ChatView, self).get_context_data(**kwargs)
+ context['title'] = self.title
+ return context
+
+ def get_queryset(self):
+ return None
+
+
+def send(request):
+ new_message = Message(body=request.POST['message'],
+ author=request.profile,
+ time=timezone.now())
+ new_message.save()
+ return HttpResponseRedirect(reverse('chat'))
diff --git a/dmoj/urls.py b/dmoj/urls.py
index 3b96d68..c13ab03 100644
--- a/dmoj/urls.py
+++ b/dmoj/urls.py
@@ -1,4 +1,4 @@
-from chat_box.views import ChatView
+from chat_box.views import ChatView, send
from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
@@ -367,7 +367,10 @@ urlpatterns = [
url(r'^custom_checker_sample/', about.custom_checker_sample, name='custom_checker_sample'),
- url(r'^chat/', ChatView.as_view(), name='chat'),
+ url(r'^chat/', include([
+ url(r'^$', ChatView.as_view(), name='chat'),
+ url(r'send$', send, name='send_message')
+ ])),
]
favicon_paths = ['apple-touch-icon-180x180.png', 'apple-touch-icon-114x114.png', 'android-chrome-72x72.png',
diff --git a/resources/chatbox.scss b/resources/chatbox.scss
new file mode 100644
index 0000000..dbbc2f4
--- /dev/null
+++ b/resources/chatbox.scss
@@ -0,0 +1,58 @@
+#chat-log {
+ padding: 0;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ height: 20em;
+ width: 100%;
+ overflow: hidden;
+ overflow-wrap: break-word;
+ overflow-y: scroll;
+}
+
+#chat-log li {
+ list-style-type: none;
+ margin: 0.5em;
+}
+
+#chat-input {
+ width: 100%;
+ padding: 0.4em;
+ color: black;
+}
+
+#chat-submit {
+ margin-top: 1em;
+}
+
+.profile-pic {
+ height: 2.6em;
+ width: 2.6em;
+ border-radius: 0.3em;
+ margin-top: 0.1em;
+ float: left;
+}
+
+.body-message {
+ padding-left: 3em;
+}
+
+.user-time {
+ margin-bottom: 0.3em;
+}
+
+.time {
+ margin-left: 0.5em;
+}
+
+.user {
+ font-weight: bold;
+}
+
+.clear {
+ clear: both;
+}
+.message {
+ word-wrap: break-word;
+}
+
+
diff --git a/resources/icons/android-chrome-144x144.png b/resources/icons/android-chrome-144x144.png
index 44149809c586a535a09518767ec72735e1ee1074..6a5f3558f81481e6368caa139cbe162a82fa18ec 100644
GIT binary patch
literal 28755
zcmV)XK&`)tP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006
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
O0000Px#LQqUpMNDaN4-pXn
z0RjBn00RXC1qTKg8W{=;0wNQ
z0>7vNlY#>_gpv0E000VfQchCmbzR>--|x@k&({WJ
zL((Gj@)z2GZLt0j)dr>uA#q^+4XDq%0E_|E^*_c`gT@Hz{WIY_Ytd*qJ%1slPv5>S
zueSf(uB$KLC`j+WkPaHzLWvN3UqXKnLKiloUrXup48cK+5bWgKB7I!EO`M+hKnX6Ps|%
z$8RiQ<10*e#jxY26JH!Ay>C(121mVP`|r#tOZ%OT_C}Zkb|76-o2{;qXgDEagq_qP
z=Egu`U#jiXTMwtlqc`CYR_>oiy5a-UM69o+7Y3w6aP>z}}Hi8^Fq5H>{C29+3*HzjvRo83%gZv$VV+
zqU?Tw03P+{^mW@>Cijsjvx~f27tg%BZd`135w-6^LZbr@d)>Om)zyDmlGr`KqL0%ED2(7=;W3ELhev62Ds0*9^LG9?JQ6vjy^&=L!}KFO
z+SVG9R@$jBX<(N7x_e1~1l|y|wC72n9X>AGzQ%nax%P8MDe0)g(SXuEt?f=lQCPwE
z^Voc>?PONG3(Jo_UlM=dwP7^cDOYG<8~Lr1{icRO87aSum#BzN0gbJ6a4G~TFXt1TfW6%(bG}_F1Gm9
z1tcoGkyM%pipU5^F}nPz!Ua?l>q<*IMf3>?Xjg0n4_?I0Sk-?-bK`7%J#^O{6i`#~
zmDIt5tK2)aLlvN(fc3Re5VryG+E{J>AY%!=qcM8nk+vhM@ryty
z!q%D57$0iw)^&eG^?(?p?V+{s28!4
z)c#@K+FAQpLStl$zVI4KSvj7OMzV}UlnQJD-a?W{Q%Kra#0l{smVtFVCcJ5!p
zN$ql$AbP-QKDZAI6J<|Uj}budtqY&5J1d&-jfOo)d1>Fo<#nH
zHu2>NV@Uj%#$6*Yv+gwCh>`KsODa}WXB^0)d$gy=4aa-?W^>Pq`9=ZlUIU6-J#B7V
zG;a5L(`g?FIB-#P7QC)Al8C9aBYM1YfR(Zoq%EJtUUnfq-6*fOqo4s|nNwT*A`e
zX%(!%Ga5iN8Gw!p*-;JEsP@0uvCt)P+PeTqYIj4$RZUE}U}Wu1?&Nt9(1~i!qLNtV
zSRK)wfD|fO%YV3*46aCqVBquh1P??|p)l
zp0YlaH~5$vB)&T$r4*ttFWd!kYvl$H67k+ksO2N#zKvve
zmULaFw0V8BfK^RTiEnb9B!LLyBqYHaWM?+vP)kRa|eGVy2v6S(9f$Qc$F>R56bc
z0Ra)Is-8@QKGLKBXujiuSefhglPIios?~n8Br{H~K9i-VGKj$Rmv~gQt%=^kMc$_5
zLdIb~tj*Ptp800<&Xg~!+Sz~KR8xc8Qn)}bs5DhO%h8Vj3414OKlz>oQF9osUBnLm
zQ=JsO6F!SyAX4S^(~?t|t+eBS@dHE(&uPTz{-Coa_CR#I)`WwneV4Yr9EU=FtF0aF
zPv^#q-sR0fN88Muy(YT-DbpShYbRyv&D}~WxPyU7|EOv(8`tB5?je5?@p`AqnoB{8
ztBwviyF*>rZO1BYb_Ix#=?VN+NP&*P@>W;a27FJ~NS=Mhfk&}9)|tx#gPQ|$OhektwsQ3#eKhZ&gsAqRh0g{rp
zoVe#XFcVox?$H8oRj$YRmjIQhca-QBk+%JX-p}!vP
d=ZqXQxX?ZTvHuGa%Rewr`TRCPx89TFZ*SvoIXM6T
diff --git a/resources/icons/android-chrome-192x192.png b/resources/icons/android-chrome-192x192.png
index 643a3ccae4c139bb851d5d807732ff491d81e1b4..86ba0f1b494cfaf1b6797779080c54c5654f2c30 100644
GIT binary patch
literal 47140
zcmV);K!(4GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006
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
z
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