From 5b7433d95c83230024441f2cdf8892446abcd403 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sat, 23 Mar 2019 23:42:35 +0800 Subject: [PATCH 001/100] init --- .gitignore | 10 ++ Procfile | 1 + README.md | 0 app/__init__.py | 38 ++++++ app/main/__ init__.py | 4 + app/main/operations.py | 239 +++++++++++++++++++++++++++++++++ app/main/views.py | 11 ++ app/model_views.py | 48 +++++++ app/models/record.py | 12 ++ app/templates/admin/index.html | 5 + config.py | 31 +++++ requirements.txt | 0 wsgi.py | 13 ++ 13 files changed, 412 insertions(+) create mode 100644 .gitignore create mode 100644 Procfile create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/main/__ init__.py create mode 100644 app/main/operations.py create mode 100644 app/main/views.py create mode 100644 app/model_views.py create mode 100644 app/models/record.py create mode 100644 app/templates/admin/index.html create mode 100644 config.py create mode 100644 requirements.txt create mode 100644 wsgi.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef2862c --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ + +*.sqlite + +__pycache__/ + +log/ + +\.env + +.vscode/ diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..fc272ab --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: gunicorn wsgi:app \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..5cfc7c7 --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 19:33:23 +# @Last Modified time: 2019-03-13 17:06:37 +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_admin import Admin, AdminIndexView +from app.model_views import RecordView + +db = SQLAlchemy() +admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') + + +def create_app(config_name): + app = Flask(__name__) + from config import config + app.config.from_object(config[config_name]) + + # 注册蓝图 + from app.main.views import bp as main_bp + app.register_blueprint(main_bp) + + # 注册数据库 + db.init_app(app) + + # 注册flask-admin + admin.init_app( + app, + index_view=AdminIndexView( + name='导航栏', template='admin/index.html', url='/')) + + from app.models.record import Record + admin.add_view(RecordView(Record, db.session, name='监控管理')) + + with app.test_request_context(): + db.create_all() + + return app diff --git a/app/main/__ init__.py b/app/main/__ init__.py new file mode 100644 index 0000000..465e41c --- /dev/null +++ b/app/main/__ init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 19:39:29 +# @Last Modified time: 2019-02-15 20:04:29 diff --git a/app/main/operations.py b/app/main/operations.py new file mode 100644 index 0000000..28a2add --- /dev/null +++ b/app/main/operations.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-03-09 15:47:02 +# @Last Modified time: 2019-03-14 19:45:32 +from app import db +import time +from app.models.room import Room +from app.models.member import Member +import os +from random import choice, sample + + +def init_room(num, uid, user_name, good_word=None, bad_word=None, white=False): + delete_room() + if num < 4: + return '不能少于4个人' + elif num > 13: + return '不能多于13个人' + + exist_room = Room.query.filter_by(owner_id=uid).all() + + if len(exist_room) != 0: + for room in exist_room: + db.session.delete(room) + db.session.commit() + + if good_word is None and bad_word is None: + words_path = os.path.join( + os.path.dirname(__file__), '..', '..', 'words.txt') + + with open(words_path, 'r') as f: + lines = f.readlines() + line_sample = sample(lines, 1)[0].strip() + good_word, bad_word = line_sample.split(' ') + + records = Room.query.all() + + exist_room_ids = [record.room_id for record in records] + rows = int(os.getenv('ROWS')) + all_room_ids = range(rows) + ok_room_ids = list(set(all_room_ids) - set(exist_room_ids)) + room_id = choice(ok_room_ids) + + bad_num = 0 + if num < 7: + bad_num = 1 + elif num >= 7: + bad_num = 2 + + if white: + bad_number = sample(range(num), bad_num + 1) + white_number = bad_number[-1] + 1 + bad_number = bad_number[:-1] + else: + white_number = -1 + bad_number = sample(range(num), bad_num) + + bad_number = [str(n + 1) for n in bad_number] + str_bad_number = ','.join(bad_number) + + new_room = Room(room_id, num, good_word, bad_word, + str_bad_number, user_name, uid, white_number) + db.session.add(new_room) + db.session.commit() + + message = wrap_new_message(room_id, bad_num, num, + bad_word, good_word, bad_number, white_number) + return message + + +def enter_room(room_id, uid): + delete_room() + exist_room = Room.query.filter_by(room_id=room_id).first() + if exist_room is None: + return '房间不存在,请法官重新建房。' + + owner_id = exist_room.owner_id + num = exist_room.num + bad_number = exist_room.bad_number + white_number = exist_room.white + bad_number = bad_number.split(',') + bad_num = len(bad_number) + good_word = exist_room.good_word + bad_word = exist_room.bad_word + + if uid == owner_id: + return '法官凑什么热闹。' + + has_come = Member.query.filter_by(room_id=room_id, uid=uid).first() + if has_come is not None: + your_number = has_come.index + if white_number != -1 and your_number == white_number: + word = '' + else: + if str(your_number) in bad_number: + word = bad_word + else: + word = good_word + message = wrap_enter_message( + room_id, word, has_come.index, bad_num, num, white_number) + return message + + member = Member(room_id, uid) + db.session.add(member) + db.session.commit() + + room_members = Member.query.filter_by(room_id=room_id).all() + room_members = sorted(room_members, key=lambda x: x.enter_time) + + index = -1 + for i, m in enumerate(room_members): + if m.uid == uid: + index = i + if index >= num: + db.session.delete(room_members[index]) + db.session.commit() + return '房间人数已满' + + your_number = index + 1 + if white_number != -1 and your_number == white_number: + word = '' + else: + if str(your_number) in bad_number: + word = bad_word + else: + word = good_word + member.index = your_number + db.session.add(member) + db.session.commit() + + message = wrap_enter_message( + room_id, word, your_number, bad_num, num, white_number) + return message + + +def update_room(uid, good_word=None, bad_word=None): + delete_room() + exist_room = Room.query.filter_by(owner_id=uid).first() + + if exist_room is None: + return '请先创建房间' + + if good_word is None and bad_word is None: + words_path = os.path.join( + os.path.dirname(__file__), '..', '..', 'words.txt') + + with open(words_path, 'r') as f: + lines = f.readlines() + line_sample = sample(lines, 1)[0].strip() + good_word, bad_word = line_sample.split(' ') + + num = exist_room.num + room_id = exist_room.room_id + white = exist_room.white + bad_num = 0 + if num < 7: + bad_num = 1 + elif num >= 7: + bad_num = 2 + + if white != -1: + bad_number = sample(range(num), bad_num + 1) + white_number = bad_number[-1] + 1 + bad_number = bad_number[:-1] + else: + white_number = -1 + bad_number = sample(range(num), bad_num) + + bad_number = [str(n + 1) for n in bad_number] + str_bad_number = ','.join(bad_number) + + now = int(time.time()) + exist_room.update = now + exist_room.good_word = good_word + exist_room.bad_word = bad_word + exist_room.bad_number = str_bad_number + exist_room.white = white_number + db.session.add(exist_room) + db.session.commit() + + message = wrap_update_message(room_id, bad_num, num, + bad_word, good_word, bad_number, white_number) + return message + + +def delete_room(): + rooms = Room.query.all() + rooms = sorted(rooms, key=lambda x: x.update) + + outdate = int(time.time()) - 30 * 60 + for room in rooms: + if room.update <= outdate: + members = Member.query.filter_by(room_id=room.room_id).all() + for member in members: + db.session.delete(member) + db.session.commit() + db.session.delete(room) + db.session.commit() + else: + break + + +def wrap_update_message(room_id, bad_num, num, bad_word, good_word, bad_number, white_number): + bad_people = [n + '号' for n in bad_number] + bad_people = ','.join(bad_people) + + white_num = 0 if white_number == -1 else 1 + insert_white_1 = '' if white_number == -1 else ',1个白板' + insert_white_2 = '' if white_number == - \ + 1 else '白 板:{}号\n'.format(white_number) + + message = '换词成功!您是法官,请让参与游戏的玩家对我回复【enter {}】更新自己的词语。\n\n房 号:{}\n配 置:{}个卧底,{}个平民{}\n卧底词:{}\n平民词:{}\n卧 底:{}\n{}\n回复【change】,换一组词;回复【change 平民词 卧底词】,自己出题。(一局结束后,不必重新建房,回复【change】直接换词。半小时内无操作的房间将被删除)'.\ + format(room_id, room_id, bad_num, num - + bad_num - white_num, insert_white_1, bad_word, good_word, bad_people, insert_white_2) + return message + + +def wrap_new_message(room_id, bad_num, num, bad_word, good_word, bad_number, white_number): + bad_people = [n + '号' for n in bad_number] + bad_people = ','.join(bad_people) + + white_num = 0 if white_number == -1 else 1 + insert_white_1 = '' if white_number == -1 else ',1个白板' + insert_white_2 = '' if white_number == - \ + 1 else '白 板:{}号\n'.format(white_number) + + message = '建房成功!您是法官,请让参与游戏的玩家对我回复【enter {}】进入房间。\n\n房 号:{}\n配 置:{}个卧底,{}个平民{}\n卧底词:{}\n平民词:{}\n卧 底:{}\n{}\n回复【change】,换一组词;回复【change 平民词 卧底词】,自己出题。(一局结束后,不必重新建房,回复【change】直接换词。半小时内无操作的房间将被删除)'.\ + format(room_id, room_id, bad_num, num - + bad_num - white_num, insert_white_1, bad_word, good_word, bad_people, insert_white_2) + return message + + +def wrap_enter_message(room_id, word, number, bad_num, num, white_number): + insert_white = '' if white_number == -1 else ',1个白板' + white_num = 0 if white_number == -1 else 1 + + message = '房 号:{}\n词 语:{}\n你 是:{}号\n配 置:{}个卧底,{}个平民{}'\ + .format(room_id, word, number, bad_num, num - bad_num - white_num, insert_white) + return message diff --git a/app/main/views.py b/app/main/views.py new file mode 100644 index 0000000..f9c0f37 --- /dev/null +++ b/app/main/views.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 20:04:12 +# @Last Modified time: 2019-03-14 21:17:03 +from flask import Blueprint + +bp = Blueprint('main', __name__) + +# @bp.route('/') +# def test(): +# return 'test' diff --git a/app/model_views.py b/app/model_views.py new file mode 100644 index 0000000..ce37f4d --- /dev/null +++ b/app/model_views.py @@ -0,0 +1,48 @@ +from flask_admin.contrib.sqla import ModelView +from wtforms.validators import ValidationError +import requests +from lxml import etree + + +def check_url(form, field): + url = form.url.data + try: + requests.get(url, timeout=10) + except Exception as e: + raise ValidationError(str(e)) + + +def check_selector(form, field): + selector_type = form.selector_type.data + selector = form.selector.data + url = form.url.data + + r = requests.get(url, timeout=10) + html = r.text + + if selector_type == 'xpath': + s = etree.HTML(html) + content = s.xpath(selector) + + if len(content) == 0: + raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') + + +class RecordView(ModelView): + column_labels = { + 'title': '目标名称', + 'url': '监控网址', + 'create_time': '创建时间', + 'selector_type': '元素选择器类型', + 'selector': '元素选择', + 'is_chrome': '是否使用无头浏览器' + } + column_list = ['title', 'url', 'create_time'] + form_args = dict( + url=dict(validators=[check_url]), + selector=dict(validators=[check_selector])) + form_choices = { + 'selector_type': [('xpath', 'xpath'), ('css selector', + 'css selector')], + 'is_chrome': [('no', 'no'), ('yes', 'yes')] + } diff --git a/app/models/record.py b/app/models/record.py new file mode 100644 index 0000000..99db173 --- /dev/null +++ b/app/models/record.py @@ -0,0 +1,12 @@ +from .. import db +from datetime import datetime + + +class Record(db.Model): + id = db.Column(db.Integer, primary_key=True) + title = db.Column(db.String(32), nullable=False) + url = db.Column(db.String(64), nullable=False) + selector_type = db.Column(db.String(64), nullable=False) + selector = db.Column(db.String(64), nullable=False) + is_chrome = db.Column(db.String(64), nullable=False, default='no') + create_time = db.Column(db.DateTime, nullable=True, default=datetime.now) diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html new file mode 100644 index 0000000..5ffb6df --- /dev/null +++ b/app/templates/admin/index.html @@ -0,0 +1,5 @@ +{% extends 'admin/master.html' %} + +{% block body %} +

Hello world

+{% endblock %} \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..2f787e8 --- /dev/null +++ b/config.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 19:35:17 +# @Last Modified time: 2019-03-13 17:09:23 +import os +basedir = os.path.abspath(os.path.dirname(__file__)) + + +class BaseConfig: + SQLALCHEMY_TRACK_MODIFICATIONS = False + SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL') + SECRET_KEY = 'chinano.1' + + +class DevelopmentConfig(BaseConfig): + DEBUG = True + + +class TestingConfig(BaseConfig): + TESTING = True + + +class ProductionConfig(BaseConfig): + pass + + +config = { + 'development': DevelopmentConfig, + 'testing': TestingConfig, + 'production': ProductionConfig +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/wsgi.py b/wsgi.py new file mode 100644 index 0000000..03b8b15 --- /dev/null +++ b/wsgi.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 19:53:12 +# @Last Modified time: 2019-03-12 18:31:47 +import os +from app import create_app + +dotenv_path = os.path.join(os.path.dirname(__file__), '.env') +if os.path.exists(dotenv_path): + from dotenv import load_dotenv + load_dotenv(dotenv_path) + +app = create_app(os.getenv("FLASK_ENV")) From 5c427dbc588eac74d081909ff26ecc219f7412a7 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 13:45:50 +0800 Subject: [PATCH 002/100] =?UTF-8?q?add=20=E6=97=A0=E5=A4=B4=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + app/__init__.py | 2 +- app/main/operations.py | 239 ------------------ app/main/phantomjs.py | 42 +++ .../record_view.py} | 35 ++- app/models/record.py | 1 + 6 files changed, 72 insertions(+), 249 deletions(-) delete mode 100644 app/main/operations.py create mode 100644 app/main/phantomjs.py rename app/{model_views.py => model_views/record_view.py} (51%) diff --git a/.gitignore b/.gitignore index ef2862c..a8de8ce 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ log/ \.env .vscode/ + +ghostdriver\.log diff --git a/app/__init__.py b/app/__init__.py index 5cfc7c7..1520edc 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -5,7 +5,7 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin, AdminIndexView -from app.model_views import RecordView +from app.model_views.record_view import RecordView db = SQLAlchemy() admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') diff --git a/app/main/operations.py b/app/main/operations.py deleted file mode 100644 index 28a2add..0000000 --- a/app/main/operations.py +++ /dev/null @@ -1,239 +0,0 @@ -# -*- coding: utf-8 -*- -# @Author: LogicJake -# @Date: 2019-03-09 15:47:02 -# @Last Modified time: 2019-03-14 19:45:32 -from app import db -import time -from app.models.room import Room -from app.models.member import Member -import os -from random import choice, sample - - -def init_room(num, uid, user_name, good_word=None, bad_word=None, white=False): - delete_room() - if num < 4: - return '不能少于4个人' - elif num > 13: - return '不能多于13个人' - - exist_room = Room.query.filter_by(owner_id=uid).all() - - if len(exist_room) != 0: - for room in exist_room: - db.session.delete(room) - db.session.commit() - - if good_word is None and bad_word is None: - words_path = os.path.join( - os.path.dirname(__file__), '..', '..', 'words.txt') - - with open(words_path, 'r') as f: - lines = f.readlines() - line_sample = sample(lines, 1)[0].strip() - good_word, bad_word = line_sample.split(' ') - - records = Room.query.all() - - exist_room_ids = [record.room_id for record in records] - rows = int(os.getenv('ROWS')) - all_room_ids = range(rows) - ok_room_ids = list(set(all_room_ids) - set(exist_room_ids)) - room_id = choice(ok_room_ids) - - bad_num = 0 - if num < 7: - bad_num = 1 - elif num >= 7: - bad_num = 2 - - if white: - bad_number = sample(range(num), bad_num + 1) - white_number = bad_number[-1] + 1 - bad_number = bad_number[:-1] - else: - white_number = -1 - bad_number = sample(range(num), bad_num) - - bad_number = [str(n + 1) for n in bad_number] - str_bad_number = ','.join(bad_number) - - new_room = Room(room_id, num, good_word, bad_word, - str_bad_number, user_name, uid, white_number) - db.session.add(new_room) - db.session.commit() - - message = wrap_new_message(room_id, bad_num, num, - bad_word, good_word, bad_number, white_number) - return message - - -def enter_room(room_id, uid): - delete_room() - exist_room = Room.query.filter_by(room_id=room_id).first() - if exist_room is None: - return '房间不存在,请法官重新建房。' - - owner_id = exist_room.owner_id - num = exist_room.num - bad_number = exist_room.bad_number - white_number = exist_room.white - bad_number = bad_number.split(',') - bad_num = len(bad_number) - good_word = exist_room.good_word - bad_word = exist_room.bad_word - - if uid == owner_id: - return '法官凑什么热闹。' - - has_come = Member.query.filter_by(room_id=room_id, uid=uid).first() - if has_come is not None: - your_number = has_come.index - if white_number != -1 and your_number == white_number: - word = '' - else: - if str(your_number) in bad_number: - word = bad_word - else: - word = good_word - message = wrap_enter_message( - room_id, word, has_come.index, bad_num, num, white_number) - return message - - member = Member(room_id, uid) - db.session.add(member) - db.session.commit() - - room_members = Member.query.filter_by(room_id=room_id).all() - room_members = sorted(room_members, key=lambda x: x.enter_time) - - index = -1 - for i, m in enumerate(room_members): - if m.uid == uid: - index = i - if index >= num: - db.session.delete(room_members[index]) - db.session.commit() - return '房间人数已满' - - your_number = index + 1 - if white_number != -1 and your_number == white_number: - word = '' - else: - if str(your_number) in bad_number: - word = bad_word - else: - word = good_word - member.index = your_number - db.session.add(member) - db.session.commit() - - message = wrap_enter_message( - room_id, word, your_number, bad_num, num, white_number) - return message - - -def update_room(uid, good_word=None, bad_word=None): - delete_room() - exist_room = Room.query.filter_by(owner_id=uid).first() - - if exist_room is None: - return '请先创建房间' - - if good_word is None and bad_word is None: - words_path = os.path.join( - os.path.dirname(__file__), '..', '..', 'words.txt') - - with open(words_path, 'r') as f: - lines = f.readlines() - line_sample = sample(lines, 1)[0].strip() - good_word, bad_word = line_sample.split(' ') - - num = exist_room.num - room_id = exist_room.room_id - white = exist_room.white - bad_num = 0 - if num < 7: - bad_num = 1 - elif num >= 7: - bad_num = 2 - - if white != -1: - bad_number = sample(range(num), bad_num + 1) - white_number = bad_number[-1] + 1 - bad_number = bad_number[:-1] - else: - white_number = -1 - bad_number = sample(range(num), bad_num) - - bad_number = [str(n + 1) for n in bad_number] - str_bad_number = ','.join(bad_number) - - now = int(time.time()) - exist_room.update = now - exist_room.good_word = good_word - exist_room.bad_word = bad_word - exist_room.bad_number = str_bad_number - exist_room.white = white_number - db.session.add(exist_room) - db.session.commit() - - message = wrap_update_message(room_id, bad_num, num, - bad_word, good_word, bad_number, white_number) - return message - - -def delete_room(): - rooms = Room.query.all() - rooms = sorted(rooms, key=lambda x: x.update) - - outdate = int(time.time()) - 30 * 60 - for room in rooms: - if room.update <= outdate: - members = Member.query.filter_by(room_id=room.room_id).all() - for member in members: - db.session.delete(member) - db.session.commit() - db.session.delete(room) - db.session.commit() - else: - break - - -def wrap_update_message(room_id, bad_num, num, bad_word, good_word, bad_number, white_number): - bad_people = [n + '号' for n in bad_number] - bad_people = ','.join(bad_people) - - white_num = 0 if white_number == -1 else 1 - insert_white_1 = '' if white_number == -1 else ',1个白板' - insert_white_2 = '' if white_number == - \ - 1 else '白 板:{}号\n'.format(white_number) - - message = '换词成功!您是法官,请让参与游戏的玩家对我回复【enter {}】更新自己的词语。\n\n房 号:{}\n配 置:{}个卧底,{}个平民{}\n卧底词:{}\n平民词:{}\n卧 底:{}\n{}\n回复【change】,换一组词;回复【change 平民词 卧底词】,自己出题。(一局结束后,不必重新建房,回复【change】直接换词。半小时内无操作的房间将被删除)'.\ - format(room_id, room_id, bad_num, num - - bad_num - white_num, insert_white_1, bad_word, good_word, bad_people, insert_white_2) - return message - - -def wrap_new_message(room_id, bad_num, num, bad_word, good_word, bad_number, white_number): - bad_people = [n + '号' for n in bad_number] - bad_people = ','.join(bad_people) - - white_num = 0 if white_number == -1 else 1 - insert_white_1 = '' if white_number == -1 else ',1个白板' - insert_white_2 = '' if white_number == - \ - 1 else '白 板:{}号\n'.format(white_number) - - message = '建房成功!您是法官,请让参与游戏的玩家对我回复【enter {}】进入房间。\n\n房 号:{}\n配 置:{}个卧底,{}个平民{}\n卧底词:{}\n平民词:{}\n卧 底:{}\n{}\n回复【change】,换一组词;回复【change 平民词 卧底词】,自己出题。(一局结束后,不必重新建房,回复【change】直接换词。半小时内无操作的房间将被删除)'.\ - format(room_id, room_id, bad_num, num - - bad_num - white_num, insert_white_1, bad_word, good_word, bad_people, insert_white_2) - return message - - -def wrap_enter_message(room_id, word, number, bad_num, num, white_number): - insert_white = '' if white_number == -1 else ',1个白板' - white_num = 0 if white_number == -1 else 1 - - message = '房 号:{}\n词 语:{}\n你 是:{}号\n配 置:{}个卧底,{}个平民{}'\ - .format(room_id, word, number, bad_num, num - bad_num - white_num, insert_white) - return message diff --git a/app/main/phantomjs.py b/app/main/phantomjs.py new file mode 100644 index 0000000..e5aeedd --- /dev/null +++ b/app/main/phantomjs.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 11:52:35 +@LastEditTime: 2019-03-24 13:33:44 +''' +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.common.by import By +import time +from lxml import etree +import warnings + +warnings.filterwarnings("ignore") + + +class PhantomJS(): + def get_by_xpath(self, url, xpath): + driver = webdriver.PhantomJS() + driver.get(url) + + html = driver.page_source + s = etree.HTML(html) + res = None + + try: + content = s.xpath(xpath) + if len(content) != 0: + res = content[0] + except Exception as e: + # driver.save_screenshot() + pass + + driver.close() + return res + + +if __name__ == "__main__": + phantomjs = PhantomJS() + phantomjs.get_by_xpath('https://www.baidu.com/', + '//*[@id="su"]/@value') diff --git a/app/model_views.py b/app/model_views/record_view.py similarity index 51% rename from app/model_views.py rename to app/model_views/record_view.py index ce37f4d..8ccc25e 100644 --- a/app/model_views.py +++ b/app/model_views/record_view.py @@ -1,7 +1,15 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 11:01:56 +@LastEditTime: 2019-03-24 13:31:41 +''' from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError import requests from lxml import etree +from app.main.phantomjs import PhantomJS def check_url(form, field): @@ -16,16 +24,24 @@ def check_selector(form, field): selector_type = form.selector_type.data selector = form.selector.data url = form.url.data + is_chrome = form.is_chrome.data - r = requests.get(url, timeout=10) - html = r.text + if not is_chrome: + r = requests.get(url, timeout=10) + html = r.text - if selector_type == 'xpath': - s = etree.HTML(html) - content = s.xpath(selector) + if selector_type == 'xpath': + s = etree.HTML(html) + content = s.xpath(selector) - if len(content) == 0: - raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') + if len(content) == 0: + raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') + else: + if selector_type == 'xpath': + phantomjs = PhantomJS() + res = phantomjs.get_by_xpath(url, selector) + if res is None: + raise ValidationError('获取不到文本信息,请确保xpath语句正确') class RecordView(ModelView): @@ -35,9 +51,10 @@ class RecordView(ModelView): 'create_time': '创建时间', 'selector_type': '元素选择器类型', 'selector': '元素选择', - 'is_chrome': '是否使用无头浏览器' + 'is_chrome': '是否使用无头浏览器', + 'frequency': '频率(分钟)' } - column_list = ['title', 'url', 'create_time'] + column_list = ['title', 'url', 'frequency', 'create_time'] form_args = dict( url=dict(validators=[check_url]), selector=dict(validators=[check_selector])) diff --git a/app/models/record.py b/app/models/record.py index 99db173..13c37a3 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -9,4 +9,5 @@ class Record(db.Model): selector_type = db.Column(db.String(64), nullable=False) selector = db.Column(db.String(64), nullable=False) is_chrome = db.Column(db.String(64), nullable=False, default='no') + frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=True, default=datetime.now) From 7f04406cd3d3890b157d5d33141d03e660c1017c Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 17:27:37 +0800 Subject: [PATCH 003/100] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 15 ++++++++---- app/main/scheduler.py | 44 ++++++++++++++++++++++++++++++++++ app/main/views.py | 11 --------- app/model_views/record_view.py | 20 +++++++++++++--- app/models/record.py | 32 ++++++++++++++++++++++++- 5 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 app/main/scheduler.py delete mode 100644 app/main/views.py diff --git a/app/__init__.py b/app/__init__.py index 1520edc..c4ac361 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -6,19 +6,22 @@ from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin, AdminIndexView from app.model_views.record_view import RecordView +from flask_apscheduler import APScheduler + db = SQLAlchemy() admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') +scheduler = APScheduler() +app = Flask(__name__) def create_app(config_name): - app = Flask(__name__) from config import config app.config.from_object(config[config_name]) - # 注册蓝图 - from app.main.views import bp as main_bp - app.register_blueprint(main_bp) + # # 注册蓝图 + # from app.main.views import bp as main_bp + # app.register_blueprint(main_bp) # 注册数据库 db.init_app(app) @@ -29,6 +32,10 @@ def create_app(config_name): index_view=AdminIndexView( name='导航栏', template='admin/index.html', url='/')) + # 注册APScheduler + scheduler.init_app(app) + scheduler.start() + from app.models.record import Record admin.add_view(RecordView(Record, db.session, name='监控管理')) diff --git a/app/main/scheduler.py b/app/main/scheduler.py new file mode 100644 index 0000000..76218bf --- /dev/null +++ b/app/main/scheduler.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 14:32:34 +@LastEditTime: 2019-03-24 17:23:57 +''' +from datetime import datetime + +from app import scheduler, app, db +from app.models.record import Record +from apscheduler.jobstores.base import JobLookupError + + +def monitor(id): + with app.app_context(): + record = Record.query.filter_by(id=id).first() + record.last_run = datetime.now() + db.session.add(record) + db.session.commit() + + +def add_job(id, interval): + scheduler.add_job(func=monitor, + args=(id,), + trigger='interval', + minutes=interval, + id='task_{}'.format(id), + replace_existing=True) + + +def remove_job(id): + try: + scheduler.remove_job('task_{}'.format(id)) + except JobLookupError: + pass + + +def pause_job(id): + scheduler.pause_job('task_{}'.format(id)) + + +def resume_job(id): + scheduler.resume_job('task_{}'.format(id)) diff --git a/app/main/views.py b/app/main/views.py deleted file mode 100644 index f9c0f37..0000000 --- a/app/main/views.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# @Author: LogicJake -# @Date: 2019-02-15 20:04:12 -# @Last Modified time: 2019-03-14 21:17:03 -from flask import Blueprint - -bp = Blueprint('main', __name__) - -# @bp.route('/') -# def test(): -# return 'test' diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index 8ccc25e..312b684 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-24 13:31:41 +@LastEditTime: 2019-03-24 17:25:31 ''' from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError @@ -52,14 +52,28 @@ class RecordView(ModelView): 'selector_type': '元素选择器类型', 'selector': '元素选择', 'is_chrome': '是否使用无头浏览器', - 'frequency': '频率(分钟)' + 'frequency': '频率(分钟)', + 'last_run': '上次运行时间' } - column_list = ['title', 'url', 'frequency', 'create_time'] + column_list = ['title', 'url', 'frequency', 'create_time', 'last_run'] + form_args = dict( url=dict(validators=[check_url]), selector=dict(validators=[check_selector])) + form_choices = { 'selector_type': [('xpath', 'xpath'), ('css selector', 'css selector')], 'is_chrome': [('no', 'no'), ('yes', 'yes')] } + + form_excluded_columns = ('last_run', 'create_time') + + form_widget_args = { + 'last_run': { + 'readonly': True + }, + 'create_time': { + 'readonly': True + }, + } diff --git a/app/models/record.py b/app/models/record.py index 13c37a3..09a7288 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -1,5 +1,6 @@ from .. import db from datetime import datetime +from sqlalchemy import event class Record(db.Model): @@ -10,4 +11,33 @@ class Record(db.Model): selector = db.Column(db.String(64), nullable=False) is_chrome = db.Column(db.String(64), nullable=False, default='no') frequency = db.Column(db.Integer, nullable=False, default='5') - create_time = db.Column(db.DateTime, nullable=True, default=datetime.now) + create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) + last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) + + +def after_insert_listener(mapper, connection, target): + from app.main.scheduler import add_job + id = target.id + frequency = target.frequency + + add_job(id, frequency) + + +def after_update_listener(mapper, connection, target): + from app.main.scheduler import add_job + id = target.id + frequency = target.frequency + + add_job(id, frequency) + + +def after_delete_listener(mapper, connection, target): + from app.main.scheduler import remove_job + id = target.id + + remove_job(id) + + +event.listen(Record, 'after_insert', after_insert_listener) +event.listen(Record, 'after_update', after_update_listener) +event.listen(Record, 'after_delete', after_delete_listener) From 31dd3fe6f9b6ae3a5795f09bc612ac9e5cbe9602 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 18:29:33 +0800 Subject: [PATCH 004/100] =?UTF-8?q?add=20=E9=80=9A=E7=9F=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E7=AE=A1=E7=90=86=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 4 ++++ app/model_views/notification_view.py | 24 ++++++++++++++++++++++++ app/models/notification.py | 17 +++++++++++++++++ app/models/record.py | 7 +++++++ 4 files changed, 52 insertions(+) create mode 100644 app/model_views/notification_view.py create mode 100644 app/models/notification.py diff --git a/app/__init__.py b/app/__init__.py index c4ac361..41c2af9 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -6,6 +6,7 @@ from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin, AdminIndexView from app.model_views.record_view import RecordView +from app.model_views.notification_view import NotificationView from flask_apscheduler import APScheduler @@ -36,8 +37,11 @@ def create_app(config_name): scheduler.init_app(app) scheduler.start() + # 视图 from app.models.record import Record + from app.models.notification import Notification admin.add_view(RecordView(Record, db.session, name='监控管理')) + admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) with app.test_request_context(): db.create_all() diff --git a/app/model_views/notification_view.py b/app/model_views/notification_view.py new file mode 100644 index 0000000..e15b71b --- /dev/null +++ b/app/model_views/notification_view.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 11:01:56 +@LastEditTime: 2019-03-24 18:19:40 +''' +from flask_admin.contrib.sqla import ModelView +from wtforms.validators import ValidationError +import requests +from lxml import etree +from app.main.phantomjs import PhantomJS + + +class NotificationView(ModelView): + column_labels = { + 'name': '通知方式名称', + 'type': '通知方式类型', + 'number': '邮箱/telegrame id' + } + + form_choices = { + 'type': [('mail', '邮箱'), ('telegrame', 'telegrame')] + } diff --git a/app/models/notification.py b/app/models/notification.py new file mode 100644 index 0000000..58fafb6 --- /dev/null +++ b/app/models/notification.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 18:03:07 +@LastEditTime: 2019-03-24 18:17:07 +''' +from .. import db +from datetime import datetime +from sqlalchemy import event + + +class Notification(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(32), nullable=False) + type = db.Column(db.String(64), nullable=False, default='mail') + number = db.Column(db.String(64), nullable=False) diff --git a/app/models/record.py b/app/models/record.py index 09a7288..cc0c5d9 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -1,3 +1,10 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 16:35:24 +@LastEditTime: 2019-03-24 18:03:21 +''' from .. import db from datetime import datetime from sqlalchemy import event From da6ce79482258006807e568d7faf50d9eef4c2e7 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 20:19:00 +0800 Subject: [PATCH 005/100] =?UTF-8?q?add=20=E9=82=AE=E7=AE=B1=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 10 +++++++++ app/model_views/mail_setting_view.py | 31 ++++++++++++++++++++++++++++ app/model_views/notification_view.py | 6 +----- app/models/mail_setting.py | 20 ++++++++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 app/model_views/mail_setting_view.py create mode 100644 app/models/mail_setting.py diff --git a/app/__init__.py b/app/__init__.py index 41c2af9..247fbcf 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -7,6 +7,8 @@ from flask_admin import Admin, AdminIndexView from app.model_views.record_view import RecordView from app.model_views.notification_view import NotificationView +from app.model_views.mail_setting_view import MailSettingView + from flask_apscheduler import APScheduler @@ -40,10 +42,18 @@ def create_app(config_name): # 视图 from app.models.record import Record from app.models.notification import Notification + from app.models.mail_setting import MailSetting admin.add_view(RecordView(Record, db.session, name='监控管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) + admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) with app.test_request_context(): db.create_all() + mail_setting = MailSetting.query.first() + # 插入默认邮箱配置 + if mail_setting is None: + mail_setting = MailSetting() + db.session.add(mail_setting) + db.session.commit() return app diff --git a/app/model_views/mail_setting_view.py b/app/model_views/mail_setting_view.py new file mode 100644 index 0000000..7c7bf18 --- /dev/null +++ b/app/model_views/mail_setting_view.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 18:41:42 +@LastEditTime: 2019-03-24 20:09:39 +''' + +from flask_admin.contrib.sqla import ModelView +from flask_admin.model.template import EndpointLinkRowAction +from flask_admin import expose +from flask_admin.actions import action + + +class MailSettingView(ModelView): + column_labels = { + 'mail_server': '邮箱服务器', + 'mail_port': '端口', + 'mail_username': '用户名', + 'mail_password': '密码', + 'mail_sender': '发送人邮箱' + } + + can_create = False + can_edit = True + can_delete = False + + column_descriptions = { + 'mail_sender': '一般为邮箱地址', + 'mail_password': '授权码' + } diff --git a/app/model_views/notification_view.py b/app/model_views/notification_view.py index e15b71b..7bca076 100644 --- a/app/model_views/notification_view.py +++ b/app/model_views/notification_view.py @@ -3,13 +3,9 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-24 18:19:40 +@LastEditTime: 2019-03-24 18:42:28 ''' from flask_admin.contrib.sqla import ModelView -from wtforms.validators import ValidationError -import requests -from lxml import etree -from app.main.phantomjs import PhantomJS class NotificationView(ModelView): diff --git a/app/models/mail_setting.py b/app/models/mail_setting.py new file mode 100644 index 0000000..0d8a82b --- /dev/null +++ b/app/models/mail_setting.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 18:29:53 +@LastEditTime: 2019-03-24 18:56:51 +''' +from .. import db +from datetime import datetime +from sqlalchemy import event + + +class MailSetting(db.Model): + id = db.Column(db.Integer, primary_key=True) + mail_server = db.Column(db.String(32), nullable=False, default='localhost') + mail_port = db.Column(db.Integer, nullable=False, default=25) + mail_username = db.Column(db.String(64), nullable=False, default='默认用户名') + mail_sender = db.Column( + db.String(64), nullable=False, default='默认用户名@mail.com') + mail_password = db.Column(db.String(64), nullable=False, default='默认密码') From 77285a6759673956f92751a63e80667bb02b3325 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 20:55:45 +0800 Subject: [PATCH 006/100] =?UTF-8?q?add=20=E9=82=AE=E4=BB=B6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 6 +-- app/main/notification/__init__.py | 0 app/main/notification/mail_notification.py | 39 +++++++++++++++++++ app/main/notification/notification.py | 16 ++++++++ app/main/notification/notification_handler.py | 17 ++++++++ app/main/views.py | 15 +++++++ 6 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 app/main/notification/__init__.py create mode 100644 app/main/notification/mail_notification.py create mode 100644 app/main/notification/notification.py create mode 100644 app/main/notification/notification_handler.py create mode 100644 app/main/views.py diff --git a/app/__init__.py b/app/__init__.py index 247fbcf..0a274b8 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -22,9 +22,9 @@ def create_app(config_name): from config import config app.config.from_object(config[config_name]) - # # 注册蓝图 - # from app.main.views import bp as main_bp - # app.register_blueprint(main_bp) + # 注册蓝图 + from app.main.views import bp as main_bp + app.register_blueprint(main_bp) # 注册数据库 db.init_app(app) diff --git a/app/main/notification/__init__.py b/app/main/notification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/main/notification/mail_notification.py b/app/main/notification/mail_notification.py new file mode 100644 index 0000000..88df098 --- /dev/null +++ b/app/main/notification/mail_notification.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 20:23:33 +@LastEditTime: 2019-03-24 20:54:00 +''' +import smtplib +from email.header import Header +from email.mime.text import MIMEText + +from app import db +from app.models.mail_setting import MailSetting +from app.main.notification.notification import Notification + + +class MailNotification(Notification): + def __init__(self): + setting = MailSetting.query.first() + if setting.mail_sender != '默认用户名@mail.com: + self.mail_server = setting.mail_server + self.mail_port = setting.mail_port + self.mail_username = setting.mail_username + self.mail_sender = setting.mail_sender + self.mail_password = setting.mail_password + else: + raise Exception('没有设置系统邮箱,无法发送邮件通知') + + def send(self, to, content): + message = MIMEText(content, 'plain', 'utf-8') + message['To'] = Header(to, 'utf-8') + message['From'] = Header('WebMonitor', 'utf-8') + message['Subject'] = Header('检测到变化', 'utf-8') + + # 异常处理 + smtpObj = smtplib.SMTP() + smtpObj.connect(self.mail_server, self.mail_port) + smtpObj.login(self.mail_username, self.mail_password) + smtpObj.sendmail(self.mail_sender, to, message.as_string()) diff --git a/app/main/notification/notification.py b/app/main/notification/notification.py new file mode 100644 index 0000000..8ba0c79 --- /dev/null +++ b/app/main/notification/notification.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 20:24:33 +@LastEditTime: 2019-03-24 20:25:59 +''' +from abc import ABCMeta, abstractmethod + + +class Notification(): + __metaclass__ = ABCMeta + + @abstractmethod + def send(self): + pass diff --git a/app/main/notification/notification_handler.py b/app/main/notification/notification_handler.py new file mode 100644 index 0000000..877d4bb --- /dev/null +++ b/app/main/notification/notification_handler.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 20:27:55 +@LastEditTime: 2019-03-24 20:46:41 +''' +from app.main.notification.mail_notification import MailNotification + + +def new_handler(name): + if name == 'mail': + return MailNotification() + elif name == 'telegrame': + pass + else: + raise Exception() diff --git a/app/main/views.py b/app/main/views.py new file mode 100644 index 0000000..46799ee --- /dev/null +++ b/app/main/views.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# @Author: LogicJake +# @Date: 2019-02-15 20:04:12 +# @Last Modified time: 2019-03-14 21:17:03 +from flask import Blueprint +from app.main.notification.notification_handler import new_handler + +bp = Blueprint('main', __name__) + + +@bp.route('/send') +def test(): + handler = new_handler('mail') + handler.send('835410808@qq.com', 'fuck') + return 'test' From d188c6d54fdd725cd1dfca2d1bebe65bc996edf9 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sun, 24 Mar 2019 22:31:22 +0800 Subject: [PATCH 007/100] =?UTF-8?q?feat:=20=E9=9B=86=E6=88=90=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/notification/mail_notification.py | 7 ++-- app/main/phantomjs.py | 4 +- app/main/scheduler.py | 45 +++++++++++++++++++--- app/model_views/record_view.py | 10 +++-- app/models/record.py | 14 +++---- 5 files changed, 57 insertions(+), 23 deletions(-) diff --git a/app/main/notification/mail_notification.py b/app/main/notification/mail_notification.py index 88df098..8c8c56c 100644 --- a/app/main/notification/mail_notification.py +++ b/app/main/notification/mail_notification.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:23:33 -@LastEditTime: 2019-03-24 20:54:00 +@LastEditTime: 2019-03-24 22:21:07 ''' import smtplib from email.header import Header @@ -16,8 +16,8 @@ class MailNotification(Notification): def __init__(self): - setting = MailSetting.query.first() - if setting.mail_sender != '默认用户名@mail.com: + setting = db.session.query(MailSetting).first() + if setting.mail_sender != '默认用户名@mail.com': self.mail_server = setting.mail_server self.mail_port = setting.mail_port self.mail_username = setting.mail_username @@ -32,7 +32,6 @@ def send(self, to, content): message['From'] = Header('WebMonitor', 'utf-8') message['Subject'] = Header('检测到变化', 'utf-8') - # 异常处理 smtpObj = smtplib.SMTP() smtpObj.connect(self.mail_server, self.mail_port) smtpObj.login(self.mail_username, self.mail_password) diff --git a/app/main/phantomjs.py b/app/main/phantomjs.py index e5aeedd..7482bfe 100644 --- a/app/main/phantomjs.py +++ b/app/main/phantomjs.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-24 13:33:44 +@LastEditTime: 2019-03-24 21:20:25 ''' from selenium import webdriver from selenium.webdriver.chrome.options import Options @@ -30,7 +30,7 @@ def get_by_xpath(self, url, xpath): res = content[0] except Exception as e: # driver.save_screenshot() - pass + raise Exception('获取不到文本信息') driver.close() return res diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 76218bf..2cc1420 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,26 +3,59 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-24 17:23:57 +@LastEditTime: 2019-03-24 22:27:26 ''' from datetime import datetime -from app import scheduler, app, db -from app.models.record import Record from apscheduler.jobstores.base import JobLookupError +from app import app, db, scheduler +from app.main.phantomjs import PhantomJS +from app.models.record import Record + + +def get_content(url, is_chrome, selector_type, selector): + if not is_chrome: + r = requests.get(url, timeout=10) + html = r.text -def monitor(id): + if selector_type == 'xpath': + s = etree.HTML(html) + content = s.xpath(selector) + + if len(content) == 0: + raise Exception('获取不到文本信息') + else: + return content[0] + else: + if selector_type == 'xpath': + phantomjs = PhantomJS() + res = phantomjs.get_by_xpath(url, selector) + return res + + +def monitor(id, url, selector_type, selector, is_chrome): with app.app_context(): + status = None + try: + content = get_content(url, is_chrome, selector_type, selector) + from app.main.notification.notification_handler import new_handler + handler = new_handler('mail') + handler.send('835410808@qq.com', content) + status = '成功' + except Exception as e: + status = repr(e) + record = Record.query.filter_by(id=id).first() record.last_run = datetime.now() + record.last_status = status db.session.add(record) db.session.commit() -def add_job(id, interval): +def add_job(id, url, selector_type, selector, is_chrome, interval): scheduler.add_job(func=monitor, - args=(id,), + args=(id, url, selector_type, selector, is_chrome,), trigger='interval', minutes=interval, id='task_{}'.format(id), diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index 312b684..b66db8f 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-24 17:25:31 +@LastEditTime: 2019-03-24 21:25:55 ''' from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError @@ -53,9 +53,11 @@ class RecordView(ModelView): 'selector': '元素选择', 'is_chrome': '是否使用无头浏览器', 'frequency': '频率(分钟)', - 'last_run': '上次运行时间' + 'last_run': '上次运行时间', + 'last_status': '上次运行结果' } - column_list = ['title', 'url', 'frequency', 'create_time', 'last_run'] + column_list = ['title', 'url', 'frequency', + 'create_time', 'last_run', 'last_status'] form_args = dict( url=dict(validators=[check_url]), @@ -67,7 +69,7 @@ class RecordView(ModelView): 'is_chrome': [('no', 'no'), ('yes', 'yes')] } - form_excluded_columns = ('last_run', 'create_time') + form_excluded_columns = ('last_run', 'create_time', 'last_status') form_widget_args = { 'last_run': { diff --git a/app/models/record.py b/app/models/record.py index cc0c5d9..d068330 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-24 18:03:21 +@LastEditTime: 2019-03-24 21:21:49 ''' from .. import db from datetime import datetime @@ -20,22 +20,22 @@ class Record(db.Model): frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) + last_status = db.Column( + db.String(64), nullable=False, default='成功') def after_insert_listener(mapper, connection, target): from app.main.scheduler import add_job - id = target.id - frequency = target.frequency - add_job(id, frequency) + add_job(target.id, target.url, target.selector_type, + target.selector, target.is_chrome, target.frequency) def after_update_listener(mapper, connection, target): from app.main.scheduler import add_job - id = target.id - frequency = target.frequency - add_job(id, frequency) + add_job(target.id, target.url, target.selector_type, + target.selector, target.is_chrome, target.frequency) def after_delete_listener(mapper, connection, target): From 8fa026402c4e96eb5eb5939a32044b2e18119bfc Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 11:11:06 +0800 Subject: [PATCH 008/100] format --- app/main/phantomjs.py | 8 ++------ app/main/scheduler.py | 25 +++++++++++++++++-------- app/model_views/mail_setting_view.py | 10 ++-------- app/models/mail_setting.py | 4 +--- app/models/notification.py | 4 +--- 5 files changed, 23 insertions(+), 28 deletions(-) diff --git a/app/main/phantomjs.py b/app/main/phantomjs.py index 7482bfe..fe873ab 100644 --- a/app/main/phantomjs.py +++ b/app/main/phantomjs.py @@ -3,12 +3,9 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-24 21:20:25 +@LastEditTime: 2019-03-25 11:09:15 ''' from selenium import webdriver -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.common.by import By -import time from lxml import etree import warnings @@ -38,5 +35,4 @@ def get_by_xpath(self, url, xpath): if __name__ == "__main__": phantomjs = PhantomJS() - phantomjs.get_by_xpath('https://www.baidu.com/', - '//*[@id="su"]/@value') + phantomjs.get_by_xpath('https://www.baidu.com/', '//*[@id="su"]/@value') diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 2cc1420..4621dac 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,15 +3,17 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-24 22:27:26 +@LastEditTime: 2019-03-25 11:09:50 ''' from datetime import datetime -from apscheduler.jobstores.base import JobLookupError +import requests +import etree from app import app, db, scheduler from app.main.phantomjs import PhantomJS from app.models.record import Record +from apscheduler.jobstores.base import JobLookupError def get_content(url, is_chrome, selector_type, selector): @@ -54,12 +56,19 @@ def monitor(id, url, selector_type, selector, is_chrome): def add_job(id, url, selector_type, selector, is_chrome, interval): - scheduler.add_job(func=monitor, - args=(id, url, selector_type, selector, is_chrome,), - trigger='interval', - minutes=interval, - id='task_{}'.format(id), - replace_existing=True) + scheduler.add_job( + func=monitor, + args=( + id, + url, + selector_type, + selector, + is_chrome, + ), + trigger='interval', + minutes=interval, + id='task_{}'.format(id), + replace_existing=True) def remove_job(id): diff --git a/app/model_views/mail_setting_view.py b/app/model_views/mail_setting_view.py index 7c7bf18..cd946f0 100644 --- a/app/model_views/mail_setting_view.py +++ b/app/model_views/mail_setting_view.py @@ -3,13 +3,10 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:41:42 -@LastEditTime: 2019-03-24 20:09:39 +@LastEditTime: 2019-03-25 11:10:04 ''' from flask_admin.contrib.sqla import ModelView -from flask_admin.model.template import EndpointLinkRowAction -from flask_admin import expose -from flask_admin.actions import action class MailSettingView(ModelView): @@ -25,7 +22,4 @@ class MailSettingView(ModelView): can_edit = True can_delete = False - column_descriptions = { - 'mail_sender': '一般为邮箱地址', - 'mail_password': '授权码' - } + column_descriptions = {'mail_sender': '一般为邮箱地址', 'mail_password': '授权码'} diff --git a/app/models/mail_setting.py b/app/models/mail_setting.py index 0d8a82b..ef5644c 100644 --- a/app/models/mail_setting.py +++ b/app/models/mail_setting.py @@ -3,11 +3,9 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:29:53 -@LastEditTime: 2019-03-24 18:56:51 +@LastEditTime: 2019-03-25 11:10:18 ''' from .. import db -from datetime import datetime -from sqlalchemy import event class MailSetting(db.Model): diff --git a/app/models/notification.py b/app/models/notification.py index 58fafb6..603030d 100644 --- a/app/models/notification.py +++ b/app/models/notification.py @@ -3,11 +3,9 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:03:07 -@LastEditTime: 2019-03-24 18:17:07 +@LastEditTime: 2019-03-25 11:10:26 ''' from .. import db -from datetime import datetime -from sqlalchemy import event class Notification(db.Model): From 9d77d19c9a3674147e2c8c6b550b68f5fb4ca6da Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 11:30:25 +0800 Subject: [PATCH 009/100] =?UTF-8?q?add=20WebDriverException=E6=8F=90?= =?UTF-8?q?=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/phantomjs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/main/phantomjs.py b/app/main/phantomjs.py index fe873ab..10f104d 100644 --- a/app/main/phantomjs.py +++ b/app/main/phantomjs.py @@ -3,18 +3,22 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-25 11:09:15 +@LastEditTime: 2019-03-25 11:23:18 ''' from selenium import webdriver from lxml import etree import warnings - +from wtforms.validators import ValidationError +from selenium.common.exceptions import WebDriverException warnings.filterwarnings("ignore") class PhantomJS(): def get_by_xpath(self, url, xpath): - driver = webdriver.PhantomJS() + try: + driver = webdriver.PhantomJS() + except WebDriverException as e: + raise ValidationError(str(e)) driver.get(url) html = driver.page_source From b3b25254c8c6dc504b1040e7d0b7bf678040c03b Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 11:31:31 +0800 Subject: [PATCH 010/100] =?UTF-8?q?fix=20=E4=B8=8D=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=8E=9F=E7=94=9Fget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/model_views/record_view.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index b66db8f..e7af6b9 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -26,7 +26,7 @@ def check_selector(form, field): url = form.url.data is_chrome = form.is_chrome.data - if not is_chrome: + if is_chrome == 'no': r = requests.get(url, timeout=10) html = r.text @@ -56,8 +56,9 @@ class RecordView(ModelView): 'last_run': '上次运行时间', 'last_status': '上次运行结果' } - column_list = ['title', 'url', 'frequency', - 'create_time', 'last_run', 'last_status'] + column_list = [ + 'title', 'url', 'frequency', 'create_time', 'last_run', 'last_status' + ] form_args = dict( url=dict(validators=[check_url]), From 4c07b53c97ef17bbb63333d422c59389f929958f Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 12:22:58 +0800 Subject: [PATCH 011/100] wrap all exception --- app/main/scheduler.py | 4 ++-- app/model_views/record_view.py | 41 ++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 4621dac..7c93db5 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,13 +3,13 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 11:09:50 +@LastEditTime: 2019-03-25 12:15:54 ''' from datetime import datetime import requests -import etree +from lxml import etree from app import app, db, scheduler from app.main.phantomjs import PhantomJS from app.models.record import Record diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index e7af6b9..e2d1c80 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-24 21:25:55 +@LastEditTime: 2019-03-25 12:18:44 ''' from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError @@ -21,27 +21,30 @@ def check_url(form, field): def check_selector(form, field): - selector_type = form.selector_type.data - selector = form.selector.data - url = form.url.data - is_chrome = form.is_chrome.data + try: + selector_type = form.selector_type.data + selector = form.selector.data + url = form.url.data + is_chrome = form.is_chrome.data - if is_chrome == 'no': - r = requests.get(url, timeout=10) - html = r.text + if is_chrome == 'no': + r = requests.get(url, timeout=10) + html = r.text - if selector_type == 'xpath': - s = etree.HTML(html) - content = s.xpath(selector) + if selector_type == 'xpath': + s = etree.HTML(html) + content = s.xpath(selector) - if len(content) == 0: - raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') - else: - if selector_type == 'xpath': - phantomjs = PhantomJS() - res = phantomjs.get_by_xpath(url, selector) - if res is None: - raise ValidationError('获取不到文本信息,请确保xpath语句正确') + print(type(content[0])) + if len(content) == 0: + raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') + else: + if selector_type == 'xpath': + phantomjs = PhantomJS() + phantomjs.get_by_xpath(url, selector) + # raise ValidationError('获取不到文本信息,请确保xpath语句正确') + except Exception as e: + raise ValidationError(str(e)) class RecordView(ModelView): From 4afc9be0e2016643864beeee4679cc7a18e83f1c Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 13:31:59 +0800 Subject: [PATCH 012/100] =?UTF-8?q?feat=20selector=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/phantomjs.py | 42 ------------------------- app/main/scheduler.py | 30 ++++++------------ app/main/selector/phantomjs_selector.py | 35 +++++++++++++++++++++ app/main/selector/request_selector.py | 28 +++++++++++++++++ app/main/selector/selector.py | 16 ++++++++++ app/main/selector/selector_handler.py | 18 +++++++++++ app/model_views/record_view.py | 28 +++++++---------- app/models/record.py | 13 ++++---- 8 files changed, 124 insertions(+), 86 deletions(-) delete mode 100644 app/main/phantomjs.py create mode 100644 app/main/selector/phantomjs_selector.py create mode 100644 app/main/selector/request_selector.py create mode 100644 app/main/selector/selector.py create mode 100644 app/main/selector/selector_handler.py diff --git a/app/main/phantomjs.py b/app/main/phantomjs.py deleted file mode 100644 index 10f104d..0000000 --- a/app/main/phantomjs.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python -# coding=UTF-8 -''' -@Author: LogicJake -@Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-25 11:23:18 -''' -from selenium import webdriver -from lxml import etree -import warnings -from wtforms.validators import ValidationError -from selenium.common.exceptions import WebDriverException -warnings.filterwarnings("ignore") - - -class PhantomJS(): - def get_by_xpath(self, url, xpath): - try: - driver = webdriver.PhantomJS() - except WebDriverException as e: - raise ValidationError(str(e)) - driver.get(url) - - html = driver.page_source - s = etree.HTML(html) - res = None - - try: - content = s.xpath(xpath) - if len(content) != 0: - res = content[0] - except Exception as e: - # driver.save_screenshot() - raise Exception('获取不到文本信息') - - driver.close() - return res - - -if __name__ == "__main__": - phantomjs = PhantomJS() - phantomjs.get_by_xpath('https://www.baidu.com/', '//*[@id="su"]/@value') diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 7c93db5..c7b7311 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,48 +3,38 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 12:15:54 +@LastEditTime: 2019-03-25 13:25:32 ''' from datetime import datetime -import requests +from apscheduler.jobstores.base import JobLookupError -from lxml import etree from app import app, db, scheduler -from app.main.phantomjs import PhantomJS +from app.main.selector.selector_handler import new_handler from app.models.record import Record -from apscheduler.jobstores.base import JobLookupError def get_content(url, is_chrome, selector_type, selector): - if not is_chrome: - r = requests.get(url, timeout=10) - html = r.text + if is_chrome == 'no': + selector_handler = new_handler('request') if selector_type == 'xpath': - s = etree.HTML(html) - content = s.xpath(selector) - - if len(content) == 0: - raise Exception('获取不到文本信息') - else: - return content[0] + return selector_handler.get_by_xpath(url, selector) else: + selector_handler = new_handler('phantomjs') + if selector_type == 'xpath': - phantomjs = PhantomJS() - res = phantomjs.get_by_xpath(url, selector) - return res + return selector_handler.get_by_xpath(url, selector) def monitor(id, url, selector_type, selector, is_chrome): with app.app_context(): - status = None + status = '成功' try: content = get_content(url, is_chrome, selector_type, selector) from app.main.notification.notification_handler import new_handler handler = new_handler('mail') handler.send('835410808@qq.com', content) - status = '成功' except Exception as e: status = repr(e) diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py new file mode 100644 index 0000000..b59a557 --- /dev/null +++ b/app/main/selector/phantomjs_selector.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 11:52:35 +@LastEditTime: 2019-03-25 13:31:17 +''' +import warnings + +from lxml import etree +from selenium import webdriver + +from app.main.selector.selector import Selector + +warnings.filterwarnings("ignore") + + +class PhantomJSSelector(Selector): + def get_by_xpath(self, url, xpath): + driver = webdriver.PhantomJS() + driver.get(url) + + html = driver.page_source + s = etree.HTML(html) + res = None + + content = s.xpath(xpath) + + if len(content) != 0: + res = content[0] + else: + raise Exception('无法获取文本信息') + + driver.close() + return res diff --git a/app/main/selector/request_selector.py b/app/main/selector/request_selector.py new file mode 100644 index 0000000..334b04d --- /dev/null +++ b/app/main/selector/request_selector.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-25 12:31:35 +@LastEditTime: 2019-03-25 13:19:30 +''' +import requests +from lxml import etree + +from app.main.selector.selector import Selector + + +class RequestsSelector(Selector): + def get_by_xpath(self, url, xpath): + r = requests.get(url, timeout=10) + html = r.text + s = etree.HTML(html) + res = None + + content = s.xpath(xpath) + + if len(content) != 0: + res = content[0] + else: + raise Exception('无法获取文本信息') + + return res diff --git a/app/main/selector/selector.py b/app/main/selector/selector.py new file mode 100644 index 0000000..15eec3b --- /dev/null +++ b/app/main/selector/selector.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-25 12:23:59 +@LastEditTime: 2019-03-25 12:24:39 +''' +from abc import ABCMeta, abstractmethod + + +class Selector(): + __metaclass__ = ABCMeta + + @abstractmethod + def get_by_xpath(self): + pass diff --git a/app/main/selector/selector_handler.py b/app/main/selector/selector_handler.py new file mode 100644 index 0000000..a53e655 --- /dev/null +++ b/app/main/selector/selector_handler.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-25 12:27:44 +@LastEditTime: 2019-03-25 12:42:17 +''' +from app.main.selector.request_selector import RequestsSelector +from app.main.selector.phantomjs_selector import PhantomJSSelector + + +def new_handler(name): + if name == 'request': + return RequestsSelector() + elif name == 'phantomjs': + return PhantomJSSelector() + else: + raise Exception() \ No newline at end of file diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index e2d1c80..0a3e38e 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,13 +3,13 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 12:18:44 +@LastEditTime: 2019-03-25 13:20:03 ''' +import requests from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError -import requests -from lxml import etree -from app.main.phantomjs import PhantomJS + +from app.main.selector.selector_handler import new_handler def check_url(form, field): @@ -17,7 +17,7 @@ def check_url(form, field): try: requests.get(url, timeout=10) except Exception as e: - raise ValidationError(str(e)) + raise ValidationError(repr(e)) def check_selector(form, field): @@ -28,23 +28,17 @@ def check_selector(form, field): is_chrome = form.is_chrome.data if is_chrome == 'no': - r = requests.get(url, timeout=10) - html = r.text + selector_handler = new_handler('request') if selector_type == 'xpath': - s = etree.HTML(html) - content = s.xpath(selector) - - print(type(content[0])) - if len(content) == 0: - raise ValidationError('获取不到文本信息,可以尝试选择使用无头浏览器再试一次') + selector_handler.get_by_xpath(url, selector) else: + selector_handler = new_handler('phantomjs') + if selector_type == 'xpath': - phantomjs = PhantomJS() - phantomjs.get_by_xpath(url, selector) - # raise ValidationError('获取不到文本信息,请确保xpath语句正确') + selector_handler.get_by_xpath(url, selector) except Exception as e: - raise ValidationError(str(e)) + raise ValidationError(repr(e)) class RecordView(ModelView): diff --git a/app/models/record.py b/app/models/record.py index d068330..78488e1 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-24 21:21:49 +@LastEditTime: 2019-03-25 12:59:46 ''' from .. import db from datetime import datetime @@ -20,22 +20,21 @@ class Record(db.Model): frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) - last_status = db.Column( - db.String(64), nullable=False, default='成功') + last_status = db.Column(db.String(64), nullable=False, default='创建任务成功') def after_insert_listener(mapper, connection, target): from app.main.scheduler import add_job - add_job(target.id, target.url, target.selector_type, - target.selector, target.is_chrome, target.frequency) + add_job(target.id, target.url, target.selector_type, target.selector, + target.is_chrome, target.frequency) def after_update_listener(mapper, connection, target): from app.main.scheduler import add_job - add_job(target.id, target.url, target.selector_type, - target.selector, target.is_chrome, target.frequency) + add_job(target.id, target.url, target.selector_type, target.selector, + target.is_chrome, target.frequency) def after_delete_listener(mapper, connection, target): From 55d7ab4908bbc20b4f53d9d5199886dc7fabd280 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 17:05:41 +0800 Subject: [PATCH 013/100] some small fix --- app/main/scheduler.py | 12 ++++++++---- app/model_views/mail_setting_view.py | 4 ++-- app/model_views/record_view.py | 13 +++++++++---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index c7b7311..dd1adda 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 13:25:32 +@LastEditTime: 2019-03-25 16:25:57 ''' from datetime import datetime @@ -27,14 +27,18 @@ def get_content(url, is_chrome, selector_type, selector): return selector_handler.get_by_xpath(url, selector) +def send_message(id, content): + from app.main.notification.notification_handler import new_handler + handler = new_handler('mail') + handler.send('835410808@qq.com', content) + + def monitor(id, url, selector_type, selector, is_chrome): with app.app_context(): status = '成功' try: content = get_content(url, is_chrome, selector_type, selector) - from app.main.notification.notification_handler import new_handler - handler = new_handler('mail') - handler.send('835410808@qq.com', content) + send_message(id, content) except Exception as e: status = repr(e) diff --git a/app/model_views/mail_setting_view.py b/app/model_views/mail_setting_view.py index cd946f0..04d44ea 100644 --- a/app/model_views/mail_setting_view.py +++ b/app/model_views/mail_setting_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:41:42 -@LastEditTime: 2019-03-25 11:10:04 +@LastEditTime: 2019-03-25 16:23:09 ''' from flask_admin.contrib.sqla import ModelView @@ -15,7 +15,7 @@ class MailSettingView(ModelView): 'mail_port': '端口', 'mail_username': '用户名', 'mail_password': '密码', - 'mail_sender': '发送人邮箱' + 'mail_sender': '发件人' } can_create = False diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index 0a3e38e..a8d8086 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 13:20:03 +@LastEditTime: 2019-03-25 17:05:27 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -57,9 +57,14 @@ class RecordView(ModelView): 'title', 'url', 'frequency', 'create_time', 'last_run', 'last_status' ] - form_args = dict( - url=dict(validators=[check_url]), - selector=dict(validators=[check_selector])) + form_args = { + 'url': { + 'validators': [check_url], + }, + 'selector': { + 'validators': [check_selector] + } + } form_choices = { 'selector_type': [('xpath', 'xpath'), ('css selector', From 62ad49be1f9fef5fed913b894adee6e40d4b2b88 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 19:12:09 +0800 Subject: [PATCH 014/100] =?UTF-8?q?feat=20=E9=80=9A=E7=9F=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 24 +++++++++++++++-- app/main/{__ init__.py => __init__.py} | 0 app/main/notification/mail_notification.py | 8 +++--- app/main/notification/notification.py | 4 +-- app/main/scheduler.py | 30 +++++++++++++++++++--- app/model_views/__init__.py | 0 app/model_views/mail_setting_view.py | 3 +-- app/model_views/notification_view.py | 15 +++++------ app/model_views/record_view.py | 23 ++++++++--------- app/models/notification.py | 10 +++++--- app/models/record.py | 5 +++- 11 files changed, 83 insertions(+), 39 deletions(-) rename app/main/{__ init__.py => __init__.py} (100%) create mode 100644 app/model_views/__init__.py diff --git a/app/__init__.py b/app/__init__.py index 0a274b8..01e05d4 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -11,7 +11,6 @@ from flask_apscheduler import APScheduler - db = SQLAlchemy() admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') scheduler = APScheduler() @@ -41,8 +40,9 @@ def create_app(config_name): # 视图 from app.models.record import Record - from app.models.notification import Notification from app.models.mail_setting import MailSetting + from app.models.notification import Notification + admin.add_view(RecordView(Record, db.session, name='监控管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) @@ -56,4 +56,24 @@ def create_app(config_name): db.session.add(mail_setting) db.session.commit() + notis = Notification.query.all() + mail_exist = False + telegrame_exist = False + + if len(notis) != 0: + for noti in notis: + if noti.type == 'mail': + mail_exist = True + if noti.type == 'telegrame': + telegrame_exist = True + + if not mail_exist: + mail_noti = Notification('mail') + db.session.add(mail_noti) + db.session.commit() + if not telegrame_exist: + telegrame_noti = Notification('telegrame') + db.session.add(telegrame_noti) + db.session.commit() + return app diff --git a/app/main/__ init__.py b/app/main/__init__.py similarity index 100% rename from app/main/__ init__.py rename to app/main/__init__.py diff --git a/app/main/notification/mail_notification.py b/app/main/notification/mail_notification.py index 8c8c56c..f8dd45c 100644 --- a/app/main/notification/mail_notification.py +++ b/app/main/notification/mail_notification.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:23:33 -@LastEditTime: 2019-03-24 22:21:07 +@LastEditTime: 2019-03-25 19:00:02 ''' import smtplib from email.header import Header @@ -26,11 +26,13 @@ def __init__(self): else: raise Exception('没有设置系统邮箱,无法发送邮件通知') - def send(self, to, content): + def send(self, to, header, content): + if to == '默认': + raise Exception('没有设置通知邮箱,无法发送邮件通知') message = MIMEText(content, 'plain', 'utf-8') message['To'] = Header(to, 'utf-8') message['From'] = Header('WebMonitor', 'utf-8') - message['Subject'] = Header('检测到变化', 'utf-8') + message['Subject'] = Header(header, 'utf-8') smtpObj = smtplib.SMTP() smtpObj.connect(self.mail_server, self.mail_port) diff --git a/app/main/notification/notification.py b/app/main/notification/notification.py index 8ba0c79..4a5c496 100644 --- a/app/main/notification/notification.py +++ b/app/main/notification/notification.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:24:33 -@LastEditTime: 2019-03-24 20:25:59 +@LastEditTime: 2019-03-25 18:59:56 ''' from abc import ABCMeta, abstractmethod @@ -12,5 +12,5 @@ class Notification(): __metaclass__ = ABCMeta @abstractmethod - def send(self): + def send(self, to, header, content): pass diff --git a/app/main/scheduler.py b/app/main/scheduler.py index dd1adda..de643ed 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 16:25:57 +@LastEditTime: 2019-03-25 19:07:20 ''' from datetime import datetime @@ -12,6 +12,7 @@ from app import app, db, scheduler from app.main.selector.selector_handler import new_handler from app.models.record import Record +from app.models.notification import Notification def get_content(url, is_chrome, selector_type, selector): @@ -27,10 +28,33 @@ def get_content(url, is_chrome, selector_type, selector): return selector_handler.get_by_xpath(url, selector) +def wraper_msg(title, content): + header = title + content = content + return header, content + + def send_message(id, content): from app.main.notification.notification_handler import new_handler - handler = new_handler('mail') - handler.send('835410808@qq.com', content) + + record = Record.query.filter_by(id=id).first() + mail = record.mail + telegrame = record.telegrame + title = record.title + + header, content = wraper_msg(title, content) + + if mail == 'yes': + handler = new_handler('mail') + mail_info = Notification.query.filter_by(type='mail').first() + mail_address = mail_info.number + handler.send(mail_address, header, content) + + if telegrame == 'yes': + handler = new_handler('telegrame') + mail_info = Notification.query.filter_by(type='telegrame').first() + mail_address = mail_info.number + handler.send(mail_address, header, content) def monitor(id, url, selector_type, selector, is_chrome): diff --git a/app/model_views/__init__.py b/app/model_views/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/model_views/mail_setting_view.py b/app/model_views/mail_setting_view.py index 04d44ea..3383aa9 100644 --- a/app/model_views/mail_setting_view.py +++ b/app/model_views/mail_setting_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:41:42 -@LastEditTime: 2019-03-25 16:23:09 +@LastEditTime: 2019-03-25 18:48:42 ''' from flask_admin.contrib.sqla import ModelView @@ -19,7 +19,6 @@ class MailSettingView(ModelView): } can_create = False - can_edit = True can_delete = False column_descriptions = {'mail_sender': '一般为邮箱地址', 'mail_password': '授权码'} diff --git a/app/model_views/notification_view.py b/app/model_views/notification_view.py index 7bca076..0429eea 100644 --- a/app/model_views/notification_view.py +++ b/app/model_views/notification_view.py @@ -3,18 +3,15 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-24 18:42:28 +@LastEditTime: 2019-03-25 18:50:58 ''' from flask_admin.contrib.sqla import ModelView class NotificationView(ModelView): - column_labels = { - 'name': '通知方式名称', - 'type': '通知方式类型', - 'number': '邮箱/telegrame id' - } + can_create = False + can_delete = False - form_choices = { - 'type': [('mail', '邮箱'), ('telegrame', 'telegrame')] - } + column_labels = {'type': '通知方式', 'number': '邮箱地址/telegrame id'} + + form_widget_args = {'type': {'readonly': True}} diff --git a/app/model_views/record_view.py b/app/model_views/record_view.py index a8d8086..b952488 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/record_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 17:05:27 +@LastEditTime: 2019-03-25 18:50:04 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -51,10 +51,14 @@ class RecordView(ModelView): 'is_chrome': '是否使用无头浏览器', 'frequency': '频率(分钟)', 'last_run': '上次运行时间', - 'last_status': '上次运行结果' + 'last_status': '上次运行结果', + 'mail': '邮件提醒', + 'telegrame': 'telegrame提醒' } + column_list = [ - 'title', 'url', 'frequency', 'create_time', 'last_run', 'last_status' + 'title', 'url', 'frequency', 'create_time', 'mail', 'telegrame', + 'last_run', 'last_status' ] form_args = { @@ -69,16 +73,9 @@ class RecordView(ModelView): form_choices = { 'selector_type': [('xpath', 'xpath'), ('css selector', 'css selector')], - 'is_chrome': [('no', 'no'), ('yes', 'yes')] + 'is_chrome': [('no', 'no'), ('yes', 'yes')], + 'mail': [('yes', 'yes'), ('no', 'no')], + 'telegrame': [('no', 'no'), ('yes', 'yes')] } form_excluded_columns = ('last_run', 'create_time', 'last_status') - - form_widget_args = { - 'last_run': { - 'readonly': True - }, - 'create_time': { - 'readonly': True - }, - } diff --git a/app/models/notification.py b/app/models/notification.py index 603030d..427ae93 100644 --- a/app/models/notification.py +++ b/app/models/notification.py @@ -3,13 +3,15 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:03:07 -@LastEditTime: 2019-03-25 11:10:26 +@LastEditTime: 2019-03-25 18:47:02 ''' from .. import db class Notification(db.Model): id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(32), nullable=False) - type = db.Column(db.String(64), nullable=False, default='mail') - number = db.Column(db.String(64), nullable=False) + type = db.Column(db.String(64), nullable=False) + number = db.Column(db.String(64), nullable=False, default='默认') + + def __init__(self, type): + self.type = type diff --git a/app/models/record.py b/app/models/record.py index 78488e1..1e500ab 100644 --- a/app/models/record.py +++ b/app/models/record.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-25 12:59:46 +@LastEditTime: 2019-03-25 18:29:02 ''' from .. import db from datetime import datetime @@ -21,6 +21,9 @@ class Record(db.Model): create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) last_status = db.Column(db.String(64), nullable=False, default='创建任务成功') + # 通知方式 + mail = db.Column(db.String(32), nullable=False, default='yes') + telegrame = db.Column(db.String(32), nullable=False, default='no') def after_insert_listener(mapper, connection, target): From ee4781c93026300f173e53004f7f1ff30ee54697 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 19:41:38 +0800 Subject: [PATCH 015/100] rename --- app/__init__.py | 6 ++-- app/main/scheduler.py | 20 +++++------ .../{record_view.py => task_view.py} | 12 ++++--- app/models/{record.py => task.py} | 35 ++++++++++++++----- 4 files changed, 46 insertions(+), 27 deletions(-) rename app/model_views/{record_view.py => task_view.py} (87%) rename app/models/{record.py => task.py} (65%) diff --git a/app/__init__.py b/app/__init__.py index 01e05d4..75951ea 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -5,7 +5,7 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin, AdminIndexView -from app.model_views.record_view import RecordView +from app.model_views.task_view import TaskView from app.model_views.notification_view import NotificationView from app.model_views.mail_setting_view import MailSettingView @@ -39,11 +39,11 @@ def create_app(config_name): scheduler.start() # 视图 - from app.models.record import Record + from app.models.task import Task from app.models.mail_setting import MailSetting from app.models.notification import Notification - admin.add_view(RecordView(Record, db.session, name='监控管理')) + admin.add_view(TaskView(Task, db.session, name='监控管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index de643ed..6634e0c 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 19:07:20 +@LastEditTime: 2019-03-25 19:40:07 ''' from datetime import datetime @@ -11,7 +11,7 @@ from app import app, db, scheduler from app.main.selector.selector_handler import new_handler -from app.models.record import Record +from app.models.task import Task from app.models.notification import Notification @@ -37,10 +37,10 @@ def wraper_msg(title, content): def send_message(id, content): from app.main.notification.notification_handler import new_handler - record = Record.query.filter_by(id=id).first() - mail = record.mail - telegrame = record.telegrame - title = record.title + task = Task.query.filter_by(id=id).first() + mail = task.mail + telegrame = task.telegrame + title = task.title header, content = wraper_msg(title, content) @@ -66,10 +66,10 @@ def monitor(id, url, selector_type, selector, is_chrome): except Exception as e: status = repr(e) - record = Record.query.filter_by(id=id).first() - record.last_run = datetime.now() - record.last_status = status - db.session.add(record) + task = Task.query.filter_by(id=id).first() + task.last_run = datetime.now() + task.last_status = status + db.session.add(task) db.session.commit() diff --git a/app/model_views/record_view.py b/app/model_views/task_view.py similarity index 87% rename from app/model_views/record_view.py rename to app/model_views/task_view.py index b952488..663128f 100644 --- a/app/model_views/record_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 18:50:04 +@LastEditTime: 2019-03-25 19:39:17 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -41,7 +41,7 @@ def check_selector(form, field): raise ValidationError(repr(e)) -class RecordView(ModelView): +class TaskView(ModelView): column_labels = { 'title': '目标名称', 'url': '监控网址', @@ -53,12 +53,13 @@ class RecordView(ModelView): 'last_run': '上次运行时间', 'last_status': '上次运行结果', 'mail': '邮件提醒', - 'telegrame': 'telegrame提醒' + 'telegrame': 'telegrame提醒', + 'work_status': '任务状态' } column_list = [ 'title', 'url', 'frequency', 'create_time', 'mail', 'telegrame', - 'last_run', 'last_status' + 'last_run', 'last_status', 'work_status' ] form_args = { @@ -75,7 +76,8 @@ class RecordView(ModelView): 'css selector')], 'is_chrome': [('no', 'no'), ('yes', 'yes')], 'mail': [('yes', 'yes'), ('no', 'no')], - 'telegrame': [('no', 'no'), ('yes', 'yes')] + 'telegrame': [('no', 'no'), ('yes', 'yes')], + 'work_status': [('run', 'run'), ('stop', 'stop')] } form_excluded_columns = ('last_run', 'create_time', 'last_status') diff --git a/app/models/record.py b/app/models/task.py similarity index 65% rename from app/models/record.py rename to app/models/task.py index 1e500ab..a5dffac 100644 --- a/app/models/record.py +++ b/app/models/task.py @@ -3,14 +3,14 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-25 18:29:02 +@LastEditTime: 2019-03-25 19:37:59 ''' from .. import db from datetime import datetime from sqlalchemy import event -class Record(db.Model): +class Task(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(32), nullable=False) url = db.Column(db.String(64), nullable=False) @@ -24,29 +24,46 @@ class Record(db.Model): # 通知方式 mail = db.Column(db.String(32), nullable=False, default='yes') telegrame = db.Column(db.String(32), nullable=False, default='no') + # 任务状态 + work_status = db.Column(db.String(32), nullable=False, default='run') def after_insert_listener(mapper, connection, target): - from app.main.scheduler import add_job + from app.main.scheduler import add_job, pause_job add_job(target.id, target.url, target.selector_type, target.selector, target.is_chrome, target.frequency) + if target.work_status == 'stop': + pause_job(target.id) + + from app import scheduler + + jobs = scheduler.get_jobs() + print(jobs) + def after_update_listener(mapper, connection, target): - from app.main.scheduler import add_job + from app.main.scheduler import add_job, pause_job add_job(target.id, target.url, target.selector_type, target.selector, target.is_chrome, target.frequency) + if target.work_status == 'stop': + pause_job(target.id) + + from app import scheduler + + jobs = scheduler.get_jobs() + print(jobs) + def after_delete_listener(mapper, connection, target): from app.main.scheduler import remove_job - id = target.id - remove_job(id) + remove_job(target.id) -event.listen(Record, 'after_insert', after_insert_listener) -event.listen(Record, 'after_update', after_update_listener) -event.listen(Record, 'after_delete', after_delete_listener) +event.listen(Task, 'after_insert', after_insert_listener) +event.listen(Task, 'after_update', after_update_listener) +event.listen(Task, 'after_delete', after_delete_listener) From 1a0e877b7d97939537da259f2d79348d505c5dbb Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 19:52:11 +0800 Subject: [PATCH 016/100] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E4=B8=BA?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 2 +- app/model_views/task_view.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 75951ea..4f35b15 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -43,7 +43,7 @@ def create_app(config_name): from app.models.mail_setting import MailSetting from app.models.notification import Notification - admin.add_view(TaskView(Task, db.session, name='监控管理')) + admin.add_view(TaskView(Task, db.session, name='任务管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 663128f..f2a07e6 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 19:39:17 +@LastEditTime: 2019-03-25 19:51:16 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -43,7 +43,8 @@ def check_selector(form, field): class TaskView(ModelView): column_labels = { - 'title': '目标名称', + 'id': '任务id', + 'title': '任务名称', 'url': '监控网址', 'create_time': '创建时间', 'selector_type': '元素选择器类型', @@ -58,7 +59,7 @@ class TaskView(ModelView): } column_list = [ - 'title', 'url', 'frequency', 'create_time', 'mail', 'telegrame', + 'id', 'title', 'url', 'frequency', 'create_time', 'mail', 'telegrame', 'last_run', 'last_status', 'work_status' ] From 25537fde9d09ea6323d49354e39143fdd181b158 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 21:10:23 +0800 Subject: [PATCH 017/100] =?UTF-8?q?feat=20=E4=BB=BB=E5=8A=A1=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 4 ++- app/main/scheduler.py | 25 +++++++----------- app/model_views/task_status_view.py | 31 +++++++++++++++++++++++ app/model_views/task_view.py | 19 +++++++------- app/models/task.py | 39 +++++++++++------------------ app/models/task_status.py | 29 +++++++++++++++++++++ 6 files changed, 97 insertions(+), 50 deletions(-) create mode 100644 app/model_views/task_status_view.py create mode 100644 app/models/task_status.py diff --git a/app/__init__.py b/app/__init__.py index 4f35b15..279f42c 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -8,7 +8,7 @@ from app.model_views.task_view import TaskView from app.model_views.notification_view import NotificationView from app.model_views.mail_setting_view import MailSettingView - +from app.model_views.task_status_view import TaskStatusView from flask_apscheduler import APScheduler db = SQLAlchemy() @@ -42,7 +42,9 @@ def create_app(config_name): from app.models.task import Task from app.models.mail_setting import MailSetting from app.models.notification import Notification + from app.models.task_status import TaskStatus + admin.add_view(TaskStatusView(TaskStatus, db.session, name='任务状态')) admin.add_view(TaskView(Task, db.session, name='任务管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 6634e0c..7affe84 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 19:40:07 +@LastEditTime: 2019-03-25 21:03:38 ''' from datetime import datetime @@ -11,8 +11,9 @@ from app import app, db, scheduler from app.main.selector.selector_handler import new_handler -from app.models.task import Task from app.models.notification import Notification +from app.models.task import Task +from app.models.task_status import TaskStatus def get_content(url, is_chrome, selector_type, selector): @@ -40,9 +41,9 @@ def send_message(id, content): task = Task.query.filter_by(id=id).first() mail = task.mail telegrame = task.telegrame - title = task.title + name = task.name - header, content = wraper_msg(title, content) + header, content = wraper_msg(name, content) if mail == 'yes': handler = new_handler('mail') @@ -66,10 +67,10 @@ def monitor(id, url, selector_type, selector, is_chrome): except Exception as e: status = repr(e) - task = Task.query.filter_by(id=id).first() - task.last_run = datetime.now() - task.last_status = status - db.session.add(task) + task_status = TaskStatus.query.filter_by(id=id).first() + task_status.last_run = datetime.now() + task_status.last_status = status + db.session.add(task_status) db.session.commit() @@ -94,11 +95,3 @@ def remove_job(id): scheduler.remove_job('task_{}'.format(id)) except JobLookupError: pass - - -def pause_job(id): - scheduler.pause_job('task_{}'.format(id)) - - -def resume_job(id): - scheduler.resume_job('task_{}'.format(id)) diff --git a/app/model_views/task_status_view.py b/app/model_views/task_status_view.py new file mode 100644 index 0000000..c810579 --- /dev/null +++ b/app/model_views/task_status_view.py @@ -0,0 +1,31 @@ +from flask_admin.contrib.sqla import ModelView + + +class TaskStatusView(ModelView): + can_create = False + can_delete = False + + column_labels = { + 'task_id': '任务id', + 'task_name': '任务名称', + 'last_run': '上次运行时间', + 'last_status': '上次运行结果', + 'task_status': '任务状态' + } + + form_choices = {'work_status': [('run', 'run'), ('stop', 'stop')]} + + form_widget_args = { + 'task_id': { + 'readonly': True + }, + 'task_name': { + 'readonly': True + } + } + + form_choices = { + 'task_status': [('run', 'run'), ('stop', 'stop')], + } + + form_excluded_columns = ('last_run', 'last_status') diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index f2a07e6..a14e22d 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 19:51:16 +@LastEditTime: 2019-03-25 20:08:53 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -44,23 +44,25 @@ def check_selector(form, field): class TaskView(ModelView): column_labels = { 'id': '任务id', - 'title': '任务名称', + 'name': '任务名称', 'url': '监控网址', 'create_time': '创建时间', 'selector_type': '元素选择器类型', 'selector': '元素选择', 'is_chrome': '是否使用无头浏览器', 'frequency': '频率(分钟)', - 'last_run': '上次运行时间', - 'last_status': '上次运行结果', 'mail': '邮件提醒', 'telegrame': 'telegrame提醒', - 'work_status': '任务状态' } column_list = [ - 'id', 'title', 'url', 'frequency', 'create_time', 'mail', 'telegrame', - 'last_run', 'last_status', 'work_status' + 'id', + 'name', + 'url', + 'frequency', + 'create_time', + 'mail', + 'telegrame', ] form_args = { @@ -78,7 +80,6 @@ class TaskView(ModelView): 'is_chrome': [('no', 'no'), ('yes', 'yes')], 'mail': [('yes', 'yes'), ('no', 'no')], 'telegrame': [('no', 'no'), ('yes', 'yes')], - 'work_status': [('run', 'run'), ('stop', 'stop')] } - form_excluded_columns = ('last_run', 'create_time', 'last_status') + form_excluded_columns = ('create_time') diff --git a/app/models/task.py b/app/models/task.py index a5dffac..dec7f7f 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-25 19:37:59 +@LastEditTime: 2019-03-25 20:46:26 ''' from .. import db from datetime import datetime @@ -12,57 +12,48 @@ class Task(db.Model): id = db.Column(db.Integer, primary_key=True) - title = db.Column(db.String(32), nullable=False) + name = db.Column(db.String(32), nullable=False) url = db.Column(db.String(64), nullable=False) - selector_type = db.Column(db.String(64), nullable=False) + selector_type = db.Column(db.String(64), nullable=False, default='xpath') selector = db.Column(db.String(64), nullable=False) is_chrome = db.Column(db.String(64), nullable=False, default='no') frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) - last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) - last_status = db.Column(db.String(64), nullable=False, default='创建任务成功') + # 通知方式 mail = db.Column(db.String(32), nullable=False, default='yes') telegrame = db.Column(db.String(32), nullable=False, default='no') - # 任务状态 - work_status = db.Column(db.String(32), nullable=False, default='run') def after_insert_listener(mapper, connection, target): - from app.main.scheduler import add_job, pause_job + from app.main.scheduler import add_job add_job(target.id, target.url, target.selector_type, target.selector, target.is_chrome, target.frequency) - if target.work_status == 'stop': - pause_job(target.id) - - from app import scheduler - - jobs = scheduler.get_jobs() - print(jobs) + from app.models.task_status import TaskStatus + task_status = TaskStatus.__table__ + connection.execute(task_status.insert().values( + task_id=target.id, task_name=target.name)) def after_update_listener(mapper, connection, target): - from app.main.scheduler import add_job, pause_job + from app.main.scheduler import add_job add_job(target.id, target.url, target.selector_type, target.selector, target.is_chrome, target.frequency) - if target.work_status == 'stop': - pause_job(target.id) - - from app import scheduler - - jobs = scheduler.get_jobs() - print(jobs) - def after_delete_listener(mapper, connection, target): from app.main.scheduler import remove_job remove_job(target.id) + from app.models.task_status import TaskStatus + task_status = TaskStatus.__table__ + connection.execute( + task_status.delete().where(TaskStatus.task_id == target.id)) + event.listen(Task, 'after_insert', after_insert_listener) event.listen(Task, 'after_update', after_update_listener) diff --git a/app/models/task_status.py b/app/models/task_status.py new file mode 100644 index 0000000..21ad829 --- /dev/null +++ b/app/models/task_status.py @@ -0,0 +1,29 @@ +from .. import db +from datetime import datetime +from sqlalchemy import event + + +class TaskStatus(db.Model): + id = db.Column(db.Integer, primary_key=True) + task_id = db.Column(db.Integer) + task_name = db.Column(db.String(32), nullable=False) + last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) + last_status = db.Column(db.String(64), nullable=False, default='创建任务成功') + task_status = db.Column(db.String(32), nullable=False, default='run') + + def __init__(self, task_id, task_name): + self.task_id = task_id + self.task_name = task_name + + +def after_update_listener(mapper, connection, target): + from app.main.scheduler import add_job, remove_job + + if target.task_status == 'run': + add_job(target.id, target.url, target.selector_type, target.selector, + target.is_chrome, target.frequency) + else: + remove_job(target.id) + + +event.listen(TaskStatus, 'after_update', after_update_listener) From 7170f456094413eed40228b65753078a96d86aaf Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Mon, 25 Mar 2019 21:57:15 +0800 Subject: [PATCH 018/100] =?UTF-8?q?feat=20=E9=87=8D=E5=90=AF=E6=97=B6?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 13 +++++++++++++ app/main/scheduler.py | 11 ++++++++++- app/models/task_status.py | 10 ++++++++-- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 279f42c..73e6e40 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -58,6 +58,7 @@ def create_app(config_name): db.session.add(mail_setting) db.session.commit() + # 插入默认通知方式 notis = Notification.query.all() mail_exist = False telegrame_exist = False @@ -78,4 +79,16 @@ def create_app(config_name): db.session.add(telegrame_noti) db.session.commit() + # 在系统重启时重启任务 + from app.main.scheduler import add_job, is_job_exist + task_statuss = TaskStatus.query.all() + for task_status in task_statuss: + if task_status.task_status == 'run': + task_id = task_status.task_id + if not is_job_exist(task_id): + task = Task.query.filter_by(id=task_id).first() + add_job(task.id, task.url, task.selector_type, + task.selector, task.is_chrome, task.frequency) + print(scheduler.get_jobs()) + return app diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 7affe84..72398e9 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 21:03:38 +@LastEditTime: 2019-03-25 21:56:49 ''' from datetime import datetime @@ -95,3 +95,12 @@ def remove_job(id): scheduler.remove_job('task_{}'.format(id)) except JobLookupError: pass + + +def is_job_exist(id): + jobs = scheduler.get_jobs() + for job in jobs: + if job.id == 'task_{}'.format(id): + return True + + return False diff --git a/app/models/task_status.py b/app/models/task_status.py index 21ad829..48b4876 100644 --- a/app/models/task_status.py +++ b/app/models/task_status.py @@ -20,8 +20,14 @@ def after_update_listener(mapper, connection, target): from app.main.scheduler import add_job, remove_job if target.task_status == 'run': - add_job(target.id, target.url, target.selector_type, target.selector, - target.is_chrome, target.frequency) + from app.models.task import Task + task = Task.__table__ + + select_res = connection.execute( + task.select().where(Task.id == target.id)) + + for t in select_res: + add_job(target.id, t[2], t[3], t[4], t[5], t[6]) else: remove_job(target.id) From 888f8cf389853a52d925bcaaec0d84be4a3113f9 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 09:12:33 +0800 Subject: [PATCH 019/100] =?UTF-8?q?fix:=20debug=E4=B8=8B=E9=87=8D=E5=90=AF?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=EF=BC=8C=E4=BB=BB=E5=8A=A1=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E4=B8=A4=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 23 ++++++++++++++--------- app/main/scheduler.py | 11 +---------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 73e6e40..c6f823f 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -10,6 +10,8 @@ from app.model_views.mail_setting_view import MailSettingView from app.model_views.task_status_view import TaskStatusView from flask_apscheduler import APScheduler +import psutil +import os db = SQLAlchemy() admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') @@ -79,16 +81,19 @@ def create_app(config_name): db.session.add(telegrame_noti) db.session.commit() - # 在系统重启时重启任务 - from app.main.scheduler import add_job, is_job_exist - task_statuss = TaskStatus.query.all() - for task_status in task_statuss: - if task_status.task_status == 'run': - task_id = task_status.task_id - if not is_job_exist(task_id): + ppid = psutil.Process(os.getppid()) + ppid_name = ppid.name() + # 加这一步判断主要是因为, + # 在debug模式下,会启动另外一个线程来自动重载, + # 这样会导致在两个线程中都启动任务,造成重复 + if 'python' not in ppid_name: + # 在系统重启时重启任务 + from app.main.scheduler import add_job + task_statuss = TaskStatus.query.all() + for task_status in task_statuss: + if task_status.task_status == 'run': + task_id = task_status.task_id task = Task.query.filter_by(id=task_id).first() add_job(task.id, task.url, task.selector_type, task.selector, task.is_chrome, task.frequency) - print(scheduler.get_jobs()) - return app diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 72398e9..eb5819a 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-25 21:56:49 +@LastEditTime: 2019-03-26 09:09:13 ''' from datetime import datetime @@ -95,12 +95,3 @@ def remove_job(id): scheduler.remove_job('task_{}'.format(id)) except JobLookupError: pass - - -def is_job_exist(id): - jobs = scheduler.get_jobs() - for job in jobs: - if job.id == 'task_{}'.format(id): - return True - - return False From a141b9de05152781fb5f72aba062e69b4c3801da Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 09:28:00 +0800 Subject: [PATCH 020/100] =?UTF-8?q?fix=20=E6=9B=B4=E6=96=B0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8D=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/task.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/task.py b/app/models/task.py index dec7f7f..f8847a9 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-25 20:46:26 +@LastEditTime: 2019-03-26 09:20:58 ''' from .. import db from datetime import datetime @@ -38,7 +38,9 @@ def after_insert_listener(mapper, connection, target): def after_update_listener(mapper, connection, target): - from app.main.scheduler import add_job + from app.main.scheduler import add_job, remove_job + + remove_job(target.id) add_job(target.id, target.url, target.selector_type, target.selector, target.is_chrome, target.frequency) From 67a8dd51b1232b8b4a1aa2bed4c449c7881abd2b Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 10:24:01 +0800 Subject: [PATCH 021/100] =?UTF-8?q?feat=20=E6=8E=A5=E5=85=A5server?= =?UTF-8?q?=E9=85=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 12 +++++----- app/main/notification/notification_handler.py | 9 ++++---- app/main/notification/wechat_notification.py | 23 +++++++++++++++++++ app/main/scheduler.py | 14 +++++------ app/model_views/notification_view.py | 4 ++-- app/model_views/task_view.py | 8 +++---- app/models/task.py | 12 +++++----- 7 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 app/main/notification/wechat_notification.py diff --git a/app/__init__.py b/app/__init__.py index c6f823f..2007719 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -63,22 +63,22 @@ def create_app(config_name): # 插入默认通知方式 notis = Notification.query.all() mail_exist = False - telegrame_exist = False + wechat_exist = False if len(notis) != 0: for noti in notis: if noti.type == 'mail': mail_exist = True - if noti.type == 'telegrame': - telegrame_exist = True + if noti.type == 'wechat': + wechat_exist = True if not mail_exist: mail_noti = Notification('mail') db.session.add(mail_noti) db.session.commit() - if not telegrame_exist: - telegrame_noti = Notification('telegrame') - db.session.add(telegrame_noti) + if not wechat_exist: + wechat_noti = Notification('wechat') + db.session.add(wechat_noti) db.session.commit() ppid = psutil.Process(os.getppid()) diff --git a/app/main/notification/notification_handler.py b/app/main/notification/notification_handler.py index 877d4bb..46b1632 100644 --- a/app/main/notification/notification_handler.py +++ b/app/main/notification/notification_handler.py @@ -3,15 +3,16 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:27:55 -@LastEditTime: 2019-03-24 20:46:41 +@LastEditTime: 2019-03-26 10:00:54 ''' from app.main.notification.mail_notification import MailNotification +from app.main.notification.wechat_notification import WechatNotification def new_handler(name): if name == 'mail': return MailNotification() - elif name == 'telegrame': - pass + elif name == 'wechat': + return WechatNotification() else: - raise Exception() + raise Exception('通知方式错误') diff --git a/app/main/notification/wechat_notification.py b/app/main/notification/wechat_notification.py new file mode 100644 index 0000000..5090cd6 --- /dev/null +++ b/app/main/notification/wechat_notification.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-24 20:23:33 +@LastEditTime: 2019-03-26 09:57:26 +''' +import requests +from app.main.notification.notification import Notification +import json + + +class WechatNotification(Notification): + def send(self, to, header, content): + if to == '默认': + raise Exception('没有设置Server酱 SCKEY,无法发送微信通知') + data = {'text': header, 'desp': content} + url = 'https://sc.ftqq.com/{}.send'.format(to) + r = requests.post(url, data=data) + + res = json.loads(r.text) + if res['errno'] != 0: + raise Exception(res['errmsg']) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index eb5819a..69a6bcd 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 09:09:13 +@LastEditTime: 2019-03-26 09:57:08 ''' from datetime import datetime @@ -40,7 +40,7 @@ def send_message(id, content): task = Task.query.filter_by(id=id).first() mail = task.mail - telegrame = task.telegrame + wechat = task.wechat name = task.name header, content = wraper_msg(name, content) @@ -51,11 +51,11 @@ def send_message(id, content): mail_address = mail_info.number handler.send(mail_address, header, content) - if telegrame == 'yes': - handler = new_handler('telegrame') - mail_info = Notification.query.filter_by(type='telegrame').first() - mail_address = mail_info.number - handler.send(mail_address, header, content) + if wechat == 'yes': + handler = new_handler('wechat') + wechat_info = Notification.query.filter_by(type='wechat').first() + key = wechat_info.number + handler.send(key, header, content) def monitor(id, url, selector_type, selector, is_chrome): diff --git a/app/model_views/notification_view.py b/app/model_views/notification_view.py index 0429eea..4ae5d86 100644 --- a/app/model_views/notification_view.py +++ b/app/model_views/notification_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 18:50:58 +@LastEditTime: 2019-03-26 09:24:31 ''' from flask_admin.contrib.sqla import ModelView @@ -12,6 +12,6 @@ class NotificationView(ModelView): can_create = False can_delete = False - column_labels = {'type': '通知方式', 'number': '邮箱地址/telegrame id'} + column_labels = {'type': '通知方式', 'number': '邮箱地址/Server酱 SCKEY'} form_widget_args = {'type': {'readonly': True}} diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index a14e22d..10381b2 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-25 20:08:53 +@LastEditTime: 2019-03-26 09:35:16 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -52,7 +52,7 @@ class TaskView(ModelView): 'is_chrome': '是否使用无头浏览器', 'frequency': '频率(分钟)', 'mail': '邮件提醒', - 'telegrame': 'telegrame提醒', + 'wechat': '微信提醒', } column_list = [ @@ -62,7 +62,7 @@ class TaskView(ModelView): 'frequency', 'create_time', 'mail', - 'telegrame', + 'wechat', ] form_args = { @@ -79,7 +79,7 @@ class TaskView(ModelView): 'css selector')], 'is_chrome': [('no', 'no'), ('yes', 'yes')], 'mail': [('yes', 'yes'), ('no', 'no')], - 'telegrame': [('no', 'no'), ('yes', 'yes')], + 'wechat': [('no', 'no'), ('yes', 'yes')], } form_excluded_columns = ('create_time') diff --git a/app/models/task.py b/app/models/task.py index f8847a9..f98b939 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 09:20:58 +@LastEditTime: 2019-03-26 10:08:56 ''' from .. import db from datetime import datetime @@ -13,16 +13,16 @@ class Task(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), nullable=False) - url = db.Column(db.String(64), nullable=False) - selector_type = db.Column(db.String(64), nullable=False, default='xpath') - selector = db.Column(db.String(64), nullable=False) - is_chrome = db.Column(db.String(64), nullable=False, default='no') + url = db.Column(db.String(128), nullable=False) + selector_type = db.Column(db.String(32), nullable=False, default='xpath') + selector = db.Column(db.String(128), nullable=False) + is_chrome = db.Column(db.String(32), nullable=False, default='no') frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) # 通知方式 mail = db.Column(db.String(32), nullable=False, default='yes') - telegrame = db.Column(db.String(32), nullable=False, default='no') + wechat = db.Column(db.String(32), nullable=False, default='no') def after_insert_listener(mapper, connection, target): From 043ea433e0539daa33d184235cd7163ea92a2e3d Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 12:52:13 +0800 Subject: [PATCH 022/100] add md2html --- app/static/400.woff | Bin 0 -> 67524 bytes app/static/400i.woff | Bin 0 -> 65184 bytes app/static/700.woff | Bin 0 -> 70188 bytes app/static/700i.woff | Bin 0 -> 65060 bytes app/static/css/github.css | 410 ++++++++++++++++++++++++++++++++++++++ md2html.py | 21 ++ wsgi.py | 9 + 7 files changed, 440 insertions(+) create mode 100644 app/static/400.woff create mode 100644 app/static/400i.woff create mode 100644 app/static/700.woff create mode 100644 app/static/700i.woff create mode 100644 app/static/css/github.css create mode 100644 md2html.py diff --git a/app/static/400.woff b/app/static/400.woff new file mode 100644 index 0000000000000000000000000000000000000000..8b512d0ad0dc46e42fc7904cd4e97db80ad47a86 GIT binary patch literal 67524 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 b+H)`6&yON=HACW7{QvXv-zV`xYezN!fMW-V literal 0 HcmV?d00001 diff --git a/app/static/400i.woff b/app/static/400i.woff new file mode 100644 index 0000000000000000000000000000000000000000..d6684e856f17cb5a0a9b71e876b1769256139a73 GIT binary patch literal 65184 zcmZU(19T-{)IIo;bZoO@bZpz{*v5;~v2EM7ZFg+jM#r`_`F-=BHQ$=4Rr}n1_uA*w zd-baBt6KNE$cc#oKmgy{XD$Hcy8)@n{O-g2r~H36F)?MCZ$sj@j`tt*3?XjCMMTBE zwc77K{x=B0Rsdk)@^VVw+RV4~U71gNIXOi}TuDU;03cZS)|UYQ&;bvEE<-sbdL{sX zsPa2c_Zz@GnPh20D}7r4fEW${0K*0VepqXghhP{wI}!o_WWT;WYTw93=)uG`u{E{& z)_lJ`WdHzVqqlxDvZ=nqcP>mYaeUVo1ON~U7wM*=ENu+Gefyr@ z8tFIG`zc`Otn^*Kk9(H;ok#c|z(qiEt@W*pzqOw4?|K0MK!}<{y~5bqI5+|Tm$l!u z9=^{7IK(M&qOHC0ckV~&ci!{&xq(*pOHTOaAm0E?VA>o0*Nz%W^!!hIEH&ktX$Uj| z0(Za+pdpZe27uc%HIUyJ3^5=8*c!k#0N|Qgl>wcIKDansQLX@75h3ztw&bE=rpYJ% zC3K&OBorzr8U;&l7AcGJWXd6?{V%yBUrc60N;IHVSR6U!SLm8T+)gqUb^KsxI+l_N z^R7e0)!XLjDZ338;SKlp$z9HRjb8U?Aq?xogAlb z)bkMKFkXo>@2AC`ta6Tu4u`l(h2+$S&EtdJaHf6!DY*xTP9k)D##};8Ec3(qXq%DF zvW+uu-CGe*r+*C}7I*0}bH>3wCW!aSN`3t-E4Zms?$V;=;;+>-KI~i7wzt!=4MHmS z&OQjD|KfQS*zL={pA-boiW$zNuTxa<8GCz;#kRZbjwb4DmA=)-((<8J_e19v^fG00 z0=IQkfiJS-kvF(I%|uIZQ&fWS1eoj=mOTQA_VS(XD$dd9Hi*NW$5SSQZJ1@}ESWeX z&T8|;s@ZE5re(Kg^HAfB;olN7LR0ohORk2KQNa+lX!CT=;}t$YzLFK6Mn?_Xh@U`OmZ9wR1?yOnO>hyh=f>6`1wYhEX=_>Id~F+~VI ztL2#NczQ+%KAF~C>mhnSd!#zwzkYosF*f!X+#CJ7);Lu0sMSBKwUm?8VzhfocO$l! zBVi;I2&wD#qT{RvolA_gYK_r?f^T z&a+|mEjfj2-)zWr8Ey_h9KdhK!*I!I>AFziwqu2x4W#X}H=OR*FAB~}{c^EP`I>dS z`A_0_RiXCF2S2k>pE}H^AI?KO#yVgLU=|#%yL*dMHDZFBz{BC22diqV-dk7f`I-w( zCN5LPFnFFtdUJ&#D^+bu56v}X6lu-n7_g-kJ{B6y%Zt^hPho)&sTz|DpF04CjA=+> zL?QghcNh+|%weY~$ZarmTaZ?yjfn>gyUQwV2gX+T4TMX8i+}s`rL`@hI%u;0!4AkZ zp(_**96m^leGWR1%oUDj^ntnhMrmJZq$F;dFy~++$M2{Ic8Ba5_F8JEr($P$r)7t= z`i{#LtOJ~{(!||j2L2w@s~mk3(-QJE;DVD42@bShpuv2Wq{r-W*gvb64#-~1ojT&; zQR?l^lsa@(;$SJ(RN1XA^N`Y$!r4qP{CL#C7M=4$7UZrMw5z-I^qy>o>Cvahjo;`? z(iXiHLmSb0zdgv)h4~i4x9UL$(0-z#O(9$jQe$_C>*<~F;SzgA`~|TEwrD>1E7q58 zal)}8S;prYo1yV^G8&HnT(cL80Ur+(0c;!Mj^nC*=e(Txh;Ul8588pRzV8W>7}K|6 zwfp-hid|ofx4QdY5{K(N1D^#WDm!-9KXTGc`*|`-u$Je`2P+{gdNiZ?hi{JJ=n3^i zx&q%hZ;h{|9`yvd_G@Bmh?j|cqTby4+d!6D+MQWxo0kHX%JWrZ}e6iZLn(aWe`~FoekVx86Z(>+MSw% zC%igrHe@$gH{@AwhDwD;fK^X(E&(CkF>)^YR3yk=k83S;DuBE%jTf*to3r;m?O>_5 z|M`BX-0FhCk@9i({OK9p58{Q~ntpd}=S8r+IejA@J58kbgTC$y*854asZh`O>k4nZ z=P!YB)d^UzvXlvyJ%uGdUZhbscqD{j?-UT@u7%*1dPm-tBj<=vDw7`*Z}6z*?!~Oy z2`*fT!x9PBMstKwYTbo97k&7_CqexrThv;;#h{{E?Gt!K%vM z!wq?*y|bA;Fh5Folo{ZFFvZDnwDUg%9nZmbqL&eJ81Mf_w4)4BvF*510>x!r17(yf z(+%d)GPo>HYs>nJ5&nN9>pb~fftEsP#?=2bfXz$LVTM6iI3`&4g6vU17W}AAZl5@V zvp$XFzhHJU$`u{CH^P=L7z`ouQZ5b_1EG5b-Wt4xI{}q$Xr2JO5driFU7n}d zgypXJ;S~Qnv?lfz!OVNX7R?Ohr$0ZY4@hDp9E-vobW= zr2HbqM&)oe>>Gd_l14~#0XxR$J&*CgHd&SayNC-F3L2C z`j}yN{BgI+!@Bfg1AGfNnuEIdVIll8R~nMlAv^IB{GI4z?zQ6-O7D{!sTe)?_qn|U zgdE4`!hVXMd?z=*W8~aD=XMkD|C5F(c=;$veN>XCFBH#M5Kf{8v9@k>02=a>30KG@|KgQu29`A!2YW=35Mb!_Z0ZmW~r7lzq?Vt_R|99{hZ@MS0cA!>=vj%Gk;O@!V zp|fRgg`@$I>a`c(2W_C8Xl7XNvuqE0h=-X-&eZW+jc=i5SRbl1FjTE$tXN4^q4~cZ zu>X%0w;?=2V{owYpMk1f){@fg|Le5ee3gW0n4he!kluZt_V+S~8hamTN`j$jsofZo zHqdv28Kl@=76&2jk&k{%3~dbMRxPsK&czcB9yu}WiVzi1ojJk8@(Gn2i*r<51s!2 zryO>%P0c=Vj3*AE(#FmRwJAO2_16*#K7=dQPDC5w{^&m{ZA?9DdD>BYAk3TnK3sHW zZyYm+J;Wx^t2qALQU1DHE=4dK-g{4o?HMtRP~@S@?~YF7_K#nIR&+GMk1i-R?a;vA zJHfECH6A+wu*h=eegU&~Y+O@YM)=js*Iy(qlG%xPFB2sVLL)&n!+6iC6Hd5VMI$N( zKS$-_Q%EU(^TqR!a!TCB?BkDe$2*X2zn5s=QC33Bne->DmU~Q=51#f$`>8buV@_e` zp<t6A)sTYYm}ovNscCc7rK>ZPH@wHdN%_7kPF)dqn#oV{{L>$!MiVoJB=!@&_YH=gFOgH8dyS>%W($jFJ#=i*^)8v_7d*>)P#`=p7p!=XS zo{VoPzEXd0pW;&N&S9$4EsST!@>RlBF{&z?cguu0%~i!3n9?;^s4Wa2)-)O$%uHvi zBb_lWDs}5m_`t20lNh+BM>dX zYfjdcZ(i?Jr~M;Tk(GTK*$tkl+n)Gd9R)|2d|R`3)Yx8RaY>t15s_N&<#Z8`aglhA zw_%kKVT;W7@w3KRj_YRH$NMv*c?o9mc0n}S%n5qS(bAQx4}2`HKPva17K~nxM$}?! z?4?zkzChRp7OnCdd;gh8xRS@F?*f@tAkSe<6cP?9w%IDZQ(_nPP3UezYjJd;D|W^2 zUa&|rnYRV{SRJ@fyx@|VVL{xn@0rx6cc39YCbBjRvEQDQloSIpAY-Xp566JrnV9TO z*Nbo1oQrOrRHhF&0=o0`;mze_JRiB~3unE!nP22bapU&{0F@$dTzQRCm*?nHMUQK` zqj&J%MP*+Y+3AJql#5q&Uvl10HP>i^r(Ymf0f^7COYWrttmvi1po=*S35({dzkoBO zg3f{o*1qNQ@^C(R+0Eh^cs7V?(rXABkRQoGPkn;Suel+WVoUpiQ zX&u~yiYJO@w4BiRE@c9betrQnB4c(=V2R8W4^B2)5yWTeFz4fs&-PKLyq-pXjqVXI z@`<%t4pb&sCNRT-gTZhE!5gp}Kf~S|fp-BG)GCnzt$wqgBu2O2yBG&Zmx7 zYNwa{``uXmvvzn^O?4{_N_Xsx*`gT)32}>=8ck3>{IgXJS8ie_*v7>tHrIcZ$8kQn zM_l53z^(>El@7uk|A;B=$us{W!2gnv0m})Cn?+P?Oei_X&kMQAFZxE=H>$+75SO!7 zBeuPjG#m5M6Tpv*w(5urHi=g6SIHvsPdq(#(8$>=QT~hJ5__GfjoT)4R54 zI2m8dU0=D%+vZn2m%H2jZR94i^Yq8T)&;8u=0~jirnc-ki2m1d3x+wee9WT^ye+run#KMiGBft4Avnql|3Mzd@%JmdBSm@#+HMIa>&(4 z#Xhs z+FYGN;Fj`=(?5daHr1-FJ2Nt@;?KkQiC@0mfskNMG;b5kXevS{w}1N`7H&modseX&ZOOVcr6UUf#V9$yWhlwDE5oV9U5jHC{(jtd};AQ=bYF zd0W#tOKv2t{IXLp$R7|63qW~0-P^Jw+B%rkHOLrX4f`X?lb}v+M>9mn+N#vx+ z&)>t}zsY+us`U3+{`W{Yd#73@43EqG#%u`8j$@&bv$;oo6NQ$?<)MW}I-I|$$3N*e zO_dm&`7J27etl#8h>4Dg+zD-uL@bSpxjQ?}p|nA};$7Yp-4%7JihT3fQzTJY;y7H0H{%7d7n@>BW#QxP@MVW{ zu?MooUo5dMxY!L^`p(o7*5J)WP1bvmo-Sk~+)*sfIDgJr=4SrvZ;Fb!eAmUqP=%4A znUJ<%y$v{*dVGgII@}aBS7mTkhl-esRbWTo3qk+znBbx_$$CuHyNbBbFuk+$*&=^0 zzb@c8+h;vRb+UjU35COsBO)O;R@So`D5BZF<)JhFc{(3mM;YMsf}sVO5$?C zA8o`D>Pyi)k8uabt-JP>J5xpz3W}avKBm*5EE_2|dn7)MqUxvEzGV9q}c{ zTW@0HPb#}ls=AzGvxFDC>7xdeBL|2AskCYANQS6R5ls(jb096`flXmsY#IC1+y!F|(bIgJni`39kJRbFwXKls{H_$U zs)&5>H>#gh?LGspu{Eu)lge&MYcLjy_Wt_V=$uO!3uBh%M8Q z)SVQqX(o5*WDWizR58&<4uh~~4TH)K-N9DFsOF(~u8y1z;c@tJdxp2pG3^+wq&3A& z-Jg;1*QptX+ETP5%ueh=sX^l=*mVoc^uAj|eR}jwcQj4I)q&?qDm8l`ThZ+oJ7 zZOQ1q9n~8C+L{ev5p0xOmeb~UJgp{vLd^QIoz8u^9sOhe5N@VPi2Rx?;ctC6VXdc{7r)%vT9LOx})W%y9~e!y+zBd4+;)j))$vrw#uE_MN_CZs~j8W zCY|q_JbLC3K6JXKSlg<*$Ax}2QB}uvpe>8uvX)gYojugFwL%<#9+iO8S+-S=EsKP& zm3z^eD_O{AXxf<9)ZAvzl#VZ|THf;4@+PW!DeEPb9$tG|XRc{HD7TkGm$#%B@{P04 zFE}zi!##*D7IqD=sZSc<=0B=Imgk)Un@yac)@_|qsT5SEj4f1-%B~EP21KMOS z@+#XzWmF;-ern%XHz`jlkFS`N9h?d_<+!I>HM<912sBAnsX~^qS~@IhHj^yeS&Elq zE>15lFN~kIoSHp|H={1Tosu}kzp}5lsHj-5%29ABY|m~wvOA?;R(VvsxZ`$4ap~Ap zw5XUKd$;9qDcRJtsF|Mlx#zxCTQ5YNT5eW~mpM3ASgWA(ip3~k9^1KRw#mmV?=6bD zt94dr=29F(pBnHgTouvHDm^GafOWQPX?@7c&Cf3+xwmCkSI;ruOFK1fsa;i6&%d34 zEj+Zzw3OlA+r6SW6=atjl?}csdzH7z)j8m7~9kc@=1uVV(w^GI~XHiB`?EoDQDad4+Td z^OjxBxs*xM&q^)IJ$SkQb=TytBv7%qm+VyJtx-FX?##`ZldDL1Xn56l2=|udFUj;4 z{8Ido{0h&0VEwT8(4snDzPC7)`DptLaF_b}{q_4pqq|~TMfXePOQo~otNN?xGk<%T zp!Dfp{B`?OugyHtecO?lcVW0V<)kR-#ISjO?VcU%VX1hQr&nNE>iB)!A=Mp; zSEYt!ZSLQBn#Ga~k4eKg49-kZ60kbCPU0PB zr^$5^s@-Mgcu%T*lJ6zlkDGqi6sCC7og`QmjkrPhyul z1QgxkodR5>2z1Kv7IQ-A!;B?PWPOj-JtAqxSGPR)bq$H^%FJYI?dTS-U&)0IdU%J zJDf^069mi$ju8dG-Ju-f}5DS!J^s&DuRu8|2G0y5m$gU45T z$g_7Sz0IEVo}+{l51P@8b@;|8hFuP`>hHumk@*&0{eNkmv$OXfFn8^+>D{91IfS%t z>^ZbImGTK>aRq5@%x$K>ojL0+GjTetwS}51m%LdDkfbYfmL$o3 zAebY?tNux7)n;jf8>_9FH~!MWGHsHArOVCY%pwnCxzd!KRr85g3jbq*uH;<2uLt2_ z2K@eA4S^5g1sU4C3ee49|QcrCi;pVn&%p>9t(Enj2$G z4pMbxZ1o~sG1-#_FhJx-+Im4Zb`_#mHC-d`aVs`pm*&q>V;Wgj^zBIwinf!u>$& zMV4-$EuP8BIA#6qLeF0HSUIc6>f%(JSMBJ`KqtS#F=VTX`{B2jb4d|cCqc}{%p8nF?F?mW;$ z1s&;dBLB_Cl@e)U(?-_!7wEgVa-74h_b=JXtY9q#qle|7@RNH>z>#&yX-mVAzJ^T0 zyTGd<74awvC%b zCq~Uw#Y3`(RHx$fjbewL@XZak0k`q;G52STSbfs1slvNdaqW;Z#uu-c91LT;G|n(% zHgsX^m`F9ls`MV!+$dqfZzIMuO6ddh;y5csPg*uka#{qs`LteX`?NtP?P>T469o47 zVVQ{olf$@aPmJ1FP#DVmRMA9vN$dmV+EhvFyl^sQ2WnOtW9*i?O!Ufq=Sv{Ei=x!e zhYeA%sLJ9n6HRqtY732F_r0rszq9}S(cLlDC7ZIy+=tgaLM!3y*Sf!91G{G);qDlJ z>llXg90M`Kg^NiE<*ne zvEs>Zb4`$285eUN*(_IV9)W1SE2S|3i)qLy_Y98sL4SiHJ^`<{k1lJQIbJTy>X2hDA7##pSb?!v zc=`qC*nE=zpE1=CRUgUp+HezsR7#_zF56fDga#ju7!DO1>$4l=25Fxk83}ss!F23v z`AhR_@I&k7i#1@Sn-|Uq1OaMsa%RLfMIS<#Uzng@Iv62XOw1dwL4$wzea|_mOe?L6 zp>3ftwvXz<_+MOsgDJT$qn8AB?=d3-Bd+Ne5Fv> zGjblR34ev)t!Z(RFW+}2$q+IxLRoA-d0#$l(V4$p6VAMOTx>2)$?@~O=Dm0obm`o6 znjdgCHN9L6v7cE~==nSxU_Pnw(WhYWQ)66?%5Ap8I=H<}P24Z+i#U5)vM?LisiO1< z6NteO>qQjO7r6f=eGjTuqkE~x@DKg5L!p%T(B^0KgBVSIK+X{iK``$i0g*<+~| zhALR>M1#;tQ&Xaf?&$ni>*v3;r<{x^UN!n90=sTP35L6cy|I%EA*H52b$hZ1gnzs9 z(I_n(UOHtTz9r&`!8W7a;0CY9seNsU<%2M()^0Os`m2CTx9u6x7R`MfL9q&1`gF?5P!?ump%5z(MvS$!ELcA~JcJ)wz`O-uC5D;oT0`9{l5i)o`e_P%nFgPRLxIjJioLg-c8GKlQV%D1eo9G zXmm=~{7@uK3BkP}ftEznjR%oG%*;p#&0AxW;NOF8gfPA=NjGv?T9e@O{`LnisYB2} zf34uI#CcL5|B6y-;)`SxBOWSS`pIrPU!q+vPYV$?OCnXc6hhTeEFU-cQn>^#qD?n5 z14|oYOxO;(5MA7f%o}_Ff*pJ(So3K8n|(wmJvHJqPryjXYW44LI!oLa%}SqKYq&+? zsWB7o;vIXWSp5TdAWNS)>s4yIFGAx$yV{Ct;iO+QYSA%+%Q9uCrK7>>67CSrRl;_r zX`)3ktD8fOBHiwy>Tgnh3$pN>CdB)q$yAQ@c}$F!a(yz1%RE^9pQ@;mC$zFY3W_7KK?-#R(x9^2O3TCx|-B@CP`P>_B8= zb9-gu#lSI*`Q!v!e>x<$QS6MJbJ1uy2MWO&9k3@i`ZRf2^I2ioBvseuFTRIQKkqoh zV-s&ig&=&qlps1b+^?$VeBppwiOdRh zuB3m4fiZibw{FpwyyqVXw&}jY7yshWa^6n{9?_ksdZfsjzbL;TDW8Za|670v0ssR* zeXk9L2S9#(0T5j?BfX#n5*HtzUAnC>f>$w}vBU&KM6iGZQ3|UnB0`Sx3drbodVmzD zI9q7DeqJSJ5@Hq>Qs#yYr3NNu=DW1%%H{E7(?e=wx-X9_c4oNztEZUQ-My*5PuU-t z9#cQVi)H1}s1GzLgHaUfUDU-y6ciX04v)8R3dYO?w<%KZn_VJ~2OpEP&k7=mA0c5r z#FdaQT#ljc`H~eCbyX45lN%zndHTqgmBNq{)$+NBsM=b7q%Pnf;o3yco;7w*awJCk zc29*@`{qPRgr6sHa;)_=@pVB@++W2s!{Zu;$&FnF=x>{xru9a%x;0-nhU%A!+!duB zZ}~F*i9E*L*yJOLdfZ|piLz+=lBK?BsjU_X|M!~r^s4BWxOyrIPL;I9l_c38Zp^fE zbVA8$hNW9Bc8xM=7G=_)5%lTO)x(S>DmF}G_O-u05o?1i&|O~-x^o3hpS-NxH;%p- zv1=%|!w&v=4o#f0lo)Uverivc+>`~PfVyj348x|%OWO4w{jw!apqJ@F}x3(lZe*FFJF(y`;8W#9c`_ zes;QjUdAX-h8Qg+g`uRHXn;Mr^YPR1QG`xitE(fK-U*hL;H+KQS#5|mGJ~%v{a8$a zsVmpu=O-uSN;h#`qpppSD8D0rmK)F(ij`9bXXtfxI!twS(ykPg8VC88+N#cKLa_5Z zFVHrg(`pzaXJrV96Cy1~gRh*ZoxoAV=JFU%DRYNOXU+^y*E|(E`5R8hFst6=o@STw z&~Sh)Ey;&=qZ`jvx?-CPtS=ye-KG?Bc717fPxraK^3TBGUD?CBiI9gwFUGAW@7gS| zu|?n# zKk%-Qd4%L!p!+Puq7s%J;1?oD$egsGHyF(HbE$nJ7$@IDiODh=JRZ0nL8lAfyW{GH z_u}aa?r^nrTfQbzj^ga3?cqL8xY6O?YaEb2#i9L=rit(#}yt|8V-)a zT++_g+ofV$B|W|FtM}^Di8=pseA|=rr%TrUw}+s=1PXw0+*YZ58T-(odgtGrHMGGSs&a;-M7~_@8w*%Kc;6@bN!w! z;IBzH5HAG6^&8~^hkL+&2!{hhu~mIR5?L4&sK^Xe10a2RhPivM?#kJiP1fuTYy#1MggNU$aP_9_1Ej5HQyIgqQsCYI;;uKA@KFBnbpRyO_I&UB-D;T%-0JmZo(49Ky5{btG-+dx`}k878>?y#9!5i zX6_^Js&tdemwA4NgRPTuHl*mg&7SMOxy{{elY(5RHzvxA-t=CsHQ`H_m*kH&`ttrGhonCU6tR`{S zK>miaNmSFzS##50b6W0>xo@1A=Yn&ANG-;Ekb>Cx3cLyRQsOsv z&zqX3_Oo6?n1{!LTr{I~3zg*qE#m3qNV02{DZ2f~aUzdPaeMpI{LcNExsN=mk zk`a)Tv*N*M)(Yngs+6T4fbR|7jUDGxe4_GfdV$!SHhlDv#Gvopd#VG=;Lr8u8{_bLGxmJ zn#RuV#Y^LMHo$2kXZ}|8g*(!@(r9#x@fuLRx;j1lq{q%$gEdb>< z05*)k*Re#1yRTTj4Xr7cdo!sCqT5@@=4wwY5_;bXFc&(l)j^_gR!dmtP5%u|%_ zs0wXyP!x{LRu&J4xqVqM*4+Sb(@q*eYKIKw@jLm8dN!xFO;fF&K~?usfv^nU&;+PM zaVIcB54^#H*a=X8RMuN@H7r&a_;ewj!uC{6)?(lzpNoNW4B@1<53s9sk1NmsH4KI) z6!z+9BbZMCuhqcjCUnO2)Q)r<^;&1zhk^GlRm5m;-#piSR2XV`BA3icL6Y7GK*UMT zIfRMDx??R)p&xigULD{N+G1tVJ7iVRl??5SBQ89@t*i|^ves$7qVR+beLYNOAypg# z6jmQJUmMS0G9tFzaO3!g`bQ%8c)hz!28aFp4#*zgl=q&*V)iX#uwK2Q$B=%Zf7^jg zBrTp2hwVF>1F(p*SbunK8Y3!8?Z@_@vNQn!b)}802TXUgg&^NQ!txLmR2-uC0qRZ& zI3StiJvuU0K!4i2Kc%9*Hvc$&Y4W=UZrBgRh~7@@8B zwhYE#6^C8~#s~1c_qJ66dd>p0=|39sO{e@85J@q0mjqJDlzE)iJN0!iQdLDE)FIyg{G;WjzZG2y0 zs^9UqLYD2RZ+mzcplo*r`m3(D0#{3pVtf$p!C02sFIXjFDC6)^iLNHLsh)rbgq!3k z%)iQwBnE=uVu0x&Fg5at2DgB`ky+zZiPHBwF!Jl3xS>39dOD-~k{zbVzDpQhSdosq zrBtwyd4p2zA74oR^d)f0NJ}W%u|mj+`bxie4(x@4Wu{!+jaPUU&v|5#SE@*$T#S&-V_u&Xi6|FZ`mi*d0EIYX_X82&pqv5J7fC33C(?`Jb z?e1_ttx9)saGB~tywU*)YMHi_@eX6o39PW`@}bsu$R!8`unfI+R<0TK8A4%ZV(bd} zpYx>0shO_02G1L)6ON{$eC z4NQ86Z7-M2D%92ouKXt~maX}+Bc6h9bfw=v?zEEFWq_v6>4ILL{{Lt5$=&a%D(YFs(uR=C+`g~Dg$2L{P3 zz@}=8%;hEpL~wU?L4EnN)A{G)lBI-0Ao8oflfSzS7m;v>Q}k)EG*ZBUi}e8HuD5bF zJ*;7)|3a~E@_ou+aUAyGw)pN$4xdt*%vl*QQXF9S{GCHIGQ=T<;~4Hia5c>GIt&&= zT2>deDYwqexX=h)Wt(fDgyf0j{d@os zi4hsWM5dZhLwFMrP~!$k%qs8A)(#uN4qP9!P7G5nl0teDT`JBc3@*G*8Xl>R@Kd#a zBnVpwdk9G6Elf4-R$+<$J^r}H|7j}n_TmlcEr%d_BR=ENnAoC1UKB?_jmn(pPXk^9 z-p&XWqMl(`sJb@1P^H@zVdDc@KEM3m;Y0@=xU*{2CnkNl5b&odG5*DFfov&0JHN6B}dmqdl zZ)G^U-L3cn0(ASUy_!&@Yk-G4#-v{bjd z4cd|^pj!NjR6x;Wz+|nPYp81zR2jSi#UC)uvCuwHVB~DOKe{s+52##~cK9(YQ`hTK zb=l`@d-_979oVOT%sEBt65_dD3tP%`?_1y--Wyz@w5m$(oE{|;VUigzNrH@uJ1p;( z=67W41xhH_V~wIBFWg7h(8Q4b^Rd2tE&4$(}RG4?ZzbmAT##cdrK|PC8_@M*>QblGC!nERIA7Bq<3C zR@D}-`s?EO;6&*Fo`O&BZ&bF~c0l8iSgTFA7b9;RAIM?=jthNukQ)`;OAC2nhEN${ z1(STSp`-T++s|>rsNq(UK#sU5RYIb2e+ zt_eEu{fEq|f4$>1O05e!m8#25i@>7&GRoh|XnGcrW=tZ^O6U1?G^48}|+VarEY0d4cS9XXM3h9sQO5h zT`h36te{yTLSd|~0?D1=NF_@|=mHT2O~SD!VbB^bh2eU%i}-c@ntLPsF$6C|@YpfX z)cg?Sv(C@YYLCp^Ue(6YZgjAYnOfkAP$>OZK#1MA0x~8O8oz=Mr6U+g)Wl!{rxRfV zhXH)!we}(=xic!E(R3-t$a&9GTssh(O}=yaZIJ9ZVL78kg7i z&E|>>VIJS>g40%-ZQhoSy0oSem2$ms`yPz_zA8}|CnaNPf!rtP5UHeQT#aOh>f7sJRMzz{Wm!Bm#Wv_}a3 ztlH%%3#zxKxGssW4Yo<|5Cna;9naaT;}55SN8)U>y2ez)c`H1yflIb5V%MR+Xea?V zY4OcP-V?HK9fai5B~`KBHmvP82kFBO3_PxppE}oH2o584korb8D^tXs(TfM5>Ih?k zDmy=2ZxMKg_{+VFMBZA%5|x$`+^BN}SAMm3?X@vmfUiX$zZ-l{L6jtpKDYEtku!Y#SIDac9i9YZ|A zupR72gHFhil+fK`b4i@`&)nbD2qb>l^UkckVZOsl^1iZ0HO$m*B>8^NgoqNCh^g*= zwHyswJ(V;#wR2atBFG+IJ+q%}DmEPdHp0$1jPCtQ87frA#(v2XEh+F(vPn|T7p@q+ zMlaaqhhKxk%)*;Qq%msX)%kH{BRdxTp2>6^Y<<||4OV_vz98{FvYf1Lis_^9YBalC z$#*F}Y}g}@v2pj@zujz*$qDF#wd%U^yPlj+X6d!j&ES`-mHL=TM{%W%-vxG%BVw$o zhA&gzQ~s(hdY>I@s}2*!84LU~MpAV=mSDEQ%4wCUj7cm*35gAFB4soB+>dJEQuWDf z_U~^z=R8HXN?{gPaoqA&$c0Ri!_;LroF3=!1}8%II#;_9eW+P$z;UqcAPccJa*igc zR9#qN;*b@q5jqs^RAiKcH5#FxI7Ro`kJe>XHBs7ho~O=}MY2ER5PUTsrwhY`Z(t5p zZrtxy)Adc8Udv=$X7(@_1lYVCK10IM>Z17t?+h~gZD`ARsuby1p%>zj%W?L{BIs@Z z_RY%1=o|2xmyQRO((f#stG}38zV_nN=8MmBrVfAl{DqVLc-uO-&7X(t0u7>Af8T~I zu5!TWLa6ET4w(VJ>JB>R$MR_OzD3K(As|C>LzOPwWZ1nm<5ar@8{`yA81X~o6iBpF zr?by0H;?d??DZwy_LzY>?0ZpgTAwVXq2jdZZgc*} zz?#6Lz*1KmX4L6Th*oJ3lKApMe{tNC^iy(xOmb|PfAO#&m!pw<8$p}1336}bQiG*f zL=(yqx)ZI3hKbQ$K5=7s%|pHUDGN0_2gkj$x#X=cH&h=?EavIybMY<3C+H$bQ>W_l z1>AC*C;*n#Bg=94u5RSKaSqC4n|_vPYMjkzRRX5#h2 z?2y4@=+?L@#e{CV(+qp&$T;ek3|>N(22-d^#xASvzYv!JyR_XdgTJ4H#^Q7fRjFMh zd_2@{_9F5x4isN=e6J3!x`Tawf9#8%U?bfVX-nwXxn1@lNZCJPbrHqi&tnQ~n?iKO z6!5ut^P_Z67$#D~;yPys5+aLt*vGL`2qRpBySjesn0hqKaTI}!)~uPqJUxu~wA7ks z5mlyIk0Nd>yL+(1?KQ1(I}@a~HM)L8fJMj(6bR?!`hfn`lCT+zD^3nG1D_$v^5%m0 z`%JzM>1b4S$@1Q=U$@9(A~AhgXNhxtnviaajS;nlK(sLT2^9=C_&UNoOF5X;3fpgQ zi|!0STI2Sumj1s0Qb4W0jvvssJOYU8;lpmPfE=qicSz6BSi(e?*c*@aZ|xQhbIyeA zLjuB=5#dXYPqKNr1V|~M;E)2qN0frNBYP@Arh*_!3Pd1-mY;_aAng60w`DhijK;M2 zk#rR84I}L}v}`Gy!)sx){a&RDJ{^hRWBW!^1Q!?+z6m7E%6ZNo}64!qhH^+Nt>K8a#va43{2XT%tg0efgx<##j>L13(FU;TAno9 zK9O!I>M?NW!mAshjB@fATCX?eF=4qf9bT*EDLmF?m3VoG!?dZH0*m1#O?+o!MV(utopaMOLt6N=^BQDfWpDefT@;&*nPgCrX9&v&aicdWS^-u7o|-gCN$;EU4+K zK zx&12AF9~d((>@}Tt&l1tzW*QgQI6vWwCVU~*vF0Cr7WYEQ4g|ekmWwHde=)2I_zU% zUZ{5-Wcb+2cTP2b33r|8Y#$Lm(7LcM;aryor9i%fFIkb2tnQh<1VGI3Ov6=~zb?dc zNI7h-pCaikp3pLJ&F&5V4Ig)U@vMR=%|-0EDPx=d{sep%*}Qn>skgrbMJL;QkAUEp zr!RREUVH71!1IVdm?Glm_*y;X9+XVsp(6t9U=M*ifMB>gn1iN&Pd0apiygbW%x?x^ zi?sY{>^S)r&qY_4Ln-2j3C~4h_+n%mlMwuF*mso$Fgl%YicP0vBq=sV|71MHyC1uS zIn}l(EYu_%YXs2rt()iHT$Qpn`GsXE3zyHl@cLW3^HCd9({vLqI|IYD%Dn*PN7!oQf+DlPo>y+ zy}LW@dS83$F*%SZu+C0p-=|iYEDc!0@qo!r@ql z=VH--Q(M$^V;YwS7uNq+qn8yNny_r6ej}S^Pq)RaTlC#7aO3fji{%A1l>=wf`|x}P zNdDDmJ`befB}iK$CQOXMzPK61O=_K4jn(q4@&>CHUl9wE57`eQU@t>h1T+)ragUE+ z7$r#O@d!pBj>kBKHzV=aNEMWzc%AVW6FLBx6hb_vbH!u+0KHP3c_6Gcgr|AG*+6y(@^oH)=FZX&>>JSR2gcMbdHyV2Vn5K3AJ-!nNa!(S9qlN% zV0p3^6qoT7En*cOw5}sABS+{YD$|(26Es#Co6jDl|&>~^Qzoy%>%W7~{n31Gaa^j6Qvh+Q4I7)M z$8q!_d$fUWg+^a`gTH+Yttnx0%h$A>Ky>ki$CxM-XN4iUc=$@C9v-1uHACTA4RcIF zl)y=ZZw7*}Sd#@ib^}2_AVNMS^5#T3r0W!bMEg2$w05i37{Xo-DqW{f3V!1)W8n00 z+El+6ingkw6zR{wW7ErGZ5vHZ^doC!_q4)S8utqO`?CS%n2 zu*~ODObkhUiQ=$rFc9U04|amFegfm-D`N^aBrnXhPKvQqnhV#by^uCEk3OFqyLFa- zh_ByZ%a+;3pdc^7KHY~k;69sAYOWB+QIv=Y7I}`qK|)6@9zX&QIvsY+YW@s}N2c_Q z8#$hT8(XhS~xo0mwlT0dJvf zBPuGw$y=O>c*JT~-C3uIOhl)YN4&VM;)e~Ur6FYnQL|>FuWNs~>Ik_Aq!EGHqfnFEvGR_-tFFP%DPn z)Lzb%l_MB3JDhmI!iez60Y2|TKP+g0CJWM1OvaIIgEzi-H6|I%_kp!h`Y~DbRbyMK z@1?k?kA2P$8_J!}tse0UJX&$1V0FZf+FpO$tN{67681$JfRRoK*;`JyCe#;gj$>d1j5+e zq{?v>)8@~gQaP?NC8Z*-vY@1_pdzm#sdC-4qKzAirmm;2loXIZR_0X}%@h8J23AZg zo3;**!MPo(0^#f)k_A0Az-pAr74qRWk%Cui)WdBIrO_!gff`z&QD|g9$IHBgv=Jia zcx0Ai1cD0q!-*tfnM96?Nc4qNJe>l5e&7D{kACo)5rq50>j^vhz?=Rc*ogkUec?5d zYJ$~!s^LQ*ML!stqTOUzg#0%t!-!Z`gt!$8vnnAx__ge_<_}(s+f+Jr@v!F$3u2edng9JK&1HRF9ag<|%G8(Uf}HH) zDVwq;OlIiw#VOSlyONgnADJAT+^6S=LhGdZKB=YK-WsqexTkGY@9bU!YQRXJr70=- z)}AjU^&gA(1kQ7E<|pn7B}E2Q_Kuv7Bs*!idnu5F07Ok2!lS4(i8$L5*_LNsIUzS}tI6vW|FTOp# zytIFD+t!ak{)ICj@ALEUjZ2@wy{D!h0Fg}xK##W%z-!G1;8$<6rUN_Pd^KW;pZ2$J zKmW7;qBwX2zvm>}`}rsEjSHWFytDh^mHh`mc(dbegbx}SEhFR3A>T3pYkCRdCyk6^ z1ALGtft(QKmocYZIU0+*pED3J&d?m~65O93#)stAjFYq73)6>Ber}6?z_jFqgmLBE zxoLU!X(fF!78O@qTWW79I5=Wp@~3NR(A;CFc}xRyoZ?XwVzkOVMN*z(qzoqpG7boN zMKrg{QBAA?2A~l!obY1|SeXg0HO>1G)POm;@b0d8*XT4*Iuag%<K8$g!VNKfu#@qfIs6ytkz1>+?sOE767{$7HK!I=) zNyQ;9(1nDDvvECo$XHWYSg&3(KbF#yU=)(=A+E;h94u1q%JRd7))EN`c3Yw`Xj(i!waWb=^U@UB!5NbB_= zh{9(cLO$IR;wWcv7B=z<ubSO_hVba3nepB-;vv$v4_8BWvO-+8Wu1`f;9p*1<|vv?g6n1_Lhc+nVP>RyL?&9>rzYfh=qE#`vk&^e+gBI;34RZW#fy=z>w|q= zwM-#0D5N^QuY&G~b`u?LJ9skE2{Q@tI6j%Ev(;AxPk-&F8ZX)SmV&uviH9L=AINIh zqz2Nu((hgY|9E`l(&D0tnQP!)KGvQ-4&mz@Y-3xI{ZddqRu5h*mUBSPq}$|F6t2s{ z2*a~tp)jdP20|HcHnOeruPzvv^Yz7V{zXT^HopAtD#omS^cb)Z%WWe)6zpa4lp;z+ zRnSEw$C?YZ)D`qfg}7GCC>4lnKS35j<3@$hFbndruI#N2j|>esklBAq@qj9Lub@;? z$j|N-A#Pn9N&!G49$H7vdr^$WGeJmQCMFWhm~nE*g3ugBdzT(vIoI3h9ka;HwYF`d z<oS-5Em}RI6`V?ky4n$WFV%Xe>%8r-pZVeYe$VbxV~PnsI^&Pf49pdbd$M)+Nd zyu@s-RT;*l(I{qBhEhu}P%06VK~J^6OG(~gXzV%0#bH_uMq~G(v1rUjio7En5kW*P zqz|C6qC>P252c8{9gW8Ri#w0TmV76S{fiRdwmIPT5a1&JybaEy|6<3G8cmZ`#d~`z zO(y>lHj`2*Nw+CYos#&NJaXU&pOEKla8+euUUuLe%N@NzU$|hx?r9UVHVqz_cXo6` z>x;Wz9I5}6R2UA4il-Zv?;Ag~V$=Ak=D^C{v2W~n{`0beS%m;s9LAQJg1+3S$@uR%5?ZK0J)E|iK;#W}_dcNqJqm zF=MHTPlXd93USRU0~=0D0#VP%oUVigK@S(inlM zqs9s61-J%#U;)g4H_kAPOrz0$v5;2!*?(I=$J;CFa$u%V(Y75%Y_b19T7>M5)VUJzh$oI5OLu-ll@_Ek??H`Bdi49IDZ5ynWRoyLTd zH3@Kv+pUf@84Rv9A)2Q->fmrrIMQnH5s5|VHUloSlIk;TNTK+;mBe+93`upI21kOO zD&#OlT~%@`HwSI0eWFlq4#+UV)?!Dw9KCuAy|tra&fc~KO40gB4H4n>Xo1&(SlFYt zw`-529*E!}M!+XkB*=rm|1-yw0;4b{B;;9R5RI=2W1J%68WZIjGnTsh3^*aKxr(XJ z9I_V`)q!(>V&7=yceV`IKcgs)rz9*b72{KNthNm#VP=s4g9M1M=Kc|$C;(P4WHLMk z22X+?z>g-+z6M+?;oQOQRvi2sfm1jwHXE@T7nm|)PH#XEu;gxPv zuxx1O5ji%SO9t?AmSrS>vdrnz(0NqBT&blx&V|K3$ z%SI8*iRu(w`4_k6>P@?H<+XpV*-+2m(lB^}Yi*~F+po7azc8D`HSHAg;l}XDm!NuD zz2bFYOn^+5kYbZj0o_t;0s5||$O5rlr^vu@hJ^eV+)+m&dAA_G7YGv?7&=P6kwvXe zjvo*+D8~T2BK~=DZ%dDnFU_71HPd|k$lK%1D+kV7rRz0#OmfJ;@mT|dr`yU__`zSh z<8$YA`U$hS;E&I)El-#{cKUNkeFg{5m^b9@bE$j6%?qb=AK1r|JiC8fZfbI$#33Qp z^zvnoe)`}5!au3=;Ef3XNeKTuHRK>ANTf=@KJ}C_rAcH=j~>q+19JXL#)O4EIflFG z8Z%b?3^?2s*IdPRib!^BtS~6fHCLqzj_n&^Ot)^1F-S(y7=8>pj_QHUkLLUGAnTD<+3{X4*WEXEw8dHE!o#L zW5WAoV~0;}F3e!AmK=+c|MSlj?TD^3NO;+bh7^hy)xzMRm)i9*+y z-`vKO#*r~SdpKIK^KI^ooz~plLrOaQ6tDKO8oD3PlMv zTjkU#_`Lq#ZevQ@dkbScJv)s#-7yB_z)yuSQfa3#C&+pPIK}X5igMU&m7C4ZLwq)m z4?$YK7Zq#u^H%5sC^5$}f%@(#HoaaEs6Z~5!q^efnL8LpI5tG#kKPbsAYDt20z-ju zEI2gc!ZaNf7`QxY-{7nXr73{5{yuudI{0@>>!p>yZJNH_#HVM#`+cHk)K9INH*3%6 z1zciZOG!@3#_81y9tQ8rTL>zu`?O52H|0B~y{k^C)MJPps=8LDliHg4t$2JtwYT z|Jc}mjvsW*+O_cCiwE@Yn>djEQ}~H?*&4O<_{8 zYHB@bZkW(rBbm}Xp{7$E!_+ZFY0yVZ!PLD;{Hl7@rthd#4(?RKjMn{ za;XBrhjoi(1Uom?Wy5k!UGy)3lPR*e;Ebls&wz8+1!pw<6gV&q_d5x2lp>JFL^^Ck z8m`L_-ix2p4MMDkdxVHj7V7W;69k{k%}>YkQiPT%0xeUz^34-)T>iehFNtl#=?*v` z=hLpdCBTVx!5IVY3vi6aPH-BzTMjsQjJKfojYgN=e{wyesCog8TWo>h{N=WuQ6Eym z2)Ff+o+bh(%mF7~pi5AYI~-ogYtfigj9X?EeU-e|5eKSyYNNAul8YiWa6PC5Yk-C^ zP)e~xoNDuwNKoLSMjkINMll4W*bMHR@9K^2sFq2j$)T6XEHeF%YR{#U>cXWS3SU^` z3l@jfhi~@X3?DfQKUX~r%s;mckp_ifK!E{6Hc!ZUKf0XTtXQ-G_*5LQEYENWB3!(Zi)5pi$V_*KYz%YA%rso)plNmOw zL-t@l-18>DLGrK~5FPa7UYM6k$UD>0o{+Z%1Sb&=oE+_v8^S)0S=5Ne40Vhd09Ffl zQ@O>F97J)X23eO_s}H01ka=X_a(0YN{}=Oy}Wt2;puig?UBPa9WI?iGo^Vg50Eg^p zC!yhP*bmn&3-86x+ZmTF=*GS48o!GAsr@y_TuWTzd1h52)xrB6@R1%XvQH7l(?@u% z(g7dwLZf{-!kNL*BkGB>QX(k}SXzv}D2|~#I{HP)`6@{_nl&g6K}q^$STnpNJn^30ak^CVt7`B5HI4S6sL1m zH4(r71r>-e1UlIEeEijI4Habxmzx@xsToBTb_<=8HobxgqFnjj1l!cSApU9~xQcer;ko>G2(sM{-~ zPvA2q`N=Z$VMT4nnsz#EcNNjWF%IACN5N0+qgmH!^V}H`4EDGl?p}5?L{N^B~Cf%k~B4wdS zx5*f(Z@Nv&GWv8IqXufAO}7!mcWR<>9FTSN)f-&LWE>)kGkeE9u;*uHIa_(RjiS#4 zk|VP~`|k_rxVC-C@ehYBz-_-;S2M3cI6Tv7*wuQW;n$ImY(o5DMEbZ7)z2D0%Q;yL zifUtGI9XJ%EEvVNGNoTQ7mm1vdm5;Fuw7m@EwxO5GYIeeR;pgG((#oN0vi92PSqCOQKl|W?GJ19ShdtFl z{%+OYo-zOXlP5st!P~QzR4sn@LRM8>v}wyw=H^BSU#{H<1_6)fSFj({FIm_-*{O3^ z6B@@k^7$LO@Cx=Hb`koH67^h_2s`Y(NpwFQbI#&`v#N zUZh{lUCx&9ya!$LqA~4@s7}!)8iV_v!w8&s$NFapda8GC7aUyEFYsrsuzteppjR)q z^^-p84mkK0MFCD^WG6VITyU_hpCGKqEe;7odc{Qi=6FZ`Hif_!LoMzr5Z+6kQ%{|D zRQnggyk>K!d6&D*JE}chm^V7wHScCLZwtY{#Q{H&z>h+{#|>Ldq(7U? zYjNP87Up$}yYkSyAMqOJdyze^Mo$6N=;-ZMP~ELsMkE#?r(7(SacTu}(6Kx_OJ<#Z zFs>{Tx!rszGSYP*%nx2)-?Sdy3Iu*LoDJYi)M|SkUB4RqP8z}SopnP0Lon6X>aWr2 zt^UOE_L0kZz0zCnoodr}?SxP}Ph)XMgt=2oM7#yN;Lf%P9D9>guB$b|GiJ5#YKvQY zgyn(ngIG^zi-alv_ew~5Bw*#A8Nq$}cbwBjxz5+dQa8KgP3F1IQiPn`*yyhL7XpXq z|2_`=f3u6N7xH#fU2t+EyUL=l9*YakXsYoUaPGR`jQ;akaIU!E*r;`mGeIXH_k3fe z3zl%cL%V=I?F@1pkUsT%5yLvds3_TNsCg&Uk`CmiG_=R6sY3%wpBt{U%%pPGer ztJSWU?1}Xto#8lZ*6W|K9ygt>*E?1OU>nkfg?u3L$MJ0?suY_C)ye5{Yr%AD>cxkx zs|WS9MlX*6+V1;a51-d9V%UH&`M&U9-S-ja>Nn1Gs!^|~^q*4x=;HDHM1QdOOqjcf z;`W|agF=Vq@)rAf`=#2vQMhjHm=A$AvEQijB)E z^)J2Erv!L+y4i*FMRIBE@06bEhSw>jX(dMqHwq|?DK@3P>pEjP*7iTzCBL3MVvOO4 z#Q54vrlTs+J4>n#JNL=C*3^;v zjd$;t^LY!e>YoiQLf_o-_3AC8Z?5NN(l=KT3^>Ef=Z$Sm7t0H3t9usHEtDhI(C(IN z80E}0czZkKk8Q6-a$F#4q?Dv`uqV!F`O9fZXs9WiPq%r?P2u4txi_m}#W=He+JM5= zC?XopU1)KUHojfTQ8E}3?CP*CH00x53dsJ0-e*P zzKhgT5Ix-B$Qx95$?=l9C<14PV~l~oVcdLAa-K@y9CbTGW}Kd<;KL%{zr*L{nbp3O z!{_bi=JTTGr-kPm(D)8t6+Qoxa^@o3d{y*(H<5G9)8HbTM(!Q!+^+vbvwr6eefP$E z0>7L&LCf%24%3I+8N80Y&OGFel$?^i!+79ZR)h{2Q)n13GR0v{rVj+n!)XacD`w8x zP-fT_GPVbMy?1R{if?sg*yL4%g}aBZu-DlH1V@43@PL&$;g|z}!O2{qQD|IY_=p}$ zmlltHBWO?X*a+SjRG2U;%XfHF?1VLg5u7b(Jy*G@!X3_xqxV2$1TC~N(Ec4awHA%J zf#&k%?&2E|TEx^c86M_?tGG$GXXpU5X3}QE`UdZPao$S0AYT?#QBpJyBNpo8-CBW?tTAJTM1;n36XP-*ml@D>7+Tv+zLN4lR!e8~Py|Y% zB#9D6qQeXLWV~DL_LJhn+*~wyO6l_xrj!<0&C!FAz+1WI$%xzYOXg2P+#ZLxUZ~%i z1Jfvc9jKa;9^#Qt5QX<;#uww7V}u??QhjwKJE?neSa^@5=O*;X8apUsc#jmx4Eb}J zakdeC2|cn9j-t4ml#WujavG0iN=iaSosRLjd6qOH^`fyiVN#o80%#n7n`tJc`_R-O zK|Rg-!oK@^jz}Ho+tch*IGDX*iZCVg1$4KFZt;l_;=Za{1iOUv7HAN)Jz0&!No`k$ zL5S-WsO?!3)nq=MoC|WJYI>4a?1RX|Lv@2bit#nKq~M=IujNtu4Y0Vqir`oFj*d}C z9M$>HLMvEYQ8=ZnbZTM6yhJnBHReRvJZa(lNd*f^CpZ*Id%L|CdmWbYMiluCd4#k6 zNDk~ju-DtykY}ZjzYw0a9Y)VKaW|3IJoYiJFagwF$T z)WHaCra#S|>|3nO&$q^g^@$lYr;NLooo|@)o+7SS4V8f0Sh#rUZ(jf8d_H#;JFYKI-Yqu6{ZW=Hza>j{yW z147Ye>l`h2T-E!f+T^!}ctl&XVum;y?wqygyv$VxPze3nx3)i}w*x&(MPqOCGG!>$ zy^M^te@(`s=e#F+9!5oAE${pbdCx?|c)yUp^~7>V{`Mco-^L-o<}(5>W|;7oU!3r` zZ^?W5;}iQ%@Nmxf5BxXuti64!k_Rga@$(`S!+*}VAfIFl@kyq@j}a~8tqkqT!MN%$ zl;o_vn=40ji2NSnyyKDF=}GQ*>~xo>^Bzyv9iA7t*6k$rIgbeVJJ*7AenH21GlAK? zBQ_$x59m0%B){W>CB}8PB7<-ph;K_`XndicSfNnk;$g9Ox=q~m{!fw767oMTTx5|x zzZbxi{f}!G&6_um`JXp0I?lY}$Xa{4)*eBA??v<}#-}&eLi%(>fMM|o2f0gu+>y&* zD+fv#v(iML8ieXHovF!>y(b!fU$fRvy*zJ#( zZret6zl+COP>iZZ{#(qG9%f0bsXDBRV3c~W6^W|TB@0D|CjMus?$|KE3Sw7-X~FDOpMzYat21mY!b#u zyPg|j-F=XZ5p;JU{6>f;eSKYV1pZuv45Hun5;#--<UFKh`8$vzfd#wx^ zbjQhvJ0i ztVw6~Uj|b?#viL4@7=t1Ql=f^XL|$RdFF`-60{!JM!i9 zDK=!9{8MZyw`kMV;YE%S88DDGcYHDeh41BHaK$-;n+%Xsr8JrxeXx-rJM8(7UTQkg zeBk-z@WDTFH)ogA)n#?zAH;3Rn)>occr__7?XAOepqB4_;7rkxy?a0J?tgH_E%?Bk zXm1r&Y7Ltk^K|7VDp4egV2JoFpy#k3-k2#HKy2nm7by$o97dkA384VHFdebz!E34 zgSc%3DK&cC+?RLHpH}x?%83bY9^14vW5l%9`7NskMy=^rw!A2>9Q;0WN=|Ox`q0Qt zFIK$jEAm^AIiYrFT9se$L|e*mvc>|K&zecCQGiwM<7qH4A_*_zQ-muhNFK(E^xJA; zDZob{W28VH0=awww^WNv!e?^z0tFxo>|L<=QXswA?+|Jvlh2p{cdUjrFE z8w9|VzwJBVH|vlWG2qQLyJ|Tj{0m-R_7V_$P^=HdNPbkv2bFa?dFp)3Bp5kR-g|7| z_NkNmr+8k3a;ZpHuaIL@c=_Nrr z37cY*0KF2oFmzHY2;tZM+nF<;*RMJDgWYiCZciQkBUA3>iwilcOnXnGh zHw9gk4fC0w5TEzP)qPx~D%2N5MS)aXR8*+k)ZG{o8XA&f3ne^{C>-OJ=%z{qkrdn; zeJ7@ONoKr7M1(^mj5C@UOV&%bUl>>UAbmpXtf8sP)-StraptVnO}&zA2?2DzAHVWm z4Tu^?|7xqBpFhJqdVliD=O)Zdh#u10^2Un&zxU*WswXTw+Km-&sLtLr;aW%E1DlKR zlTG$C4Dszla*qI_pIoPtDbyTjG&>oFcQ{3)NHG!LXH1M7)7-OrO5)fF z>XoqMQsbqYvNO!}z{@o=wJ&ma;nMxn+s51Hu!&+I}3QHJfWy!E0a}<+|JP6rzWc^249%<*AY)gh&;g z5F+@44)dd=!ck}vKqIXo)MUiPhB0j~-Q9Zb5=a3d;GsW!7!j<27q9*E`9-fCOrysf zfHyY(@DC6NCTtureg-hWzyIF38>kx*S+PacQ415jd~x zqvdg9jZ=cktNrG|^RhGa(m>c!;^jPz9<-eH!5r}2oPmA&3Nl4}F*G0k^bQZTLWLYG zH&tm)bX?^d-*IiaT4h#(w!R~J@C%yf_nOPWonjhb@k~vYVDo(&VrQs!Zq;zUU)Zv zt~%22QPXW$|A8lrV6Xg8wA{YQb0_cdl~+@~_!%()=Ud!R?7d_O zh~m|cW~nZNjbId93?uHzVKDfI>df2Y7K1iOm84Zx$+)e;-Pc?h;tzbgm@0&q%PC)8 zq4S^+Zh|rSVjN{mYJ6{&^WJBRnNn%-CjoUZ4U!78^N0^=5U}{gx>YY6gnw?_-FHy^ z0M(HGw%Q!uhQQ@FHjFPZ^r_LFdh0N#JOZb}=DR=+qT#5M;>W;@BR7 zINJz2u0Iacd=b6*P?6^LFeCn9vVh%@}u_fO1!BWEKm|D82umi2e7gvh#&Ctlb zK?B*qkmK;LSGT<0!$;v4XwW5SrI~3Nx!tt7;C*x7ukpA4acbB8_t|xR_Swy+_>V>x zFj?>+oN;F3ilNm*LWc(X`>8ytf^t*)&x!9dqu=)ZApZ*<%y{)2Z2NU^_X<$9Y*D~4 zFum0I83DJrQ#fZ~l~D>6qfoPw3>)kCjI2arVB*!TtI=o=Abf1V@?SROM8J_|=G4^;9GkWi{yjA8qdf7ge?WfuDU| z^MrXb1H&*31B?iWFakbdL`A?Cni+#=D89`Hq8Sk)5|MB5iI2?8h=@qd%*-rPGc&K5 z+2fYitgI|EZ?{`rWw!sl_c`+d?cU%2|M}l8>cC;0wb$Nz?X}nAyXbJ@bZTvwR;SH(>x5oBI{$&< z?YF{tOWTQUjw7}t`--t43t5HsArqH7sQ;jn*%6kR55a3Y+R)*3)W+0D!D+>S1{J!{ zxI=n4a-MZR0p)qfg8VK+?Rg)6YF)d%pRi=G?hSu20Loiw-l9p3aew}Q97Zpv~W|CF@1 zibEG8e|sx$z8!Z4*=rfTx`9qU)c?g-G0HE&iiIg zY;2;p)y)Bi;3x1pd=uykKt)Z%nuVMNe(Bi`KdCitHWYmbKBLn;>)`h9Z*i8}3xTU* zuII8)Q^Oxcd}|)mZvXB!1{zB63uV8(E_Qg0@&)y)t_4LT%&{AxST%GTh zGfEvt0ytXAdmZw2_8~VRX9k6oH(F>KJCAe$Q&ZTnsBmZbw3R@0#6b^+KOJ6hYXp3L z13duNgDO~08{P*01}Asl`quLkzxh9&A!j?sdT>8wwDxb3wIAhDQ;dpN%6N^01x%YAtCT~YUp?|FiKjL!? zVyl$c(X8WiTkW>B@Q(vmnn!**|Mhe5=%<$V-uS$FX3L?x@=t5qPO}Z$KC$z<=H<)& zHh)xea=#bX{kgh%{jA9kR~2Nx}r6cz& zt)O>1Yuv7y7LBNjZaoc8w}G&(+VoZdXYt0tg5qL9F~iO=EAi)*WKS&V8iNv_my?gfi+2W|$#cDm(2WLMymu|nk_sq-wc-sNY3#hwm%x5gD=Zc7)F}p%!97D$_ zgm9VGtFG}Tjw5PJP-*P71-lD7Qb0OZYKws${k6k$4OHPad|c$M?}U5nEhHlc!4hzAM!{)Tk){mJo?A3^v<~Q7 z;Te&A{8b>xh0s({R+mZ?j4DVnL^PdbgTEx%NIw7hyz481#3YD{CTpXii=LMWC+2_A z^O*s9{+y`ip8^JSY=Rs0(OA#7dG)+?i)Wo*&kH?L`LQI{8-n{nxU`%e?JZ78hcG~^ zG!(d%fo6lySku|nkm0O&2jBjtekFLFm@hj)dLA-go@`r)HnU)^9K7{~Xs!tM3iCVZ zC8oi>1pzud0FcTUDbk)&U&S67W>>2z^M8B|nm;Yl)$<50Ig%>rSH>CDYNS8ZENL;= z#YT-wqX=xZzs))_QE8#WUK9-$e*-MZo<<8jg?|0H>}5+6Prdp(P`v?Lew*^_s97at zb-)7jO(loVhb64dgI_@pyal^NnS% zKEL7H`h6r(xadcme=vBcV7-BEU;;e1^?kVQ%hQ*Rf_axu;}&ao4xlyJB;tL=yU=Y! zucr#!dc9OZYo(!Rp1Srw#0M+d#j$9%>}G%LWDHC_N7HWuE8syj{GhG2>EMyqH?7!2 zPxkDjcTWB4tAE`ppeNJEwr_mwamtTB#g-ubG?>^yQ_$yayqWa-M)pRCNu$A~S{jpt zGMRJTrZE4K@waBr%!ti2qRq-O#;&c|$^7yL^^|qjHWq;S#fDk%_lF^z#}yo#zI}V` z_uG%01{+Ho#}yTooXj_ZLzls4AR^J26S_i^6n8(I!4#DpZ$Ay+-+66f&F{;XJzO=t zVj4W@jd5t%V%#-Tun{=D&8E+F+iW2e6@|m1A;x>gqcE48A)vjwHkKh7&6s0y+nCsw zyN8j}ko|IIVcYO6Pd6QYc8YWI%!d6>?|ts@@Rb|ur>AdQx{p;R#Vmbv*0VzgWRJ)k zJZkLbVe6NUttso{%*sz$oac=rr}GKuKAC`}reY%$_Mu1(vJnwTdJ%xN+}+1QoVYM_qV*c{KvIZS10rI@|E+aC-#0i`;(77dzOEiYOQmR ze{RxD=D;1;~Dxvb<>1ta^3bYb&8ym=em1!E;0Z| zK)AmY_WXkrC-^cfLTS5LEvpSk&NE1yIMD*fodbI(_#zK>#?J7&ZR?M4$egif^5iLf`rg;8Z9m&OeG9nObaknErFt7s zH?CYCx?KC|x#8d+FlNK`3hnaH&G6?9E7qeQfBr%5XlV4>F-$HRb3C3ktr*^kHz}1| zu3M=l@qxR~T6C8V>xRw%`-vbEQ~~?AaXHKGOCP_dtf{%K=I|e%9H<@IKDy?qX|p%k z=-T7i1<~=fi3tsrb2dh@sfYKxJ!EHMa`|NUh(>=M6Nz;d`943ytG%^IOhaZ+<^$#J zSLI~$1RIu?bBu(Ns#uA^Z^Qa-5l)7gc+v9(SbPTVsA&12xtz`OeB-%D+dY@izkU&N zV0Yj7m6fuElo{Kxz!1)2TnVKnxPK$*?kvPw$(#%3Y^IjPq8WSZIfr9J>6rV*E?hMw z#Tw~wjeo%Pz@yENFL{JHEE}-p=bNY8p^ft4FTMfjqYqdG`)dF$!9n97y^y6q#mKb^ z6~)O7fxVD*IHt(NJMdscE0bYPA5l+*l~r?f?BVr49Inu_F%N(pr+#G0?X8{?y1Bfl z12@S@Tr+UQM*8^eL!!)9lD;?*t`H#2MJKwPQK)#iA)tRXz>TX#@D6Zh5^bE^@_p+J z&yO=(eq{4tIyiIt5V!$xJDjd@II%W8f$X=@zBpzdwitcB&xdi>N`9W}eIEBoL!SwL zuD90?`dlK!qtWM^ydLRlGdhtIU13^EX11F!&J{ZMBaL#TsU>$oBouMZk=hY``Px`) zuj<2$x=&?^8z$>pz+cxF(cejCvHzw}z40?R-f!epHf;CIuoV|1*TNM7| zyKlhv+hHvDyXlt?UIWQ5@!-hqmp8m5WeWKf*I)uy|Ifz8W(DS5>^p>bA5Z4C9Nocj z4<{SW(+W4sZ7O|?nlqzaXD|oG9=ddLBLB=37`J=v?tl`NJ?fEWXL(y;Rv+n(&zE&- z?9_2vG*ZA3}OdQQ1Lll8G)BoV5g6 z9C3k+yKDe9I~;{WH-6aD)N-wDpgB?6_!<1sl)>h`emMQUfxmoNj#fwdvM1jL`pl(J z>|@0rLGMh$l}xIzh$Ka{D%8L`A{@DHT|}T1MBD-Kb`jjt%Hi*9U4-vw{%@hQG8c!fJ2wa!N38CH@w1oy!sjjtBZSXS|974Cya@A3?rmY6kc!Do%& zH*wAgzZq15OCM>A%}{h#8Dq43YHVt*JIWM`Id=N56?fs;dpio4K8L;Y<%w{gv)RY} zvzkPEgd+saX?A~p>uEfS7e4Y2V&@}d5c%$;p~J}_I&O{b>2N3*?=&x~`1g~`vMbPV z@~5ETEc|!_9u7LQ$0A+YkK|26VeL;z)wDL(P191fT9xZotEAz%Zt2~%zdx&+1V=M% zx)_NM89ts?S3med^FL0tzGj>Zo2@iEbn0~Dq$vv?pG?mP-@NjLGrP7vSO(6m_p}*i zWlfs!aM{?Act6*odu~0!g3)1AV3&al(Mgc?AdvuCrvio$v)}RxT#-oeqH9eMOJ)$r z54)rJ`<9NZ>D3coc>b$*TMrs*|2bu5*rX{H%O)ee6-`)rrs=^ldJ^JjZePsN{Ud}} zHR6eBCb4P@@s-I`vU`tk7x!7ndxVSLfW$7JvQO1$b>0%r8MZmaL!SXZ5MFw@g|RD67M17%)t4ao!Z=g zvGS*lht9DOqBEp<(yeU3v>!SLtEN3Ye(~JW9pe_#d*6Yt?7Mm_Ck&q}F#YR4z8SX` z{%cp=+D$U@%~|VtD^? zOdJ63Pp?Sip`IVm@84331 z&aE4tq^#$&<`144X|64O`VFM)_S5vNk`^%6XKVU!%W&N3ekurM@Xr5$@hawi;r^xF zaYU1km7$YAeyE#rIARlI$XJufViTxXgBC3gt(o%AMnE`I$TP7?Y@tBn1HAIJrOWJs zj775;`l>lTI$W{&tNJy@*4P~lLo)jHd#rn_VRO+7%WNfHj4ZCWcHh#mSJpqCHKXI| zi%%QYhMi*~%VIY!zPu9-$3R(VjG11nLh!XvyC(01`w-9zn#875TD;mQiP#g`c<)Zg zzShwGIF+|ObQ1tVd+6%7)4-=Tn8?;G?z3P#ZW4V8lpJubcJAH1(LS(hLqx(_0i!|e zIf>5eab8=5U|jLkaNpQx%1{0&X{UE8K|Mh&IK1_xi5Zrt|*PADS zlapHtrp*jH;b-@mrqY>$f&gcb`drZa2v*^u%^An*k^HauY)~gzf7gWd*N+k+On-sr zI%rK7%vTXpKrLblpnJ%ho$nzuvKREk#$&~^gJM)VqeZ1PFlM9Nk41@hsFO5AZlDla!=4Q#P|L-_4uZv~K!t z`R-7??k<2iqKXuo|Hy%uS|Z%nDSuX&&myFSc_X_0a>m47d5=Hy@|%m^{9*lq9k$ec z3*S4x4}=_edBzxLamHiEYaU-RXQ?&4JwvvC{g-PV;!+Z=YsTID;x#x8{%!4q`^HT4 z+=Sp?)SaRgG4WU7__tqrb;as`-=T(txBmfNKeM$7=YFC)(q)p%WpXLQI0d7U0F~Z= zTa;oOj6jAlPMsCtuAaC`U(AI>+U@$|t+^peklm+wkV!UgM|t0tVer>4Thm$i3$mvk zUiUos4V?Ate|zUbh+V>Ph3EEJ&<4i}cmZe~RUtjB6*?7$@)ADZt&ph9`EH3yqLQ&L zR#zbSnK6#RS+eMnRK1C9By5|BuTungFc4wC3cd#4hgWXEGclmofVKf(feo(7TKCD9 zp2S5Tf4OGu25{xaKiJY8zyyET0lzx{LFvT!jA8ovhIKD3zDA@3uMIu1n25;;Mj`O6wtYg^xSH6 zCJ}xkcm-J8tT!3 zwdAcd@R*YEYqN;!K!IId!_^LZ3#VQ=f)~He?L>auA_C{;)$kk zHe%2dBwOIXt>N_EZQFOu=vV!{P$P@f3v-b84b=E1%SzQ!oPDU^X}KX(p%T0M3h%># zWbD}zUa7;iZuG4qErli1cFrq-m)q#t`ba}T1)GO#r(a41LuM#dWsJRH9!=0;oJi{1z>BBJU@Km^qq4`;FWe@>zLX0V{0i= zKgx#GBSbJapw{~(9Ct7k6vDlDF4_?{Iby*pVIZ9*|QiNXoL)b}Gk`vxR8|fLFeTtP zSv!qrt?nUqyH()VD(8%P6K5Lgwjh4P)RaMDMOL5cf9F@IXyXaD^N#nP^7w=+dS;gq zt{Pp|SDo6DqI#gLeEVG4_yzqB&tcdO-cNr;pQi=r5bHpG$d4iQBhFy}@u z(>C0ESX_(2vZe!=2kjSQ1}DO5F?VP6e*%QwYUE3%Nr=?vROfqzelqWoL@^}vO`znL zmt)CKYl8g*!IL%1W4~fFIw!JSF`){(*%T>@9O|~oNMVDFS4vd+2nrb@N_(zbsR|m5 z_Z0JvCc|sC34;M$CjvN6_UHwFCrg>;ztu6jjd11S3VrJHJyq_~@*Q*JB@bo2isqv? znvXdTbQf3lWIQL@rCZUIjGI4_Oi2Z7CsP9M9D>EHgFj0ZP*YsJv-{+`v$F^G>^U^w zoxrdxQ{e8&_GAaD2d3w{2gaDA3*2Uv-l|X0Gcrc6wi}UxDsZb=ZxC4h@q-g5obbm> zOeun~9dM%#PW8yhj86f$E}nSs4Mdv@S@R_N!*W7WD9I7UKUM)Tdz5C3fe9h)#~cN* zkBrSJ9GL5f?;dBi_8&EW8BQR9m*Bal7uNNgGp8V@xZBLREpOLuJaY5JSMCP~{#?Ch zBhD6Cpc^)$mw9|iSs$xvzBF}q*fWobi6v*hjR_(q$TM_kAL>F}GG$(f+>Dku zS{ib-Uu20`U>G|!#VajrM4U(zVgo_|HZz`}2M`~47b)Rui|9%W5)<0f*awTF2aUkq zK6q(iM#JKs4^|E=ES`~(;)sig8I(PKQeDjhWm8VPwSHpXe#K40dlvUBDc#mmy?V&} zl|!2rC6bqt|O_R|DFbY?orymBY^o||;2~hkxyq?ZXV!HrF!4Gc#2&^6U zF{duG`{DH)Nj*vP<4Da92z+T$w(l9KaJ8tKI5tDKg;vDAg1A4;h z@6h$&=`-0=_Pq(lK3pVn>Nrh#>xH=~I6o2h_R~nfWG+$6RSoKCDDZ^un6%KB zVlrDJ`VYMDgCgE5)XP5S&Z-ICt6D;paHm8JeZ6!BJ5EjV=<)a2al*aiP94|Er&1=W z2i3~gz^0uWFaq9MSH>a%GAniS1S1n+u0P2wYD zi-u|A$n_6j_l)E_8Cs3n!E>!o!_Q8H6=d|wqW8c1EJ%FQF(3W&&|991&K&8|_vS8K z)N^9$Kv6r`XGzI-7s)}+Rn zrY4{!XifOesgu$mTkU>okjrM!$7VSqtP*7pIZbPndA)k{%6E_K z!4B-_=$G$~adf(!BTb8D3jOhMnzm0L(x+8oConn^dj>(#;q;Qs3~vP&8YmM(F7EW* zF7BBmWUEd0C(a1BeSVrrHF{Cm#6DBZb!lG>m_2LmKzQX(%>skUW+~~D)3~c~Y_NERF@TT|$894s-&`&)fUP5uomZ0`j7t+Lzvm-RfA-LXoE( ze~*ZoC$e^kMbu%;&bqRxPrP(==@)AUPfT!)9OPbc|LlimR+Uywduqb+{0Rx&YO_{s zsQ(#g&7oD*gT^P8MblV?EDUb|^k&lT{e zr|WA93paw;*DfS4H^v^?e;qdM<)3||Pn3B<<$Qah{nNbin1UWXB2*z!27CMvO4JEx zt??b`49KO1xMHjc5=POtZ%hIwlPO#w385(oDfw=F0_)0%$;fv{#&lU~A4i-OkTyt< zYwRRY0lUL45xz42Uwer7k?dk?#9Mh$=A#9cWS&0%e{>k}9lEyZ=zncG=={IBj*wi4 z?}*z&g;Mbt`yf^y!Kl>e2FJ_gp;2LKmEE8c-AJFHwQ@EsO(P@^7=lKx0C#sUv6tz^ zXkdBPh+}zCiR^)Udz-jDa)mGs!>yA4=6b@uJfV-QP`^l-r6KulDT@)hL2zEJ4(V>S z&n?c1OPZlWr+;qkp$}7Krulqz9h= zow;tQ8t8M~AT0Qu!LE4kJ3-^rw?EztsAl4YFF!Q1Zt?V@HRzR}T{v>T;_gX<^4OaXrdk(Ibi`y0 zpb?$L>{WIKcOJ>)j7^MvaFoSrGQ`HjCB{`!fUaggXJ+v!h(G!MP)3Ega|WPm5knf8Ep+w3tnNv6 zy~gy&&)lItS>0kRCMmDh^z2bENWj`^LUgJT9TlR(qHC%^2T@4(>MyLmsw)=EPlySh z*e8cOfHg`|4|Ax}8kUENNT~#POmd8Cq?9D1FM}G4wD5z}9BQhoSBPFsNtmq6AUO>18qI1g2+FR8mr$b6i_l|XN?*)%gGpJMl~ZNy<|1QMM5Lq?ZrRT zCyZ(SFZ_RkR6(%fh^}VD55iFnf)&p*rP`XhE8*MG>!G;WyUHf<)EiT_G!dm_+!i(o@l zxYxQ$rPOc{BvD<%D7F49^-ghW0@)_sdwLjSzO$TpXdf_P&AE~)>o!P_dajrbN8(CNd&uFxop>9g6 zRp|LJobaU3Qwj^Z7>C`JC12>=8zPBjyb+S%ERX9zYJs;ZAD<73{`DT*#u_(lwrosq z;j8C`&6xezsyUps&htSyyxjUe7%;w!ezor3x4$yX?OQf}(G(IOp}qAe$Tl(Kdz@6u z8E|DW`Y$9@r6_Q#RG}f-P;-GhlnG`PJFf^PuyBbEGpISE#KB`nF3_Q)80}P1gcm>g z@(xu{J7!TsLsctCSJjv146Z3?T)F;P?%VO61cEC)SHb! zOEAN}#*>6&U-L^kTv58!wJTKUKso1OeowzG_kpCAZzvyj;U4}9(v4v*Igs#L3G4Tclg^{W zD{lwPvFtsQJr~iI2ASMJkO=$Ux{9&uguF>+H`gH0;917Nf}w6!6+nZO4*xAik(dQAH}+~yj&sAcQXn_h*TRw``yR^p)aw&3Td9EV<$&@ zF3thDHh8$9ZF!@$aW!{vJ7hO|7L!i(n7$J6hhxx$zLI9>p>7$&aFl_Q=DImmXZlV; z*W1OV-^?cSmg#gKE1XvVRA%_wOmM9le7z2~SCjN%Qb#G&I9hP#jf_<&r~tiLXLu|~y190j7ACNH>)?Lf+%r#{fhXIAT1Qw%Y8?$!g3CxTI$kZ~4Y<}(YtV+o zka7}V!OmUE9*GXWd+B4`p^9flmENQL@ucT_Q0*&$#Ch(pLCkY^xnjgT_lSu8k*fX% zXUzYQ;vTpj|BngoUhs_nTY~$@oOyc+p5FGqX1IrWZh`5FFWw|c?sx9oxdroZ&8IdV zyi0nfG=V83hob}L;oNuh{qMx@t9|u!DMa_ixU>pBl#wcBj8x0Sa1>h8e#?MNP@H#K zgpx?+*wgcOkLeG4HQ{LD7W(b;9vi6{3$BesYqXxVqcuw25sL0M3QDO`82A_|gKk!a z;CBSgK2BLb>G=Yf_m=M}94Vx&&qL?(Raolz6TL@BUH?Ot5Ty%Hq<}ye*1$s5lYtVl>7RYE-DDd^f^S5=w zq$^l z;nU|_0*MbNxb(D|ldB|BY|BZdoCb%7eLX1yy1v@%1RG7ra=?uw@Nnga;TP@It=Bi& zHYBt<-m)Dnq>r5Q)Y0c_J$u<{O@|IO!4>qoo_cT3KV(ycVGn{vp;t=6s4#Q_P?VBJ zGpg2;v36=TtMfLT$N(4ji``Pa_`_6Pjj zTeHudBDG#Nmqtb_8CD|4HM=+^#TV?&)&x}V;<7_L(4!}yb4x4G!^1Xkvxz=-!4pN+ zsdbCEP$};jC1AZH`bv&wBytMZQ^;i)wkeptud)Kag5^(oJ_j|&;I@k9Q*e)!X30YJ zT)>NzIk+CJQcA4FuOM}raV|ZvzLi|4oRQsS$C1QRVaxeY51j18UFFY=dXBUXCDGE2 z^({My((}gc=L%;v+H)%j&LVmbPzp5;$dEEfW8|FZI}Uu0Q10M+nYZNO{l@aP!j*w# z4;@4B&J#-?fDg|BpSe02vMFRTULj#fPRlnzf=+@00es`hQO~q-@&Kf@}2NfVJ_t)?+_z7saSOvinF=d_h9{pX%?clV;KIjto%<%Q{!ThBoC>6Rav z0rV{0ocEtR15do0u&sumhufVSj5ISIM2Fl96_Bx-20~Tn{!;o!ASf zVdT5zYGY)++sLZz`EGSUTbUDyLf3l|sgU@p!5qOzD}FzoFFY53vdUE+-P6N0sKE8W z=#@SC6!*Ffzkdsi`?#{Y?}SND!;UpaTe?S%TXcHq$~Dlod{>|T*$am-DOcgr8DSAm zo71{$6d(nJAqD)x^^}bXM_|jhAAQF*oj(kQ?|-}Fi}9fNZ?mTFfVWp4@y29Mu``ez zAwwE}fXim5Qj~0HLIT=K2??PFc`BNLP(wtn+n^4$q3b|c;8^`Bt>h5JGe9a%b%DP4 zAk!gU!1W{-1VK9V^@$6|jVSx7wydP|=x1yG*i|+2Z$j0yK!C*Xv9>|zItob|xD-?M6Z%k+&cgG02Z zDu1Faw+}!Q_<OT*r;)B5v7tzNEsgwZ~$r1}P1Oz)<;%kVPiBYk@ zwPT*uau5>@uN1Tmhc}{uL5h*F=$|^K+qc18pmbXz(}?Wpt0M0@oB^l9M~d7mRfZ^s zx;b1t6;#V5490hb3mVcIK$#&N-ZK1m^Ka|@LpxLr8^OG4baIlxfjdoTy`3lLC0cL1 zQW_$^t99DPXPq*@j>d-p^_bc{<-5m}T!5Ct^jP?xwlm<3!=8)6VOi^`VWf1s=Pd2? z6yW##iq6Yya$chMP&_SRRkQ(LRC3)aL-2dZp-$TC4@c7Jv<^-IJG|zquz%|L0c1Q5mp+7{W8}PGx~LSaA`r&HSHCCVHHfG~=%w7* za)M`JgtM&7H#Lbl zM6tY5hlHckF-9c=VwiB;ptWmF6u?HyU12$#Y`2Rnp)1RNA}d(`|Jkk3-8shRSZF<$mNL%8-M<4 zo@iIqJ)V7P{j&H1FhrDxh)WWIbfXEF&|9=Ror2>ig_g&ut|mn=LWv1oZc?zjNh=o2 zB3`03ez~B(y?`YfC+9R|!2`<5*2VG%rWPz8`e2iQTGCew&jJT9ruIX-<4lik!}35e z+#i}w;7hQ4kiJPp^0838T;b>*V3cw^ZwU(vwQxo(sZfOl8JdBWltEk(Q5i8Kx=e3X zCGJAzmsLY{&43T@Bc+v=Wa*r`%$oG2>s14hur3uRu4jQAUM~O(DsYYE>c`h4!#_Ko zT#;A;dJ6YIwvPB6tS%L$qv_CmWGm_Pj8sRiL_wxev_|hgDR`m1^Pzt{2lAAQ+bZQ_ zOWiFi$kmo9DTY5d`+CmN&K}+K^R1~KCvl01KCuf(7UB4PDxF-1c9c#hSEwkVnmE8r z6b>icy+-Gx`9Of`&(ZSO_DPbl<;S-BZ7QjIUuoTXV;^82pS0o6FJ_@(KeQxmX35&e z`_F(kggQN5jcl%Nl#|MEneBEHtF%y-d^b97Oe~v#)Cg)gK;F(8CiN6Zdv^b>)(@v<^gDCOKH%xJc#sJAY}d4j-HW1KgGSOc z{Nn$;knWImw>jmYEk>d!Y9|H+SiX_uDsb?Ij^5ftfNFa9?wrA zm4R$UE5pQw7!qV?T2f@P*bsY6NK(E#gtf)SMijVXbv}hJg7pUuM<-50zkAIWUcNYM z2~AnROx2Rf2p6a8ESv~mA1F@Oiw_jE4u9`6G-1rOz_}_FW<;2=m;W|doUxv}$zC+l?G!l;Tm>RfF3S1SR87|rjyVd*( z{x;Gdr1R|(P(Dnu;n)7$4KJM7GOz04O;?t@v3Ew1=!7d$!C!v83ZFZI?v-1BW&i6Z ztm3_r_~i&Mkp`MJ3`M#!oQhC|8)T|nx6FK(bIu8Z?~{J_F>%(xu;#r>Z|+_)zI$=j zz7JL}9$hd=@Y%tL@JokI!P9N{8VPKFta;7^Q;749_=}ICb3c_}F~+*|Y>ZKgu8mBH z7G1po`Z9#zGcM7ed*SsF+Jf=axK#LK>+h#;wtz5L8w{(45ex+bsWYycm@8aQa4&=& zOEDH{uG=DjrW@1-bmVLO*J}}MU+|UO69psZ*{jW`TJDL2(TL-TcZI_c)<^|8!(v=o z5qU|2p_d5EYS03~etcm$n1Rnn1ZWDJ*|@N};p5A_D*_!w@SDN#T}Y+wN&gDSXouIy za_cqtCj3M^&(NB{ek1a3pvArxJ!4Sm4I~T3-09uKY2=%MjLbmS(Ut7WCo40b_S>*0v$T!dFZKv) z{(kwG)`wQ5*dpW`K5JM@%rb1l{(5=#?L&ws>32(V53Q~5J`SV{@db=kNSTn#b#gk4 z(J7^jgwknZbjUK(iIULxF+o)Ra{Mhg&%>~0Q8<_sU%T-bT>%sb>8iQj%x1U?cwYJVW-n0>BS>%-4O9*U<1LIA$){V62_#FtHNSr ztjVOyb(;(U7YL9l&P_6)R#? z)(Cx6y%?1uzF0k}y&Wvn-WHNd`oJDZgia#C42})La7N25rgPt>Qc}k~Sg5)82sQV; zdigNRh2E}&$0xnN!xxd-@D?9-WDDWBo5*v8a1Mrs2JxIkc+L}e{-YD_xq!#PvB*Zk zSpG=k>XG%T*N5;t+V4CYf)2%yyPz^l(y?x(aCa55Dr0TVi~#_d0%=sHJ(|V+3T|Bb zsPcnH{|z*!;pU6)eFYAKi!=E*VA(0qZSXAkG;CeMrI+qXi-#Y>+a5R)-r4)i?Qi;+ zqu%}cb|DD;b=&jBQ-xZ$JJ%Up18JgSFn^(ux$e+V2}NlM5=Ho5BT*2}L}Wh1GJ`g< z05M0ihtF;P_lB+8!6=YsW0yTTY*pcu#=bKS_6WK9Yd%|Y>F81T{L%V{U;UtP#p)jM zjXh#ItZzNLcz${=!TrQC!}Cl(A&hKU%xf(ECorw|-Ql z*SD`G0B>B4=oOQDZ;A`;PD)?krYMOi!e}z0iwz?QDR4^y0LO*GULj2DMXnVAK}2va z;;OJ8`*;=n?cl^W2EKCe(1rD@pN^nu&l}N<#lkq*qs?po{%~^ao*6GcwXkA2_-^}3 zWEU)gdS)fL-yuHqRCpMr9f~;iU21=KHK;7zZ-IQ6kRy9cKrg-v98)@k8(TtLtZ>vFpjz@>^rU2 zx9>WssH@NQ+?6khR(&K6k$;1s~_$HO&>0x%o((n-XDe z!oz)c1A?JI=B7lLo2^~uM#S=t^U^_M94zvckPx_s1X>row5VB6c9|QIR)vqJ5~|^z zw7L=e2Z67WSGvwK!Nw(geIoL;TBOyzd!W1st`?Ek?*W)D0ki~LkL1wEaBejpBcm~H ztP~kV(f|uv$o&y4e0Elp=ge>07wj(F1JL2Q^>z)392^wvIg;-~Xh~xLi!3^!J+~o{ zmXPCvsrCDj=B?|vD0pSXeZh|Pz0p{|_Iq@mZZW)Tm=FTZq!&kyfHS-0I{Ml8z z1wVf!@$-jczqmR~Yt%CsMZ3VQ(sJ?wHy6N;-`yX?NPy$Ne&qnm{7E_SJ<|{y5yhP% z02|=NCFP=6y2JqvB0hMc?-3u~I6$~O*BvfkA9Up-C>#*P5x4-GkAp9MX(fSyK5ru7 z%r6tUiY(|9A(#j+RV@^_BJvP$uPF`A?_fBJ#Mx9zxm3!9$Qjz7-=Xc}6k75TPH^KO zoQ**EK?mLuKph~%H^J-CK=T6;0W<@pjXvTTjE7Gj*+!R=@$cG($1h;_3GWR-gO_V4 z%~0I=PsPzHrOI%Zyb_)7eKwuI!6HCi5JtTiux9w{H!W{tQMAAgdJ&Qe8Zk_+hEgm7 z@F%giaE)N2A7`1B<6bTjj**}}A_>A-)?wocUk;)L++Lfr6!ZpR`x{!(mFO58M1Q^S z)enGeC#bskJ3aqa0e#@<^*4R??{R{UGnBk@8nSH$6B`2~U6^=PM1)k0QB71TshTmy zNMrKdtkhp26zI*ywOyPe+i@z7;owY~xF2eB)kX!}um z|ERqwGd%|veQ{;h^m$wKOd$+=`*3T^>(BiRLg@Lo4@5ggj`LGH#7?7h(&_mtwy*ka>!b|{abM)e(`7azAT5+-V#nbP$*FVIMESf$qst~A!iOdT6tS4V{Dd{vDmY zPJ%^Xl+df?| zY1aM+hW_o(m)|>faM@B#_Z{WC!Ia^N=U2bn_~6v+%&O(>o0~pNV0CNeM@>8C`5v#0 zCfLA~kQe~sQE#!U1bjxd)WXMDjJa-$IxuOl3y(lxLTAqcj=z%W4KAv2ZtIBEF>%bq z2fNC15||N|wAFJ9R6g}WM4_v*Fdq_qmUpi4M+BS&h>bPmyJH#78ez?MheqfE z!m4Bi_&qGXtw@5XoqU+|#qidt<*#IP=QR z)dL%ttS(+nK=9XYvV~L+tji@5OZV=ETz7XB9TQ@)#2`_2g59CR*5VV-n4hUEdSpI2V@Vmc(sh56w zGv}e_?r(uVJ@v*bM?Xo08|WLAH{i{c$Trpj9<={Dwkaj1J7+{+-1-2j!;K_@L9_y`0rZ7j*IvYI?{H*T>JHGw+mtCOyiTN!Bt`$v} zp=Z-75aWW!=NK z)^_$BAgdx%YIpWEQfW1($$Pc~0WKJoJQR}6=7>QYB#Ub46g@w(|XiK+17 zeX%K|2P=BFL=s{!=?%zsG^j%8KsbGW^sDQh6Vg3+&`Q?CK)fcNe`Gt_VDOxUkz3*U z#i0Qk>Zy@UtI&puUccURcCauHm57HXv^Gee>3FS1qb+c2G**T|h84qF!wcNjyZ8R- zCCq}qp|r$r%!rWfq`xibgKWHIZ;lxMK*Q)Ko^M=pDC*U}f4OzV+=KVM_34K{UO73t zicNmwo4nkI2RWOTEPQnJuI&#m%ZP6p{m$Nff7kFaJG?#OF(x+d5l>=3l_UlfO(nWa z(VBdBG@}Ce1`vj9vM?R5C~)&J!Eu;GAr#~@yRp^XH74}KT36(}(p-B|<_L3mD=@*D zF0r9Y@M7&;WPX=7+$}(a<3p7sK9qoYbD;I?P^l=K8xEyi*A0N0hb&Uci1>(cBs zS?2kZ2X^b}#Miic$Bobp%6oaaJD5852YbFCy}5`#SSt0%M>N4CH)5b3b?O;68s?E zR)Xl6MTibh=oAZhlV(E2W()99b*A$$xFXPTIPO6Q_fNYi@RN|xiJv$hompUx=(k8s z4ZPD6TEw3s@HDGR@LM>Yet*hJxGPAeWo(<6C%G#~re*AApHJQ_x$O1HgGn4K`1S+( zyAgjpzgqOiqi5Ko0#0sxymt(k4p$^O?~4(vV{eE)wup#MzI`r=ukq4C&mEuyFPq={ z;^iwYfL`Oh=^@_y^cwF?k5fofeDv1;1-Sme{YHpPMsvhM`t`WR-j`r1nqYjcgY(U1LOZrsCYMk z&p$to?9XoEKE8gp{-1=_Kgs^g6Q64kJUECRo_}x8Te64Oiu*lR(7)ck znBtmv*Nan5o?RsD_YcW__d5A~eOVP`og@isfcZ_BUzsfMjHH{%I{BCQ%v#}0lF5AQ zL<@J37%-uO*C8`ah@YYFW6bS%jJZv|KT^cR+C}0bA|@6nN1VqziQ_XosD zE_-7#=-g=)#%;3&tV7(FdbJpj!RxtMSkGRSB+~hYteZ4peQ}lIe)k^2{&&ZG4=&k znB+ruX1L_Z$rKgGcr_02u1mx>-%R2>gG5`&D9pDv1Sjy!K zHDtf_7RNhB&3NvX>4Tmzd`fphpBct3^6^TxW!Fc~^vwPKuAt zc z83h%Devj#(c|T6pLw}L}@Sy%ozU)?0qkiNo(i)81cQUz3)ZOq;y#i0-Y2e zo$-{hbG%=S17GsRZpUvSRJ@>ygwF~j+YSL!u@cvDt%NS(AIJn3nMQgM#ZXf0(#Ggd z*aeblXEI~J#a+9^XCyQ3_KYM{cn0^l5T4QUOfT}jRM?Z=f9ImwLFL@}`OZSMgvz1f zsMX}1Rm?G3ithJ3CEHIi43&Kr5p-neoV28tpWIfnp*M3Z>;h22=Xa3jtI_jH^t=Q; z&*9=;3^74)d9;}{EA6(XsP>5=+`+K%cj`g+Gn9xs@Fz&5ZlHHa_pua}f?k2KdC+eF zyR`hN+9e}z7=QW=M16+nUuBMgHjy8O7x)2cqdlI<1UuA=2k121LHNtJUr~3$NDKz? z&s34;L#U7gl!TF^-*FPWMPU>+;V6q{I<{?fl8)_82OT}JZQFQ) z?%1|%+qUiGiEaDloVULFm+OQgP?CBR>L7DQD#(bb4roqd^o3846_xF}a^g=_-`%RkA2bSROTM zUWC*=1@cGtCXC2O`1N>ugFSHvj`vp+T+t;NNKstBs9sD1eOzLV7reKq5D_}JCF27NNu1WH4Zk8P?kL= zIr_WYv+;Pg9qX1wR91dHZAY7r&$=QuXU33L4e$-McYEw1( z_>3*rNCP$SCa&sfTBE+q7tuM$2q2a$(>FCdB1r7fwi5p0fZO2aLE+y!>5*LeJfTKj zIlrK~?mb*nafIolvyQR1EiIotC9Ei_My1^z%{M~AV}F_^Jhqi-DXQ|503T7WZnINX z>YyfZeiLQT0pobx%6xf`a9j2sN0Y>?dHCzy$E;u;6Ra()ph^Ii$FY>3>g!^iTX!gT zXBq7&K%b05r}Hd$T@5IVIlnCG);qX4gvwYgk(Ni+IAH-tqsq`?2c8t}uSb3$iNb&b zfq~zV>22^h`JPZnqnhEs3R=^BW=?`fMFhU;YtwT1dM}A9`<{+7-?U*&F%f{?y67N~ zx{Xe{ou7tbrYkDmpzY8XBf!ajIpYzC-H2WQT@UfGR<6aXYHjtTH4+mIGxfMu*EuD! z44&x_{MN=y;c33zO{`s78AHPupq+?tOdqq&et8?Q$mdiA{wViY6ze_BkPD$?CUapE zgE~oG=P}(jG@hFJI9HiGD<3~oA6rg@_)?(cb-e($$H(FXK8hbJMc>KeU&IJuPbamI zi+eQd{-qV^Edw7KnYR!_8xVPYtPRdGN?K;MrkKK{fzyFJnrjGQ53%z@)hekf|0|5} zvh!7c{{C1r>&Is*B;#%MeA%06ll{ts5t5gtJ!%J`ao0YAQUJ2<)B=xaGW_{fC>$i* z$mJ*!3obKN#lNa0U+Xp+?tbx4$Zxjnmn9b;J5x-CGOLfFXVpvl%D@VF#E72kzHtFb zn+Z?cjKff|ol|RelR|$3VPQyUw5vxM4hE9ijlmx{?Nqg&;ix6><%*t3iP)8%)ww1s z0}+0;WUu>^TgF*@9C zH0p0gedD!j6bG?dZw8T>5$TUMJ?%c12`=V=k4K|N@#d8Qr^J~apbw%)(nuiHVN>w5BbQ4Nd?s(sR_(Ew&v}WIz3K0VwZ+23R8u72y z@DQBucU-6S(iFFYA(-q@y31@oEW5oDrdFtnfemXpDQUMa&52>n) zO=@NL#1H7hBbdp(5#oC&;pOEWL@|nL4OAuzQ3d)#d2_z4uYH6OG0Ct3=L3Vm!Ar}1FzPu{@1*bJtZSmEUdC)`ei$}P&Quem629CV%qS$7_o|Gq#_=47X_~BzaP5z>Dvk_xDgrRt=e^L3|JKP6TM=uCVshhudVG z5&G!q$z%~im@cL${tAGs41<6t16fFoFumkfd^vmD7<2is-6WsKCzL!r{!LOKxNjud zkJ2vP($;-v^HhC^suz*t=;zCs=el{EzQ8|Xxl5icKLe0 zw1u^m&1(8lMDL(mrU&M--bF~TurarJ;C>VP?Bd}EL% zjdfxRLsO57@R39NnfyCVP}r}9L&J;HH-UF@u_3@Dd7S#JOqSZs4Ijxe)6zNntH2mt zJxGSi_>fVjUQ4l7cCpJybewx)MPUm!(h{5TJ;f{PUFx@#;5fnyD2|X9E%i;q4|~hj zA`mbTP{hzs`%s%)ZN~FHvF%gCnNHrnzwPabPAvFCZ!3Sd+UMIxw|>0oKl#efeDbYJ z#rZ(}>}fn2mD2bDj+{`~X{hmr7!6zN=tPtl+6u|jyt%(*X)++c*0?B-(aH6xrVP3~ zq>n$PyIC3H1Bi+K8sot=!Phdh?pHNcaNEp29IB*&X$@A$;a28Nk8js6%o74Rx={z+ z2FYF{iwTOgi85}FKu<9M{+j+~9KyioofRF8b&$akaY8k^@QyG1uHhZ?i}hsSjIT(0 z9WFY`uTcuLNvDu$R_||^MUYexSl&Cg39NCe-ApB52p3`P0tc=-mx)ZS zI$isln+f=ZRnvc@*2cI)(mJ3N&}ygzc)9r;(Ncc;~b02 zwJNxMBSkI{$V#1P`_*bpR-`%AvZOB#$3)|P7@0>OWttj}`mZ%ztSff5n)Nj%D&y+_ zOO4X(7t2#DlNKtpU5t(vK8XF^PWQL%tPbP;GS(pY9_FU?xlt! z^eZ4uiNk#pqL_60L53srOYSc{Nw<`q97gsGh!QJ0`uaK+W4Rr;ZpJxSBK&s>SUD%W zL}P*oRX+<0+*eetAvOBe7}NfYwN?heIrEb+)r;64?>zbSBmuG$otiyptbLbSvNaqU z#VUA`P%*g1M+l7{DB{t`)GqIhX`4c+!qKQoUJV{+SYiuTv z`0qQgmr4U708N7kj?cV7t3Ns>hhm9)lFBA6y&0ra$a#!`^D!dJ{EUNhj)=sWMOl37e@`E{%EZR^ z&(afV!F)dybCQS*Xu`qkQ)}^jJxRBm`34Twia*rV_lNs+P{2E33_D+h$PaD8#;g!? z^p`J+>w?I|(@)ps6g%~60l19tz6MV6%Nf-{(#Emi4cQH|wdc7@kI(1gU8}dc+cnvQ zJr&)RI5)Q*c>H@$lK1&ry|)^MMfdpgw3N15c85=@TnJj}lv8y9A3faJ1zU1_&h&9| zh3iRpGk2^icPw;U9$ly%(ohOEapjceXj2iN%O}_H0B_=%uM;EaqP4do1}n~lv%{YD z9U@o&dTrWhJIn25jN#=cr`NpF%X6_nmBXE*;Lb5UA3yV1p{mR@IW7n3Mw)Px!|()8 zS(Id=A$m}Dl$xk~YKRueY@HcFOI(8VakO`;sUTi^YxG1fu@B2qTd=XF8 zW26$=8FnHeO=9L+kDidrgL*4UQ3@~&4KNvrzr{*zcU37h5&Bi7COq{ z$L>RmjcJti`(PU3sbO`$a2{r7d$pMJyTVmmko|&;4!4s46-jJIFAW<^a7kfwoZQ(0 zUbzq!!jlRfT<896E-`w&f^Sutf^aXk${^1_GaUss;l!liKO}u=MZPJ~Gu@ZNBfYbS zkl;b_pw82Xg&5t@&@6ij;CKJ>iay zOZPY9x^R+QW;#D1{O<~u6dxP_EM<%&CC$8Lg99uGn922M@C}=_7}>t>$q}_Cy|KSU zZ(W`#dhDQY4cTd=E^Tuq-XY)VG>2Ss6gj_usG)(-iOqD88h2?AQ&koHJ>?!tQP{@* z9&M+uQBjw{mf*~a*g~zXcH8|S;x*}~cXs1lCuVht!N^W&pr@q83~NxG!)%Zy`ZZ9U zR;<%n%V6C|1t-8NbcrGkt>cz_XI7SoH`Y*wS%uzUZu zh=;aaHJm_#{zVBqQjh9Gnlj*w$yqCXC`Nc>B zNqK<0>2yw%f}Roy1in|Vei%gI>dMdI#->VxmAMML{$nfa09zL!bLe@E&J#VKBZDsI zV;Ei*oA`NS-z6Lb6&eb&R3osHvtQzHkQ4?dqmX}Vq?!l7A=rchf`1VvDe$O7cgS#G z6Ml3ey;_0}Jy#eWlovNw++A1LAW30yj2M}_lp3pGup^zA@G$!yWr%CBlMpoZiL8!{ zo!PAh?k8m`H=lsrEct6@B;R65e~ZAF&6gJIwk3vylf`Nb7Vg!UUr7_)8BWz5<^(+T z;)(!efcpp(?dgI%wj{*DeWSRr=-(B3tSqyA{F&L9*oLssVdCrf$@m=1 zAOtZQo&3p zKBrgch}45W-X|4mWd&71py^`w+p&y-iDq}>sYF{hh~?8!1?+DVUw@8B4GyfdR@$vt zdFQP&g(HOAV|L+P;SY#U;x`LSTd^}FqZ20H(HX;a<=te{(scD|#rrbX)wIXPw2Ml(|`eWMbZ5k%DURXA>#E= zRYN#wgqa$Nne65FoXuB@2>)y9Ei11!d4E|Q91Znsw0Z!;SMkKO(a~PhaYqJwRBBwR z+|)Xv{AXbu&bWVmo(C6P$meG|Y4C&1{8SnX4p1kVPnRIJgq`K_&u1h&&XyP{kKkVN zEwM8#cuSmkBs!#wDLJ}E?;lIvHyZW08Kd~)tMn)Vw~IfCOpU;Zi>;@%qZjL5pFHIA z8}JrLQ*Mr{d(uGjKhU{Mdc2pJmd_z7mljUwv^taVz0GrXm-@hsE}?gG4Hk{V@u1o@ z-CwYt5R%1;&PUF#2=P2Sr>7xva;x8s4I%E22C9z)k*w<0nyl*t+cUJA5IaEFe$I$B zGb7i|%1Ih5hQg-(l-LwFw0aBUzCWB-4ie_qm^!_U@-yGf_O`x<^D3&k26lvVGg*1P zFN38f!5r}?YN z;|1@og|B@hF=uEZb0V~mlc5rw`K=&OQ#%^{ll$n0b9{_X*rZzK=irQc)#0R|T1;kQ zv}$Vk$i&F_R9alp#4w?8q{B_intcc^>@BfQwe?mxF13`&PzqdJEgoF#$|qoIOt$Xe zFvtDdB|LZ&;72Y_Y4>1sKJ?uW5OTP5_Yh_OpI#@Jz6l;%n1riubk~Ib*;CM)SMK%% zeA?#Ofp^NvFKePuGKUWPJ6;;KAzOaNK6{Vc9qm*P+{_avG;H{Tvg^2-12cQFv)!}T zo|mhP18nA8MDxm%rPr@oHDVWF%5x$aNV^@Xs_KtXoF6~CtbhkgqKX`w-E+--pIU5T zcHwDZg+RVn8$1r=v4o-+I6X)%Hc z?v_y0P|7Z%r56s(>&IYF^Bo?1DR-BzUNQ2B5u2FEFDHfIa#ouvtRkZx5;c#1%u3Hh z(XJ_UCAQ<_R4vc#A$`|Ufk}gF)BL^YWT9JQY0U+UW5i%7oG8x)~e$GJO8*JVB^-sY^ev<4y&?O!Sz0RR;0}TT2dc&SO@G z)p@z9@j}GW)Hbk=eQ%s1rvb@>skhj8}!Xve+CvJzu}I&%AyfP{V}z zi3t|$$k<>XmQ%Tmk0uY&ax`eJT=^0wyK&GvVj50EG%WZX?iX#RP=4&pwaml<82C>S zFFhtb{a4g$P+9A}Q;gvyZz<+VQM4!{r=dpz2BbqN$u+Sim-cx)E~X$A_AW^+yHCi! z{q+Vbnu-k_P!Lq8gzt8CCY}E8 zj7nZ3vqCY})b0;;jP3d-zLu@6!F{h{F8n2|SAIP8H|Ov6h>r~WMOFn{m3B%cHyBJ2 zbg3#k>o-362|3ST@oYJmXdR)CBheJf$f=(pZ-V45P}gWQ$2LHf_h}-FhJ4_~r8FWb zL{!x{akw{CTX1Wwqp+C5+yO_idb1dA2lM)XA?gk(n8Ua*71lQpz81b8X`5*pl=+F|^-H$qO-Pk61@Ks{NN z@BiktAf#qA>6Tuur!2P9uow1|R$WueS1h-mwQft3)O1qixu``A#bMM_dt78Iuna}c z@eEr-KM(^Spmd9F^!t}E@$VFkSWNKVhKpxO<~3rKszFxfBf$^w z#<~+zIx2W8OpfPbBNnK%yLf8|X+qFfzm0>N!Q%Rl?Z8ZQm(xo$G&4~3Ir_)rDO{^B zmzGA`n4;sSY&(c2EZ1V}1ch%2Pk47Zz}63QX^<`GX%+om;)>K1%+Q16Lt8jTJ3<^x zLv{N^{)qwCQ*Mslw!1ZxcnD;>ZaiH!LjMNf6Ki?fZEG0Zee=BQzkg)x>0Rn%*c#j9 zT3=a1T!7$x$aXIPW46hmjiIL?EDV?yhEoP+!?}uK0Wi$O{mF|8UazR8Ft&VeRKxUr zpkoAH6GhW3s{&%&Y%kICi@s#A*?$=(4D-QR*E0P^d=Il~{+Yxc0H8^SUiR{JHlRyG z`{9(|a~+FC+pkMoW8~wy6#sYJ zJ=tizF+^Ne4j5gpKIM8Ko~nb`I~4CE;u~el_d0Ij5ZgPI@_^4bD#o8$jrfyuXjg8( z{w>Ld$Xr-FQinl6Y0pX}#vYqN%Y^sltwLk_H~eXtKJRub){XWbte@UTtCG2WCwv1V z`>Yg6g7V0|U_Y@Dp*&K@`rfjs{Gn8XLq1J&vqp&gDVLR;zK*|`(jzs8SH!n zIiIjoj!6M2Z{L$aP`eZx_-~2aVKK>#X>&7zTU4m%@00!{wW7QE%ckZV=!Aw@b`N@R zw2UzyC<#T+@I*U^)#M6&a&zVW1kYeVRdh=?)HBl4(~D21jB9^2;Om-Dg>pxNLg8|~Xn+m>=(~C3 zI0QseKv6*-X@i2J&8gQf65ZG6qC zQ1vm=Ucu8gz4UtMuoY2`FAnv1`J*&GUmV=5NNPc4pk!S6O2(oTPW@X%$(f9-va}Ob zRatsnH3l0MRi3#NT~?&HwD`0%IMjnheg;=RJX9Vv@L+KF}_o8jV~(VN8Kd}{83NQ~AJCyFE+?ITUTeemOp7vA9tmin6Um7e4q^Vm<> zA8+uaC+O43+s#Z1=+J4}n#whunXg&jy-W*T8RC9sa1kucZzIl1Q<)STv0n^6nqPu# zIFY|{lsx;m*F8+)SEbSTyEh})mOiz6>Ss7YXQ(;pf|%zLc4~wuNhosm;cmy^JhI9a zsb05LXTu|{r1YrZxnIt3aVbwumCjgUobu@ACqUdK zkaWvqL>P=EI;0~NbmL-8W^Y0u~i>u1sgSa$yTP7ki(FzHQ zk`2!K+d(`cWhBhUq`qKT+haJBHD7@{h|LkgIFD7if_?-ub<+-Oz7SNoOn2{i@K)$~ zU>RqLHX$w`f*$Mh!9nnv&wZ%#+IqI%Jg-x+7Oy4+?A>bd_Aq*a8{6i2m#<7}-dA&U zT|pKJx>;v_ai4tMDE034e8?8{UP6y?P32gmK6Ia`xFtLm_88mBTUatg)lKyzh~)bM;E(D zg}j(W9#cozZGM?NpC&zR%L0GxP(Oz6 zE{(b`ECZxTGm^KNtMxRwnwF-jq}xdj*U2v#&4GrMOi--FoGZg?XAn)5(8nV+vK35) zx~(Hu9L}o2o`__ZxzG~GXc0jU#1A;P{!8~YSr@sC_K8Dbz@VbxR6L`5Hd<@)s*1w~ zO2+&5$f-vGIxjl+<-;>`PV=B?&|&$Lj_M6y)AOIbnn9$|#>P=~TKELYA)l$1qRlA7 z)f-Jm?#e`pvMZyIZLRiO$H=>8lpTLA>xlCRFV3N;SDL3k+GhcA-Ux-IO<0#A-3^~6 zZjF!4*#Lg|?Ozh>!hdNdl89)}{aBOKh4upJdgau(5Z5z!4}Xid+M|J%FZte~bbD}h zqqkepwd6MA0uHCKK3RTb_w=0$QS}VDlds3Lc)jT3&tR3)Rjje-uc%9@qO>)A>_|y( zHFnF?BIF^8;-cOZJb#dPpHg{->!6yf`5$QkX2@mLhO5kC?`Lw1z2+8z##1alQq6dE zN19Hw8nAJ|APa%pTum1Ga7)=c8GWCSeI4{4YBN3bS~t$xi-!h2yhpP1T9+JE^!9J% ze$DgS`I#=9K(FA-L7=oQ%0}2jzD&FKsM?7r8~&l_R~&mwU!>lsEOBywPhK_ga*x=` zky*AqXZx@T+xxQ&+Z0nI*uEeeEjwSUQ`IJ6L20;UNBH3m~o zq;btaM3s2vps7iv92N>ReCPY1i@J2ohWRX7lFLdC>wbSLIvawRjoar9c+=n?0%I;- z+ep^wma;exZB%PCl}iKq;XV(>*b-j^tOnC|9C#zqKFB%>^8a>1aSb*%h-?pA=GW12k)A?t( zsUK2D?oTft>8kI%t^Cbu0zsaMy1~*RP0dNqM<|}Q&l@pF%|mErAmY1vnTDSCUMPOI zJ}*m+jarG;tY+Ku1<1qk!>4gJroi3eu+Pu$y)(*+U|?TssB^EScq%*unBElc(iw~8 z;^_SNY1)_ByH*Pet7+x9^XRU9Wy^uakh`WOK(~t9bdsGl4E4VU>3>IZ1AmeK8sZ}2 z1QcY0(NCSkTU$|we|z+rKVy3Cs_zBOd=MbOqT#Q=*+CFge~tCvxgcVjo|-gl5Vv@O z6hUH7$WJ5IBj+<~noU)T(=^63^fYy@-Mpo|ims6;Km1{GgvUuAP_LDYXa$vH@T9dR zJ7f&=h0Mc_tDSzgk`YSkN(#z!jexQC!UXBYtWn(w=%QUU%$xrg|zq%E)uYqwEV$x>C6EKC(TM$;K_ka3*3;vgnNN z1pcGxo7ZQl;13|PG*Dd>f6@6 zfuV#U0=Ed~0%riJ`h>xUCm5L3Qw7ReGiTOd6kNVwT z{Co6n30Rh2 zlcat|0_wkQ$eLp4_rTo!`J{9xZR2EzvG?#Lu>wS96tQU1;vpo{WAn*MzFROS$R^0M zEAcPkx{ z=!c3EKzO>oo_`hh9Gg&PDmU(kuQk515dYZ5gV8Hk0H9lFJMDVJ{L+O02Vro>B8H1P zh-VmtYN*AEDos%5uig{SvLH=9H-W%Pof0+_pJ78{tQVx&~&x& zmhh+gPwbzMKV?xnnEygIL(M2FW3_22l~hh>&l6z5B|zv1uqNMCm1&f3XpIvJOY25; zFfnue0lgeKqBtm%@JRuxy+-Wq8d~&a56YJzdSvmzj3+2UWKlmz;KBk$cXQ2WVvdx) zI*TjK%WIZIEG7pqYBcyrJH5v}f4aTBU$^9o%+leO1InyRtjikaBNvFoV-z}-C@SJO zBo-7Zlo+++Yy^Y^N<3NQgNiLn@hf;shZfRKmrh(y3|VTVY48&x#tMz;YKalUp-la% z^o#Xd^;@>ZY~p3d&}9o`hq81ySnwJm>LNk}Pd^B3|8X9t{ym5}2subO*n+F+tx%J* zqD8_q4IS&!_+0%G){66a{O~I6EmJD3wh(fDLvRywf6zQvCFVO6d=%KS&8fd@9B;I0 zc=PUY(|50_{A;S~K}{7ZVe63k zyAXEnpZT1V9uIRyTC7QaiV*|rQi|p{p-GkdFrT#!^Ph>N%jwI|t&q)tO+qISPd%X_ zA@t?kX5QxMmaS{zm!fNwfSurz0D&l7ORw+a<$w< zL#bXkHOC4zx+&UP+VXRiHg=17$kiX4vN3?(YQCig{Kkf;m&`V%FPB= z?=Szt-=eBBx60t?vhK&KsaSikI&91*G%i}9`_hJ8-L$!^Z#&n2_4k_jnDaK0u6cb?m>1N(Zb}r{>B&3d%qFztg@8>p`$y7X1;*F4LVm(W@W8mUUf1PwZOn^W5 z-SUH>Q3_fe_Y>(Ph@{sj}?Y(YfYaXiE89eRX*_S7o9PMy~bS z$z~}=bb;jWk+b{3g`SRV^L^^oS3pZwJ*#DE_V5D!G2-Do5G7}D+Uy5j>oNAjTf>b^f1I2ag28CWP77MLm+ zB-l4F6fj0GEif=}B(MlD2rzKB^b93_TXZ25FKk}jQD~UI{wTlKNJufV&XuCS(GaU( zU{In7<>aiaTTiB?UzT??kQIrJUS?-YfD8UZ6O#Iy4Kkg+w&|d9LHluK?z$Cex;Z|< zhu_@+!u^IIAgj-h#1s}qB&!Fv#a9W^m%D8aO%s~hl^BP%<_Yl4s1h;m*x&QALM^CohL7p&fHht9?81uqJT(71d^)zrBwN09 zLv!_GjVih#al5=`+k_P4%k0SusUn)%me`LRx^>f*;MXDf*uN&zQJJa+kMJLJ$oNef z2#Rf&%7x)>J*vBzEd!Kwb1$*rnK>-*Sr~*Y0z3}yq(;cAWvpbk0bug*w)(n{imIr%D;HPQ@vO+^;)1l2=T!242L<#)#@grQ^b-w$h?| zvXHMkC>M=mTpJjdx>wH9I0!Mj_D$n0DU&f{F;oW<$)DgUbXxc+iRRa;;mV`?)P@QX z)hy1L|4fY-bQXbk z>5Ql%Lk{Z&?Ey<@8szt4YO!`%s)ork@}sEQn)hzYB~H!;&Tr*jY}HsoOU6AR}SaDjm7e8P`F2BOJha9g{m0e8>f^(@!5X$_2Z-#1+um(ns-_xru=m6 zL{<-v#&XWM=7r!0Ci5z465lvLK^7Vk_W@=^+Wr;31 z>)K2=Qy|JVAiiHsMNMvzAoPCTMpd~W!F)#mp!kybXX9#owWwti^5`Li2iP+aQFS|1 z^Ob|q^-5N=lz%JhwW#JP2e<6isOBh#IPLYQ7O(=t?-i?Nw)&RVYf{Z^1&*#Sb>z<^ zLITHp^pA^z1eRtQt})PBPjeZmF^G@^5${OP7Zx}9dt45FVYgB;)SN!lUAOcys!5O4 zQGmcQ>_PV=6ZSz5Lp9wQR9hcWHMP+;UNa8TU*T;XE<}NVJ`fid-edsXHW~#N94=B| z+_vWvcx1rbHjEp}X5b}=uNlt!AMv(nGfZW`(6)Rt(hDgxbvGCvEEXS>YkMqGhK0cCN8vDpe}nWfq-)gYb?Fv_;es04 z;SwQ;Lbv1AB2w+fw5QaXV)V14%o6o)IwkCZLlZQ!d~jTw})6q;p~mDM_tjb%Si`4r!)zF~A|m8NhMTCqPf`$FK>|?0dZexA9xsacSni@HL;8`vU(e0_C{j5Jmn0#kgS*MGS#z+z5!Gs6ioaXqn+f zpb|H{%t%vEiW^pD#387~jVLn;8x-J%suP|BDsaQqiBtt8xMAu%Zhz91F%VLBVCl*k2(i`QbY%^M-Wqtk@_GaNYQ()VeETjqFm>hl_N}YG z>dNvBs%zl#%JU7}r$6h;^y>`{Y+bp&L45XiUD>_``9=pPr~ddQ1SikhAV=3A&+9ym zgD16X#s|pWH*?qctCF8!W~>pQQm|m=tl_tq-(Y5~5wuuvZ|1e?%aI>pX1MClQ7~cV zxcZN3HgR4;KU6N>U|!T-QZ81Z9@84IHr-fHXf4Ytm&!IfLK4Tq7DA=S3CJm7izu8! zILS$=C!fe&nV0gaN1w>aFlU&^(>7CGjc_UAH)hZqC6H3!EuOAb}a zMO_UWRm!1VFe9bU9jNzDoZYNPK9_o(`EUXw6o;Paae^U~44T>g+K@^7nVE4yAe0)K zxpw-NAx=Fr;slo=Su}I(1eGCSI2ol+-7bz9k;T_^F5M*~o z)+ZF*Xk~Yg`TRWHs4j==+&CT`h}XY!-pcSne|@Ffq?@=le>J!DxnPKV`?f9I{10#V znvpLKwLwIi39h>v?#P>Qb?Z~yPXW-&J3^DUC~JIK*xk%_0@!ZJVOl$=To9GMbs*^{ zD29MI5J59ROhXHzQY@Lpnz^S_KhfzS+_Uo z#u&)0+oO7;3}n~sTMD!gZL4Fou8+sk*q5wSYW#h?ZB?m78(7;3HTQ08nS(j*fhL)B zQ;^$05`W(Sm|EG_vUaQ1qqiB0SOvWNDp`$pL=qxTa_&QTGT>saTZpDXks>KXuHiFh z&v04Mnxs|H{8IRn7Sim50tn{rORVJwirgTENIRg9@CH3dw9H=FEg~;w+S;vBan=)B znDMpcS`EK&KVQ5b{^0~dW-nR10*Puzof#3LqNI*6@H5iXMr;26f(oX6B>t9!RLWoD&o zWhMAun71LBkVd(5e|9)}z=U~9g_-yyW=Bc^7^MpwiHpq4(O}M^UkZd@(P+q?dm;CwtN2XB)b=1?7gd3c#9^On796;^i+ zs+}SpO%;syQUCx-k8jILzU;2))&_vt2SmIti6!NWM*%NJ!H>9Wep=4E8$>d%K3L4ur@P!@+jOzf4aB@s1EeZXKv5ZIoV+0@)W9&jfuZ$o+n z5tNNULKT|)5v!eCCAc6Sp1s4HD4v;g5ogIx;h4gsg)~`v-v0S$Vo5p@Xo|E_&g;WU z*BB*HwAzNxf=9=>_`XC1Bil;4}s_Nv(s zT!v-8Kvt>IuN>w-N}J;#QLKeVo8%vwE*FDN>+oAtrg&Hale^>uKr5!e92**=6rOKD zfk|G1BQYROBPPkL5E`Qp9&eD3L0*7U;xEYACiZH;rjdcELO1kW^^-k_H*YkQrc6rR z-k35zK}kjO>AnFKiB4toGaz_?SJaqrfIRp9lzE0hUj5R(ggz4kQ-zPdG~^^Vu$U(G znw|8`{|dcV7Dn*@0%+dyui|=T;ROE=;G|j4w~Olq!2Ji{-m~Fn7^2Zpp1myR`)8oJ zNG{*I7pzJk(TtE%a_3V7#qUMO5-2EmYFNlhottkL1!Q4)YdrmbgDO~E^iC=u;3@Tr zecQ5k$^ZXN+;Cvb{pX4SsQuJ><-C2`yA)6buZ!LJzY?UtXF$Y=t;IM>Cn-?)>3&N? z_$lxTaT~vv)87_m>p$7TE5LSIFK2))+!jVB4N&pveFyPmg0X%|I>??Hs=r)WdS0Whwg5SgI|yc|M;-W2C=+yT2&D`U+-AW?F2d zsThEeLQ!^k?Rk_0;QKuh$N%8wf032?f2HR?eEknP{ue)i|G)ec{udqoeva=UZT;xn zba&y?tiPvV_{p7o8iH7vqtK4;R73LgXM)X?*r--1@vs5GRHBNx=JFG-UM_;jv4jmf zzGu^jci21+rQBJ47g(Y#28iE-&U2eY4ffL+OR+5NC!ehxFD!H|5~LDVgOwYl_8)o_ zD)>&8;VW9_RBEu7&Lcz7>x%itCXtnu^K!M7A~fa!-jO3pKM4qGXeS@@vVa3K`hwhj`JmM@VPmN?$+WcU<#V0LooP@u zK1JSh#-*7E8|{g+_uw6IOG@~sxXZj5?IK*jug89?oYmEH0L0c^rhX-Nqo-5Y;5~2a zsVwWKm@V`O`l;}*9osP zF5`uJ3#DHOO-LN(Vx>Q28XK&02*^=c0RhFUuy76uaEBMCg zq=9{vr{gqxyZg~5s1oT9guCs@UQz~6g*!W4>c)hbZ9M*C_6GVVbT1(u{C}T&0by-2 zeZNpdUE5`Hl?;QcgS&}t?NZOxUPNf5d;hs5$LxqmipuIM3j4)V1t(TrwT|gtkzxS< z*%xySEbzCs=1pD9Q0&0`E(|e(1MkyU3%prHI2tu$k&yOtj572Zeb)gHHWfCOA3Kzq zuUheUjL}D*ogC1E@5?1B=umjQ$bk0L=5hq|bT6-wNIdayub~Kg8J$opomP=xpy;0@ z+JhC|V3yFYPK4n(uH^aiB~t)Jot%xHZPnGa_N@~$8|#g#Dpx?}GO*3MrhAQW2*at_ nl!$-h%R_~3Li=I%iHDN(w>#?AG)g+fpKr$>H`svIU(^2&mv>*_ literal 0 HcmV?d00001 diff --git a/app/static/700.woff b/app/static/700.woff new file mode 100644 index 0000000000000000000000000000000000000000..29c4f31eda6909a095ff64691c44f5e6edbee616 GIT binary patch literal 70188 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­qm6Nj#+r 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

Hello world

+

点击此处登录,如果你是刚初始化项目,则账户名为admin,密码在日志文件中,请登录之后及时修改密码!

+ {% endblock %} \ No newline at end of file diff --git a/app/templates/login.html b/app/templates/login.html new file mode 100644 index 0000000..0c5e1c6 --- /dev/null +++ b/app/templates/login.html @@ -0,0 +1,22 @@ + + + + + + +

登录

+ {% if error %} +

Error: {{ error }} + {% endif %} + {% import 'bootstrap/wtf.html' as wtf %} +

+ +
+ {{ form.csrf_token }} + {{ wtf.form_field(form.username) }} + {{ wtf.form_field(form.password) }} + {{ wtf.form_field(form.remember_me) }} + {{ wtf.form_field(form.submit) }} +
+
+ \ No newline at end of file diff --git a/md2html.py b/md2html.py index 790bed6..3e5d69e 100644 --- a/md2html.py +++ b/md2html.py @@ -14,7 +14,10 @@ def convert(self, infile, outfile): raw_html = self.headTag + markdown.markdown( markdownText, output_format='html5', extensions=['extra']) - template_html = "{% extends 'admin/master.html' %}\n{% block body %}\n" + raw_html + '\n{% endblock %}' + tip = '

点击此处登录,如果你是刚初始化项目,则账户名为admin,密码在日志文件中,请登录之后及时修改密码!

\n' + + template_html = "{% extends 'admin/master.html' %}\ + \n{% block body %}\n" + tip + raw_html + '\n{% endblock %}' with open(outfile, 'w', encoding='utf8') as f: f.write(template_html) From 9b714759a6928599c02471c8ab30a4189d4959a7 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 21:02:56 +0800 Subject: [PATCH 032/100] =?UTF-8?q?=E4=B8=AD=E6=96=87=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 8 +++++--- config.py | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index a4e56d3..c013a58 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -14,6 +14,7 @@ from flask_apscheduler import APScheduler from flask_bootstrap import Bootstrap +from flask_babelex import Babel import psutil import os @@ -30,6 +31,9 @@ def create_app(config_name): from config import config app.config.from_object(config[config_name]) + # 中文化 + Babel(app) + # 注册flask-login login.init_app(app) @@ -49,9 +53,7 @@ def load_user(user_id): # 注册flask-admin admin.init_app( - app, - index_view=AdminIndexView( - name='导航栏', template='admin/index.html', url='/')) + app, index_view=AdminIndexView(template='admin/index.html', url='/')) # 注册APScheduler scheduler.init_app(app) diff --git a/config.py b/config.py index 2f787e8..e3a6bd5 100644 --- a/config.py +++ b/config.py @@ -10,6 +10,7 @@ class BaseConfig: SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL') SECRET_KEY = 'chinano.1' + BABEL_DEFAULT_LOCALE = 'zh_CN' class DevelopmentConfig(BaseConfig): From 18db6374a78b568fd6dca0b813e8364cb83635ef Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 21:45:32 +0800 Subject: [PATCH 033/100] add logger format import --- app/__init__.py | 9 ++++-- app/main/extract_info.py | 26 +++++++-------- app/main/notification/mail_notification.py | 7 ++-- app/main/notification/notification_handler.py | 4 ++- app/main/notification/wechat_notification.py | 8 +++-- app/main/scheduler.py | 13 +++++--- app/main/selector/phantomjs_selector.py | 4 +-- app/main/selector/request_selector.py | 4 +-- app/main/selector/selector_handler.py | 6 ++-- app/model_views/task_view.py | 3 +- app/models/task.py | 13 ++++++-- app/models/user.py | 7 ++-- config.py | 8 +++++ log.conf | 32 +++++++++++++++++++ 14 files changed, 103 insertions(+), 41 deletions(-) create mode 100644 log.conf diff --git a/app/__init__.py b/app/__init__.py index c013a58..fa3984e 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -15,7 +15,6 @@ from flask_apscheduler import APScheduler from flask_bootstrap import Bootstrap from flask_babelex import Babel - import psutil import os @@ -28,7 +27,7 @@ def create_app(config_name): - from config import config + from config import config, logger app.config.from_object(config[config_name]) # 中文化 @@ -88,7 +87,7 @@ def load_user(user_id): import string random_password = ''.join( random.sample(string.ascii_letters + string.digits, 10)) - + logger.info('数据库初始化成功,初始密码为' + random_password) user = User('admin', random_password) db.session.add(user) db.session.commit() @@ -123,9 +122,13 @@ def load_user(user_id): # 在系统重启时重启任务 from app.main.scheduler import add_job task_statuss = TaskStatus.query.all() + count = 0 for task_status in task_statuss: if task_status.task_status == 'run': + count += 1 task_id = task_status.task_id task = Task.query.filter_by(id=task_id).first() add_job(task.id, task.frequency) + logger.info('重启任务-' + str(task_id)) + logger.info('重启{}个任务'.format(count)) return app diff --git a/app/main/extract_info.py b/app/main/extract_info.py index c490229..e58185d 100644 --- a/app/main/extract_info.py +++ b/app/main/extract_info.py @@ -1,6 +1,8 @@ -from app.main.selector.selector_handler import new_handler import re +from app.main.selector.selector_handler import new_handler +from config import logger + def extract_by_re(conetnt, regular_expression): m = re.match(regular_expression, conetnt) @@ -8,6 +10,7 @@ def extract_by_re(conetnt, regular_expression): if m: return m.groups()[0] else: + logger.error('{} 无法使用正则提取'.format(regular_expression)) raise Exception('无法使用正则提取') @@ -16,25 +19,18 @@ def get_content(url, selector_type, selector, regular_expression=None): - content = None if is_chrome == 'no': selector_handler = new_handler('request') - - if selector_type == 'xpath': - content = selector_handler.get_by_xpath(url, selector) - elif selector_type == 'css': - content = selector_handler.get_by_css(url, selector) - else: - raise Exception('无效选择器') else: selector_handler = new_handler('phantomjs') - if selector_type == 'xpath': - content = selector_handler.get_by_xpath(url, selector) - elif selector_type == 'css': - content = selector_handler.get_by_css(url, selector) - else: - raise Exception('无效选择器') + if selector_type == 'xpath': + content = selector_handler.get_by_xpath(url, selector) + elif selector_type == 'css': + content = selector_handler.get_by_css(url, selector) + else: + logger.error('无效选择器') + raise Exception('无效选择器') if regular_expression: content = extract_by_re(content, regular_expression) diff --git a/app/main/notification/mail_notification.py b/app/main/notification/mail_notification.py index f8dd45c..befbd99 100644 --- a/app/main/notification/mail_notification.py +++ b/app/main/notification/mail_notification.py @@ -3,15 +3,16 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:23:33 -@LastEditTime: 2019-03-25 19:00:02 +@LastEditTime: 2019-03-26 21:33:03 ''' import smtplib from email.header import Header from email.mime.text import MIMEText from app import db -from app.models.mail_setting import MailSetting from app.main.notification.notification import Notification +from app.models.mail_setting import MailSetting +from config import logger class MailNotification(Notification): @@ -24,10 +25,12 @@ def __init__(self): self.mail_sender = setting.mail_sender self.mail_password = setting.mail_password else: + logger.error('没有设置系统邮箱,无法发送邮件通知') raise Exception('没有设置系统邮箱,无法发送邮件通知') def send(self, to, header, content): if to == '默认': + logger.error('没有设置通知邮箱,无法发送邮件通知') raise Exception('没有设置通知邮箱,无法发送邮件通知') message = MIMEText(content, 'plain', 'utf-8') message['To'] = Header(to, 'utf-8') diff --git a/app/main/notification/notification_handler.py b/app/main/notification/notification_handler.py index 46b1632..53495b4 100644 --- a/app/main/notification/notification_handler.py +++ b/app/main/notification/notification_handler.py @@ -3,10 +3,11 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:27:55 -@LastEditTime: 2019-03-26 10:00:54 +@LastEditTime: 2019-03-26 21:32:18 ''' from app.main.notification.mail_notification import MailNotification from app.main.notification.wechat_notification import WechatNotification +from config import logger def new_handler(name): @@ -15,4 +16,5 @@ def new_handler(name): elif name == 'wechat': return WechatNotification() else: + logger.error('通知方式错误') raise Exception('通知方式错误') diff --git a/app/main/notification/wechat_notification.py b/app/main/notification/wechat_notification.py index 5090cd6..bbc6fc0 100644 --- a/app/main/notification/wechat_notification.py +++ b/app/main/notification/wechat_notification.py @@ -3,16 +3,20 @@ ''' @Author: LogicJake @Date: 2019-03-24 20:23:33 -@LastEditTime: 2019-03-26 09:57:26 +@LastEditTime: 2019-03-26 21:32:59 ''' +import json + import requests + from app.main.notification.notification import Notification -import json +from config import logger class WechatNotification(Notification): def send(self, to, header, content): if to == '默认': + logger.error('没有设置Server酱 SCKEY,无法发送微信通知') raise Exception('没有设置Server酱 SCKEY,无法发送微信通知') data = {'text': header, 'desp': content} url = 'https://sc.ftqq.com/{}.send'.format(to) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index ea5938e..9af3de6 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,19 +3,21 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 18:24:16 +@LastEditTime: 2019-03-26 21:38:34 ''' from datetime import datetime from apscheduler.jobstores.base import JobLookupError from app import app, db, scheduler +from app.main.extract_info import get_content +from app.main.rule import is_changed +from app.models.content import Content from app.models.notification import Notification from app.models.task import Task -from app.models.content import Content from app.models.task_status import TaskStatus -from app.main.extract_info import get_content -from app.main.rule import is_changed +from config import logger +import traceback def wraper_msg(title, content): @@ -71,6 +73,7 @@ def monitor(id): db.session.commit() status = '监测到变化,最新值:' + content except Exception as e: + logger.error(traceback.format_exc()) status = repr(e) task_status = TaskStatus.query.filter_by(task_id=id).first() @@ -94,4 +97,4 @@ def remove_job(id): try: scheduler.remove_job('task_{}'.format(id)) except JobLookupError: - pass + logger.info('task_{} 不存在'.format(id)) diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py index 4a99742..0300126 100644 --- a/app/main/selector/phantomjs_selector.py +++ b/app/main/selector/phantomjs_selector.py @@ -3,14 +3,14 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-26 17:00:35 +@LastEditTime: 2019-03-26 21:39:27 ''' import warnings +from scrapy.selector import Selector from selenium import webdriver from app.main.selector.selector import Selector as FatherSelector -from scrapy.selector import Selector warnings.filterwarnings("ignore") diff --git a/app/main/selector/request_selector.py b/app/main/selector/request_selector.py index 05f5392..2a360c8 100644 --- a/app/main/selector/request_selector.py +++ b/app/main/selector/request_selector.py @@ -3,12 +3,12 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:31:35 -@LastEditTime: 2019-03-26 17:00:29 +@LastEditTime: 2019-03-26 21:39:23 ''' import requests +from scrapy.selector import Selector from app.main.selector.selector import Selector as FatherSelector -from scrapy.selector import Selector class RequestsSelector(FatherSelector): diff --git a/app/main/selector/selector_handler.py b/app/main/selector/selector_handler.py index a53e655..f47cc6f 100644 --- a/app/main/selector/selector_handler.py +++ b/app/main/selector/selector_handler.py @@ -3,10 +3,10 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:27:44 -@LastEditTime: 2019-03-25 12:42:17 +@LastEditTime: 2019-03-26 21:39:21 ''' -from app.main.selector.request_selector import RequestsSelector from app.main.selector.phantomjs_selector import PhantomJSSelector +from app.main.selector.request_selector import RequestsSelector def new_handler(name): @@ -15,4 +15,4 @@ def new_handler(name): elif name == 'phantomjs': return PhantomJSSelector() else: - raise Exception() \ No newline at end of file + raise Exception() diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 5f31487..565aa7d 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 20:51:37 +@LastEditTime: 2019-03-26 21:28:58 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -25,7 +25,6 @@ def check_noti(form, field): is_wechat = form.wechat.data is_mail = form.mail.data - print(is_wechat, is_mail) if is_wechat == 'no' and is_mail == 'no': raise ValidationError('必须选择一个通知方式') diff --git a/app/models/task.py b/app/models/task.py index b011774..87c263f 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,12 +3,16 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 18:33:25 +@LastEditTime: 2019-03-26 21:40:13 ''' -from .. import db from datetime import datetime + from sqlalchemy import event +from config import logger + +from .. import db + class Task(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -36,6 +40,8 @@ def after_insert_listener(mapper, connection, target): connection.execute(task_status.insert().values( task_id=target.id, task_name=target.name)) + logger.info('添加新任务task-{}({})'.format(target.id, target.name)) + def after_update_listener(mapper, connection, target): from app.main.scheduler import add_job, remove_job @@ -43,6 +49,7 @@ def after_update_listener(mapper, connection, target): remove_job(target.id) add_job(target.id, target.frequency) + logger.info('task-{}更新'.format(target.id)) def after_delete_listener(mapper, connection, target): @@ -59,6 +66,8 @@ def after_delete_listener(mapper, connection, target): content = Content.__table__ connection.execute(content.delete().where(Content.task_id == target.id)) + logger.info('task-{}删除'.format(target.id)) + event.listen(Task, 'after_insert', after_insert_listener) event.listen(Task, 'after_update', after_update_listener) diff --git a/app/models/user.py b/app/models/user.py index efe56fd..4212d99 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -1,7 +1,9 @@ -from .. import db +from flask import redirect from flask_login import logout_user from sqlalchemy import event -from flask import redirect + +from .. import db +from config import logger class User(db.Model): @@ -29,6 +31,7 @@ def is_anonymous(self): def after_update_listener(mapper, connection, target): logout_user() redirect('/') + logger.info('账号或密码修改,注销重新登录') event.listen(User, 'after_update', after_update_listener) diff --git a/config.py b/config.py index e3a6bd5..360fbd5 100644 --- a/config.py +++ b/config.py @@ -3,8 +3,16 @@ # @Date: 2019-02-15 19:35:17 # @Last Modified time: 2019-03-13 17:09:23 import os +import logging +import logging.config + basedir = os.path.abspath(os.path.dirname(__file__)) +os.makedirs('log', exist_ok=True) +logging.config.fileConfig('log.conf') +logger = logging.getLogger() +logger.info('Finish loading config') + class BaseConfig: SQLALCHEMY_TRACK_MODIFICATIONS = False diff --git a/log.conf b/log.conf new file mode 100644 index 0000000..1b92e53 --- /dev/null +++ b/log.conf @@ -0,0 +1,32 @@ +[loggers] +keys=root + +[logger_root] +level=INFO +handlers=filert + +############################################### + +[handlers] +keys=filert,stream + +[handler_stream] +class=StreamHandler +level=INFO +formatter=form +args=(sys.stdout,) + + +[handler_filert] +class=handlers.RotatingFileHandler +level=INFO +formatter=form +args=('log/log.txt', 'a', 10*1024*1024, 5) + +############################################### + +[formatters] +keys=form + +[formatter_form] +format= %(asctime)s [%(filename)s:%(lineno)d][%(levelname)s]: %(message)s \ No newline at end of file From 75d7b0a984790834b1e0243809b7dc06ac7fe4a1 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 27 Mar 2019 09:57:23 +0800 Subject: [PATCH 034/100] =?UTF-8?q?feat=20=E4=BC=AA=E8=A3=85useragent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/selector/phantomjs_selector.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py index 0300126..da53e8c 100644 --- a/app/main/selector/phantomjs_selector.py +++ b/app/main/selector/phantomjs_selector.py @@ -3,12 +3,13 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-26 21:39:27 +@LastEditTime: 2019-03-27 09:56:26 ''' import warnings from scrapy.selector import Selector from selenium import webdriver +from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from app.main.selector.selector import Selector as FatherSelector @@ -17,7 +18,11 @@ class PhantomJSSelector(FatherSelector): def get_html(self, url): - driver = webdriver.PhantomJS() + dcap = dict(DesiredCapabilities.PHANTOMJS) + dcap['phantomjs.page.settings.userAgent'] = ( + 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' + ) + driver = webdriver.PhantomJS(desired_capabilities=dcap) driver.get(url) html = driver.page_source driver.close() From ba395aeaf5012bc0f64de3511a5fd95bf04fd9cf Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 27 Mar 2019 10:19:59 +0800 Subject: [PATCH 035/100] Create .env --- .env | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..7593217 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +FLASK_ENV=production +DATABASE_URL=example_url From c9ae109140d990de08cb70099c633ac5520cb80e Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 27 Mar 2019 10:37:18 +0800 Subject: [PATCH 036/100] add requirements --- requirements.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/requirements.txt b/requirements.txt index e69de29..63e21f1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,20 @@ +requests==2.21.0 +Markdown==3.1 +Flask_BabelEx==0.9.3 +SQLAlchemy==1.3.1 +APScheduler==3.6.0 +Flask_APScheduler==1.11.0 +Flask==1.0.2 +Flask_Login==0.4.1 +WTForms==2.1 +Flask_WTF==0.14.2 +Scrapy==1.6.0 +Flask_SQLAlchemy==2.3.2 +python-dotenv==0.10.1 +flask_admin==1.5.3 +flask_bootstrap==3.3.7.1 +psutil==5.6.1 +selenium==3.141.0 +Flask-WTF==0.14.2 +html5lib==1.0.1 +PyMySQL==0.9.3 \ No newline at end of file From 05d13656cf0d51e995c7189130b17e1bae60a202 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 27 Mar 2019 12:24:36 +0800 Subject: [PATCH 037/100] upload fig --- fig/all.png | Bin 0 -> 10893 bytes fig/mail_setting.png | Bin 0 -> 26470 bytes fig/noti.png | Bin 0 -> 25271 bytes fig/status.png | Bin 0 -> 28219 bytes fig/status_setting.png | Bin 0 -> 28009 bytes fig/task_manage.png | Bin 0 -> 45800 bytes fig/task_setting.png | Bin 0 -> 66032 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 fig/all.png create mode 100644 fig/mail_setting.png create mode 100644 fig/noti.png create mode 100644 fig/status.png create mode 100644 fig/status_setting.png create mode 100644 fig/task_manage.png create mode 100644 fig/task_setting.png diff --git a/fig/all.png b/fig/all.png new file mode 100644 index 0000000000000000000000000000000000000000..955dbe913154e99ef933266518b5dc23998624ac GIT binary patch literal 10893 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

g*%~l_4UaB@Bfy)+RKVkh?r|D`{e{LS;Q;)px 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 Ms;C7jlYbNVKmCDXBLDyZ literal 0 HcmV?d00001 diff --git a/fig/status.png b/fig/status.png new file mode 100644 index 0000000000000000000000000000000000000000..e876d6300e1a541dc07c7a0cec6f84e4a2db385b GIT binary patch literal 28219 zcmce;Ra9MD&@Q-e0wGv%cXxM!ySo#DySrO(hu{z_xVr^+cQz2*-JRy-od1p<-97rH zN8kOx+AOJAHmg<@UlFDtCyoGz4F>=Kf~16q5&%HPzkeTv1%LlpB!a*4et>Wkl2n0( zg#~TMufP9_vmMHAUlV6x(c0t}J)Jy3zjcFGb}V=g1Uw8on~x_4Vbt_3|ecrl6Yv ziz0rDqVkG*nsI_)G&TD^aVzI;Qk)Ix#3pi<>M&{Q+z|WJu(d9{p}Ux%*dRX@R zHvhZyDQo}|EF=>X6RT_tE?15I8cJ(-gMqoWwl-*gDzDOa4tDjE(3RY}8sgeBn6@1O zlaKH}Odozo8L_su#$);_(u*@&{~^fw)%l@^y>cPKnFRST!eG>e=X2|WSBHUO`rFl* z9P&T>O|FX~1uY!ih-?4p)-Ae2fpBv?j$Y6799kbqsA;=Oc1!?HWY*hqqrb zk2Gy?@E}GL;r*xZ4={~Vb?Be9$e4c`;;b?K6}X~AUoW+anN(_IASNuJ!fz->S^I&_HqJX1+ebuL!NK)cqA7!Q^GG1yUM>)S{Qm z1fpANpmP!r&}TCED} z#cV(FREz$-B}8-UZM|63-(3 zoR4Z_15clXwn8ScA^Cg7ADPdp$CWwgk@zR#kha@LKiJoGge{JLulXmD{?#RtkeNbH z)n7fmuM5rg5%iBnoLCq+c)(zZSe>q=Q%GgS8;*bZm#H$0VlRNcMiyHsSC0!1M$GeN zb;GC6+z%ZUm=JD5SrTLuf4|2vUTihbj)Qie!ig!eBc9i&$<<&O)_l@wpmg9Vvp8sZ zkR%#Om;-UB#^ov(_sg>tPuB3HCk_70d|gNVN@3ODf4PD zxt#6ixW02?Zgq$i;T%?I zn8?Y{|Ml_ovoW`Z4h5A?2L0)YD@R1_h5?>!zm@UgA3uAJCCMySqDy)4)MynAlq*xR ziyYI)gNRk~otawH7yWdLI}1_AJ?iF7Jpb9?IejUhYJj>V7spGGq_gi!1rZUeOejaY3~g zrCKzDwFGSp=RYnljCBCOAk88of~FkbrcEZ5U6hzuW7=l&sPy*WXnI#b_t){kOU;B% zOSsYDo(Do;>og%^e%DD|>P^e=*LHf#hfB>5ih2mWSWs9kcx-)tavh04zAxzAq4#HBi}dKDcfGI?_%9R)QLbQ0uTv0uw&(-H3?k$=IjP*ueEV` zUOQm@tBi9lE}acLXQ4u1`Ss*p-t%1hsWUy@hzC=-@7CgAi)K2n!#M6wgPjkOuj6ZU zLyHl#hYh|HK3Hp?)g^)deO)(NoOsS=PV(^3@k5#ej>XNVQ0u!}YyemdW3Tjhx}^?%`%Ji53s?AKBqk0L?DsS)l1>1SY_hXjtNDob?)^XI)3kqm z22%*B$rQIDV$odQxwKP_m>*TY1pKOTK9-U4kg~l;lCu(fr>wr9_ncDzpWUNXQc8E& z-O&y|BPWi!K_1@}T@w?o`|gKNXSl)#zrZ<5T~EtgP#{y*QP$1vk*8Ucl!zszl*9VI z=6=U$xF|fdKy?+1QaNOBkk1fs_9r zrH)dCPUTZeIa8h{+s^X8P8P+K7y>nN(_|ksQJOHrZJ$4Hqb`pemLMPYWEv z;>aWHX_CGYEs#X_T4PQgX1K<;@BfMAZx+d%cve~?)H__;WnE7Dn%_{qt8M83+0Jboo26sulu*i?{&$F1j9TctX z)!Yb#uU=#EII)yGve*(*m*VIkZ^xBE-sQz-Fvcj)Khzwdqb8c@>n{th=q~WFJC*Qs zW9>}8`Yrf!N7+x-G&b#~e(#{t(kbnX>H5ek1u#BGi)eOG(z8qos#tl~{-im`758IS z!6%tfD;vojZd{7F5&j z!;%-^kd|Tdsu_u^HM!+1v_FG>L0EImqE*&>8WJZP4S%2_Hr{}DFxBm2Qc8}?648iO zRpCJ~#n^>mR>5pt+pa!p>`>czqf%${Mb1Vxt$cW(WdasE7TsdQTM(jk%0H{}=*BLl zT(XA%2AY84@H1Kl$($Tw!tbq*)p>A)<35k|RshiN@=d+^qC<4#3WXC8*OPAm!tzI%B4@ER7}kN2fM0D^UcC8wr|um0!GLHKZ)Tx3@eK5(Ft1m z*Iz*zOah{iAK`N{-gY-Xe`58n-Z8l6XQJ1AkfQ-hoY^v8ZdZm_cbPu!%H(keY$!g8 zNTyR-PhDbxW5f1z#GiA0JL$4u_ZGc3BGlp!I9czniLInX7=EZ6S9bs?rLB{6p9OdM zgt`|r;f64!*k@}1LJ9qg-IwvhKc{){3!~UD`~<%f7vOjnx>-+GbM~N4(S%QQL}7C+ z7b+ou>syu@MN8vgtm0w|oAScK+zKih@#!03z|T;rc~o&m!Ig<7KQYK^cIiuDa{MP4 zzse`*d*)!sGPQ&P-8s#%i?Sg}35Oz-P(-Yb=0vo!m~2eYf(te&99O3!UUUmIjD$&v za=|rIrW|N7ZQkhn=W0#Y9;QrqQkIBIiVI;=WfG9mn{FsW*rHaViT+0-|tlf+MNcWXzMALfjcsW7Bdkv$98&wCf#A=Plflc@DmtNKqcF|A*5QFEL)?6$SB8jHv*>eJa-1uFlljdGE+=t6AM zJG&`Ze?kN%RUB8CZTh9($Q)&VuzMV5<~5biowdIgT#xNWZFtrvx&jW`a$ag`An>+U zW^@5APoedbUpJ#&?MWEq46nt!pV|Om?Jc92w?EqR8D_N+19hvN#M?&erHf^JDAj1Q zkQU_TYh~wSdE*Hhk4&9?WayfB-77-n{$uIQU)bKB$KYGNp5=2Uz_`WfGDDezJZQtMERAp7lOmUQwS*(ErPKl5Cgh`VJd&!5`FK*U%3DStc_m>=2;v?rzP8HFF#7D=fDfyC|h2UJ#OkJrM1$*0#!%O*6Yeq zsPhc6E}zQtmWRq2mWsBGb`APIGE*MlwNa{ICAINuhBdXEbc&Crni`?;QmEZ5UBk0s5EAIPrtIAaD@YxIH{%y~pxhDkqy+9?BJaub++7BgQ-K9(GQah>m z=BP%egn-k(gW_Lbr(f5+HFJ9Ya5f#8`z@Ww+S(8WXj;XuFu0#=gCGo=bjJKO&0eHt z8G2t<2N|uAlRS?*Z)wf-fV>p!6)aUqwP1TlXsRkUXQER3rTvW2=zQ?7s zxmJkOh=WIC=sKU26G}Wvjas)40x)CJ;zP(*5zLl&pT5iXnKGwe8` z*cueSt+qDK))kl=Pd9`_znV6vOs9?hsX}@g!gsNOkLk&u^!5m~-euf(%*R1A{`UYh zI>yT{##Td9(H_=Mf>q=gJvFod{CY&Q<@`kUhF{Fh7nqrOWS#aMGv}k;=N-fZ0_z9m zu|(6tsOAmNwV`6FnTB(geDExZNzjFf6?T-cUY$pAud=#cjiu{Xm*fnlc{8gZX48lG zivIMBAlA9!)z$_z=nfpen>x2)*QMsnJN7`eShXr%DHg&)(N@odEMR#nU{e+v+zgRM z`e?xW1WY`m!^xQ2uhr&mH!nX{9+;$09x;_gYn7=RA))bb@0c#&Gf6SQfaT(AtUDnc z(!3g{^%Xp=SZyB4(QEvv9aj7nu0ZEaQJ^gs(0ZCzPJYwUmwAKszNLOo@{|CH1vO3a zGTKedx}%JVBRb8M(*;^Jtk(_WoUCZvLYlqxmeln&2M$bt@vmQu(pTy1 z{9a_$DzXZh6-WX?KFxzU&7aUr#p?>>>eAu={MJf#?VlN2%Pe5NUV1e(KfGFy+#5_o zf-Ua=TXA$By%6L21cvg^%<>ya_UD%?*@?M%E!l(7*x)W=lCkL$|O+c&1f^xh)!Eq_q&9(A^a%JM3(>0Ke9hALtb+uqumn1%S`D{~ zOq8T60rP<{QR-(W(m8338)L#Jir?$7puuI`bVQz(G!>1;cAwd|Fyk%L4$OIN1Us|{ zz1v0|1IlnRx7SDIhQM^<5?~ccW+pD)=o4Z8eOrfMg{?d%s)+#8)Sh{LR&9M$M}leb z)20DQlTp7+*6@|iy?TNM={k%Q6t|cu`mPT5!U|+rxy6XTmZ=?Hr{>+>Zwm7@nhBYs zN6Y3;dKydI%&UL^%sIs$if>&V6aBm|gMKO=#<;3v1L>N?uZIy1C=Tdkz>dozUYW#b ztpyFu^*Wfn19r9xcLw1mOf&$qEE z@7j5OtLEQ_2e1W)tyh5BTghx?vmhyTFHBGYKTe}5DXrNB0Vz}dV2~`b7k}g4W&ovQ z$W`;YeXDoJId4v`i^^)tizn+C?Z$Ga=70w;D{{6@l|w3Zn{PUL=Db`hZUKR%nayQ< zFpAyL2u)dho2o;%Y>V3^X+zsjwf0Mk7s_fnZirv#4_koVR~LN1ugA<`1YMF7keuF? z?R+$@N?o`RrqzF$U49NSsNP>pWvEc$`jn!EDdJuVj!?Y0BdO5xM2AN-q0OdGCZ~U` zVu zXs%rbQ!}d1sT{=cV9<@+3V7m*!4s*%ynU{VK!Jt8ac(vD4h zQ3s7dGy<21@Il4Are{aYx{4r{FiVGS@04l3tT{{)7YH4n98H>ty~=6CH4W40U&vtA zURnAI#u@2?s81dPvp!hxoF+(xYs}UFaA;0pB`J!P$L$W!e128etX|d!Fh62=idNGC z*?$^I2GS6%K`TXMt*EA>ibp<0#hev-NvO!e)t}*i?>Gn-G1)NZcd;YsC^EbxeNcID zZ?WD9y<7CBVHiX_fe6Ue#1`y5F^6e}gz+;zz*)tA^+YO3DH}Ue8#br*E-iVg;rAVr z>sPp~P8q(c*??|@R>%E*tr&&$_x?zn6uYzSZc~#O zY_jz)NA7_aqXI{-_VG^f`3wiu82FN#ehj;EHyQW+tD(B6dlfX4kzjt(^&mX~iO(G^ z)Q+D4z%8|5yd);^WV?uLK=(N`}X?FqNd;bKR1>Z$D}Guc29l78b~6+vB5NdPXrewr35AD`Qp zJ<3&NpV44c zW>kLmlP$6}zc}{Lg{P%NugI2f;?t=XP|4$cFT{191ZKxogOFO(Adnm0{d`JTq88;t z_+?{mO7XX#r82gbBxJM;PUiXm-~L}LERs^u@3b~(F1K;_*KA0RIi#rW5|^wBrd8|u z)`TQXCAa`WRjKA8S~Ut%*m7u?kt8Z(f5x8o9*Aaz4q32Zz;}`0&(VkV{&v-_yaDin ztv~OeC!<*ND0zs{ztPU^q?M|BgRhgyOi0h1O{tiXT=}~5g8SVDbyzglKXDLz(zNuN zKV;)-pMCtCzhi37PT(w2v={n@%&8Lq|9jF2vCq6N6r9j)r3((au0vv1awFn3G;%)J3E1k=@~&{d>@D7}Fm)?0!%)z}gZRqAFQ0 zMG#Iq?BG@`ZFH3xb-(P(mM|J>l@@q5E4r$tfXjZ)RzxFs-N=h_R@#B6g`ct2NLj)S zvk;q#{1(?g3nbSdfaHSl{rNh1(Rjh-%g5w1n!h>gsq3Shwyc684>3|oP*gWXR81Bw z+=ricq{MgBWWRn9u@9>C@T`u=X7_FOy(%fN&3CIKIB^F-*s+3ZSG;k|FJ<@ng&!Z2lz!2~THxI2bSf>{hvLrWQ(A z8UZXR@wu3rMavkxnS}VrHc?69oMUoSSx-`w!~HD2m86juUD*%47Y)OB9*W~7tYAHU z+zbL;Hq+J0yL*H5Y-+72j@#en6w{#B!2oMo?>oAH0&~VrV^WPYiIGd&a3oXoZ&ztY!ezO~I!-)@W2?{=pi!3QY{DsW( z=SK8Cn&8*S@lXw&shQ6xHEjG!2=RvpJ@r)yS zr=!Xq_)-Q&O3{)u#}OE18kFbGZX@@RkkG+VC+T!@`G`Djz~8=l9vCcWMXWp(dfvkg z1Pbjj(Wr-Z)e>=i%Mhtoa+4}zQ*wBvYLBRtNzlC^iziWjZz0ZoGu_6|gUD}w9Y^F+ zY7XN3*3iV#Yr-Qd5vZ81TvT5J^iPl3hE@)iu_;NGl=6KHRze0d3C#=&Dn-;6J~xI7 zCMLGJViU^lW(V}9M|p#Duib*>>Q%6nUda-}KQMyuY+&c-wy7O4qC0RQ070zi#G{|( z^tk%HFogHSKD|!WDj$oE)p(NVq8(@{LwlftoXRi>?H;RS5~Z?P`-JwcUPHD@!{%< zWHTQYXk~?G`Z)sl#*lwr_X%Y0_+Q;-Ux0OPPkhy$B+vefQX0x{Fd$Z= z=`>RuT-@(H!_6>lC3OqpQM^Uag)$~v?H^KS6qwst`Oqv5K@-Vn-|O7dq)Dr{@bS8t z^3jzsI|)_UVgpFV^uBB}oe#RLX+@PZ``!i>KB)5>UvlcAZt9vAy+L$327L6f#jWVZ zX=xew+FMJ~m-yo4M?yqY@CMG=BtK z4!WIy?-Lrcn!N{QYkIh9-B=pJyWPY`^qH3jf}K5)C+oK;hZfPFr(TO}Ps z`_SS;A~_KU_>F;mHO~pudGCP9v-xIHJLyK3lpC*9MST69QTkr2oY*{j(i|`>4@Y3W zB$d&WGFmu~Uk~~SqRbAvm8;pZIwIibQr9yGBVKI7efV)=5;}KcK&F{FCkGjJ>GrF7 zS=%ffhV*hg>ljbVngv!BiuL3A|H1+|_Q0p&&XK8_luwn1FQba@&p#UnV@JtmVrVjU zEmFHC@yzTpj2`D2FW!;E-pbZ6ZcDDFhG2_p=^04lDhlnb_ste)O*U70CrH9k8P;3W zkJp`M*2Qv1C6VP1y{1T1XbeKN_DBl#!j^q14TSb-b2CWmbidxwrdyRWp6_w+^lH6` zCGEoaXtua}<>GYvVbgfojQqTL^$3DMdS;`Vf#Sr}w!{bw$Wgs|-Bm7T5J+dDW;|Ol zwe`M$c*AHsxRU3uUAq}fm|=ax`96ykF%H~~`=0YJsuZ{Xh+ka-eK$LN4yc{0f2(QK zDoIO>INRg2x`n$b~Bj_jYoxilrLq9XeA6|l6uC4I*o~@%iEEM-*|}*#GTxVqj@@k z(L#E&gSqs>>tVr2O=Ud&a9J(9vAf|w-&P?k{Tnq0NwtiOI!IC?G9HmlB)UW-sgsdN zOt7lVpiO14TGgs#eRpC4nH!HjS7cPGB&L-&me3)cO-ze2PI9{>_2E*42_~mc)ZTr; zE_?HP0r>O=qy%7x6K&1~C)%c*v%By)#lhjRf#086TvyktO0h$N%m8=b6SfG8nzQG+ z^T;DHG;3>^OFV8h<=1p#;}WyR{@$QQISPb+^eO_llY^nk(qwuDDqmxi9mYkTBL@Xj zDOXHp@EylU;Yw#|mIM(XmeJAhbZS-HQ!*7Kd(~^`9xc56x54b%bN2SBeEyS=^Sp|C z@74Fp5_StGZgH1wI;Ed#Qmo5|)ZM6+Qb*dTR$qP!fs3DDx2L0%4+Z3gXe3keT1+l@ zXbCd&A*nMaYqi5~))p2G^$5p*;1@l~V$tGTx)KC3wWYHvD%dSq3ku>3M9nuV9wnk% zUY^*-VrfxsP2++o`D{I2D)N%ptR(n<5^_=GEoL{Cznibxv=vandGDrizgSZXLG448!L>RSr80x9+lM55soS#Dr|vu zl;kiJSO*DGqT6!;f~nEwx;3~R)h)@DN)!&8eJGfaTa&?u$MTg!#F=w|2+&H7UWqi|vBlizMO+1h@Ts$;5Dlst7w>Qo@Tu+Ut z^H1C0tpyJ@>uc)w+hv(&FB=m^+3A_To0a+JoA>UQX3dOVR;>~bG!Uppq))k#sZtVl zM~J1vTKDQ90N~wl?s9wHLAmC`&V|ogEM7M?&X)RgkeE*HC$zxSgScIGG1H|g4My=v zU+ZmBgu2Pyt#DDpGQHdgVrO}CCcaN)Dn%p+0X$Vm$FQ!YRuufb(yC^0G*%DdREaL3 zBnq=FU9O*qZThBqK9^ZzAvKIADJp&W+#cdbXg&1E8vS<8Y{LNsZpW<)UVucn$Q)sa z`Kjn`#19H+?2$u3!3UadcF;ZB{I;i)qVZ#)D~A~naLB$*ck9hT@y zE|o++V0pS=s4GyLMiJ$j8Gp+n68|-tN>CoZeaFSRKwE5AFso1#F*1WSE1fLGIhi^K zNvs;OeQzJdLd9w%pV)jEH9E*7pD_n=UG6j7lHzt&RrRu0y5s#apUY=MJo{?%m5Wzy zfhE$}(zVlhc5TihI$JGq2b@UYxPnjR@9V$G3$u+jLr>=7(KQ{?TV63UvBU0S@sJUl z@7%(YPdozx)($+dSyU)x`3XeyI-oodqGG;p&70)*0J$;ckr%f^eToOFpIwwxs_1v? z?|~~CekK`ZBrl(Wm@X^6h&v)C&!-A1I&^-Fz|!1YyNihBudDKVZd%dkFmlY)Axa2$ z`)uBb9reefsU}r=m#WEM(eURR?^m&VwVzQz?6=~MO7)$k9N>OA?=6z!QL?MSm^Y_F zr}TC;q7=zKaD!F3);X(}dC@Cl7I>c(YYdX>AA*G65E(LrPr33}YsW~HDYsFOyW&5U zE}7Zn28Ra(BRWT)LkID?W-a>&w)&VX#F|bloT=>cnj|kp#=9CS# z0TW+J=_b`xm&NC>ufRu@-gvCnv1L0Sj>opLec*mItIngN=>297`uY_dK2+vXKCH&0 z@L;<`o(>iL`MG0b63m}W=hNLUrmu1`AAxi77c*=(OE6>sM=Bt}_Yoc<6%WSJYUM|9bt{<0 z(|$}hp5H7FSRd&%?ZV@+QC-4vTHK~+6{%0OEiRn@R-r&j{@ywLxHTaC zdqJhWRc8V=z81WZQAu5KCw9V}b!{NR*C}hqb-)>;VDh=qy0h#<8P)4R*Ebe9Sxtm; zH&#{51`?a12(&?Qv143e#m`5R$r$ROlRqB$F|S|4h*cfxBR>29W(rna|35X24uN7}Yv(x}Cnudk6ZWH>IVMEve@HfYOCUQhURY**P7@y}P;p1p7nKO2gmq|xuO_|iCO4i$#F~)NA_RQ?09gw~noqjT! zUNtGP>L?TsRbq&KDH7%j-F@4Y=o9$*RrS1Zy1u~2_x_%oZUeuU299T+NiOGhAz#qH zyOE=zE{e%KiXQXm>|P*VBa{5)$S|)zO`8-xn?y=33BR7j{E$B?4;lba3NqdrJrIc! zLg&l&B+!&LBU5)q5??#0D2>|V$iEd2DZSK@KmlP0j1v1^0XAzy``dWzQx6Cm@zm< zngJsiQt_s{@^5iEtOigV70RA#{4?$Gq_P7rZ?TaeL-xZcvAiWY_=G*)Rza#w0Ja95 zT-JI2Q_7jUd)!&8G)DfK>S11sn3*@gZwkKK(6CVmD#29xKW2vgsuuFy_0 z0{5?9;BqVZc|07lkj9Y(6>R|j%0Sn%m^b*vAcGPN8g@ z2q`ypRhh0BxwNJ0OHjpE{?xzj{Wr?JoQPN!rkALXB|`E79yBcpHE|j z+4&$WZjX^EnVFkxIQq~iulATe%TCZJP14FXa#DdUXgyvKg?e?>zVaiuOF~Ty|480y zsn#sb9zlliD|b*fl@{pFec5`=b2_Zy^0%SJ3DH=~rrA#>I0)_((#}KHWXN{#yEyujw#Rf7YP?&z+q2APG^QCnj+~dXm#q%3{1dwgv0;dP;n!2~4 zN&`e0BX9PJD6%2s03pR|2Q@qR%}8T;u+S~rTC7>6tBcl5vUOTnQdc?GBg@D-1%BHN zTq^5%m5k{O`}2f7S{XZwlC>v&U565GF4;KJUCmM#)iiT?c=)mzEPKm5^Lgc3)6i&| z^k&*K=ua!V?5f8LeG@w5NhlAOf07951qy74%&)S2uK4wnRj~hXqCk)G7bHDw4BvqMIyDi zN&oIvd?vk04B)*1@(ya-(zCOp17D4dp466i zxmERKWhSz{C{j>ytfTNgjyW~qyq<3i{g6Byg<(0xLhEsI16$wxgvi;cdgMX&gC+um>7MfJhUb>8F(EMTG6L#ziPrbSnrjN;W ztRN1u;i03W6Uwz)tTL>wu6|t*-9Hd>V|zh+M@jQMz8Y$eGJXQ1o$(wXVCvzt@A-Xn zVxU>c@C_Ro9^hvfaeDHm?Fzeb_g+8R|Bl(uL++wcR+-m>fhye#4%!I*VTe0kwOEz^ z!2QEz9)pJ#y$x?|F!9E9G2}0>xpjY_%382>T6n)<@5tas2kq?qRH(Ub8|_vUe^D)j zbau+gzK){jELyNilgM8rcA(U(ht}V3{{W=n{{=|DgQ(3Ej#9t?q!wB4H!#2kd4cI2 zOY_fdk84$R|5rTq-`oH1Fzf%<)Bn(R$>navgX_{`0&bzTA-){#{_7 z-M_#Z_9g~I>enpmg8B~--Av&C4n!;lCkCsVuFYK4Oy&yr&*^=!qe?;=4>HLh1^pm3 zjL07jj;JmqL8pmtS9Hzk|B9)gK_>ZDYHDR=B`!W7D}^W|EW_w`5pnMYzi+-^lZy9O z8!gD(+}!U$AUFGvMJ&0Y?>)%$_0`wcM`1E;J}yL0TL1L?=tz^)4CT6w9wG4;VQ!Og zdwbi|)bwf*hz<)1Kx=?ja=V~i4`W@is2hV5VP7@!Bt;Lgt z|7GgsS6*IT`#&G=?ZLP%oBqnHF~rs4v6r)Y@v>mc1d!*1bUd^}N*!k>pgR^K}G$fXJnEBL4} zuPI2=n-PA(e<@9tQ?N1~(SJ=nqbZY)pPV!Fwf{>Wmgu@2QoBaft4U7LBR=vGi}Bw{ zhWGIcvz7sq7q&?k1MBwB#fBMwJ?@>@AN5(Y6Az)LD!maVxxW(u@AtmGm(ezgVvzmo z|Kltb`U2|l|N7iJ@}9GA?HKYuR*()6LahH=ob{LCzpngFI1u}P(`jVIBE1f;r5%U* z#zxQfH88nJzxPR#sE7zuxL^|T=(Z*EFaNTai{E$e)$v^tKc=XlU?-aA6qD&|Z zjZ_V^;JaTX(WukwwYlwOx?Vm!r)T2+XS8s7Df9G^o$#2L&K;6e!=8{2kO4n_V5W>X zkDSr|YgV)U@acwkLnD)jee_bY34cE_esru=_W#f9eBme!?(J)fi=cwi_{GIV?WPy} zf1lh(w`&bD{U7y-{Qs#w1d&A({&TsDgIh`#`fRtop}RvELa6^)`Wx~>XLzN6+vV8d zn}|%?Q#GBf0P7_jY%ocebJq%MG}w0t&X=wdL?L3%-Cw9;pHk&PUogwafM7gszUm@QTw5%wRK!WsgJ4Pb!IYzE`o-pVco>uV(m zv);;uOkzniaPE8|&BIn9=+vjvjG`sUY||ZJR!_)a(ZL!~n<9Vi+uEJ_{A}wW?)9ML ztx?+4G=wM{<+(TVIFi63emg?{Pq=&Ma5867z!3CMDfhhB)hPYKM*6P2D}2~34~^@N z0vuOb1g}$VvZ0ZXnKu;b6c={w1c6w10HcM$^-hJW?e1;#BsIZvnf+e}f<@qaL2l5k zsN@7g?7%mh+htB?kRQZ@nVhxmx`NU3*psF}z3*pK$Ar$YpV}g6IplHZ-|2ikYBuDH zV9m4*u*ce}NQ-Q;cVJQmZ3hf3cKo;FosRZHt4_T7{3~}Ju%cirxZs%wboh0BeS|`o zE&LaPpl}4<=M{jHy-u&Qb~y68gW@9BtnvG?<Ib7j%mit9w zcz$1AX2^OiIj#-FHeG==`6gzwiwS&hJ&POYWoU2g8s!w+WsCVlW@fR zdk$`eUcdRH04B?3%N@*r=7NrUeIGplHhV8WbR#G1qC@{=zYrc#=f#{SJrUR&i+y-b z#$zxEx?W=#)v5m44R!TBvKdS9D?5P6VTj9`iP(_XdhF1wgP}_gjhQmD6G4Q`UUS{H~J@f@X??^jP#Dtk)a42y-*erxqGWb2y1Dx%qVuSXWLWmwx_&1JM0`%>t06;cV* z-t2pIsSx?kCxx*R&frqHm9n0m`(YULnuw3p#uR^4ujhu#!pLoRTnfso5;Az*XtukZ zf;hk7{1;2rP`9ogh{?UL#yC(ZVgJem~xg?{(Y`Lrg&%x7yvO;2aWY+&v1f zjyzV_D4a604mzLi;JbNC-%grA_>)yv57nWVQm4;> zv(o<7>v-8KfatYa6akHZxoJYNjy{w7()p;r?>_OmIS@?zK4`T(o|+begS%X-((P;7 zmdwoSWY`lIVrp5O*sKXUC762h09p6n5G<#Wg|%jPa^ybg#PeD^W;WDiv2#V`-^r;i z!^~){ty<#nxb`nu@1<;F z9%!@K>q_7B7HxANw$IM&#^3?~yW4Mboh5t0uD=KRkR`y50zz$N!Vp zd;yP-&(p9M=oj)G=bU_~4*y=pR$4wgnGqNGZRqVEelwmiIl2hRa_8$FI*2TNYnsdS$@qO{%TD}~?#)IH3!|-|!Kd7} z_Ldo77`Iv4gsu2VA{SqE?W4G;x@qHahse(3_dREr|4rP^K}hPW;U+9#W;6S?`Q4YN zZFK35Ru;LDL#rcDqhqM82a8q#kDtrCyN(I7kI2cnA>n2M*KoF0m0^Wp6Jn7zghMp0W7v7u#4RGhMR0SJtWPMBjP_F!GQdpJ%hy% z1w@<6zHu-+U)RCk4k!ci1U(u2?zc^-0JoMkt>4~YoG&IUKv>9USE&Ul$Q?7QOZed{ zDHyOeQinn4Ldt;-ESo1IchPrOY>lh+`a&9!w3_*S!itp8~~v-TG|Kk=*og170>f-D7&mG7y?gN?0K6&pBkzFD|ZiVjsMm4ph9`oTbZq{EI?noM2}8C+r6 zLi*$e{{t)L^;tS;-bCry8!Y^2(I_cv8mmc6TyrjQ}t2^t@Zg%ID@m}QC6B`q#PETdtOVx}JpKAQX>uza-f9*TBde$o4uQ^d1UwGsipP^DaVUEA zl84nlhb6zJhA7JeM2n-!kqFb~JZHr@8*; z{{qODZ1R`#kY*`x+T*X>CXc*GSDW<*;0eX*QeucZD_eJ7R^$W$Ln)TicDV@x1OTrSEaq0 zF!Ik1)<*)I6WK4nPpOWFpiBJ`G(~8$9OVh#`@oSW=gp0zxkNv+|B!M?&Ee(Y;A+1f zM`?W=>DkBTQ^*s*RQ~R zIJP2zC&c73mofDwznuki`b)Cxy4y^SeiCX8J3pxw7AU%bpc9F+qH*=O^ZA#^0x; zi=x77-(Tf+@X{&WnZ2L)ahl&?5oBkFDzVeub!}CKokVlY;Y?>UD13Myh}{lZ#R!=( zOc}`J+cgI?&wCR!gPd<{BO5&XWkYC|6ZYg2fZxhAJkh?dh}wwhigJphS{Zy%Jr~a} zXWAc+GnL7styxda_B#xY^QrDe;j()>ZKZ}*rZVNnMhISSw~KoDJhM`N{04)aH_y%N zgP90Ptbm{hV>!xFT(A>CY7s@~j_{t&uNsKK#NIWA)mBnN49olk+w2`Oy`JSpo# z?CmFBq&Eeu4FzypIfsz2uZ`4JE8ygwE`GPV*%c8ToUwERA82Wb23PD3$lo~8S8$=& z0;^*40uA=R+$Bx{DRuRGBa(n$Tv#5eReAq@qyOS=kf#Zm-S5ko8~r-HU1_~^wzlI1 z)1y4PG~&34|D(6BjEXDRy1WE}Lj)4s-Q8UR!6mo^cNz%62@>4ho!}ZA8ciSs*Tx%Y zTpD+Wk2mkVdGlkwA2Vy#{JU#aty@*6Zk=1F_CCAb0^-nJoM?R{(6$a>jOkhu2}+oK zA4P;!`|X9le~b0l_^&%+gWF?2l@!ChHxfJVd9GP6ImGY{w=IEAo9kO2K>5dyxU++p zF}7ye1`t(H@RNw>98r4J@0wm-Or2P)yd{&R(;IhSSl}%Hs|al(I-~W3h1t9s`l{1s zBemylZm0S2^0#{mh9CB~D3CT|YwM&9|HC9+^^iDy@BQwl4OvnCyKUH$h{H*erU*~1 z3?gbz)8opcn`~9)>ggd8TxjxSbvrw|Ts<`dVL@q&#U&4#8wtFe4QH&0-Ry?ZJ zB?8irrp@Yekx)SVwRx)YRQ7oD3Qy-z9oA340tfJUwT8v4Zm;AN`p)mzou%lz`}=%z zYBd&laOH{V&N)xA?%OJ|iLMgoooP@Sa1mcal?^%4SOd)^P1e|fiE^Wj>VW6DFM^!X z`5s?B03-`zkEf9#CNIYnvlp*pIo;NvV(;#_l=R1VtCzihkG??lFnhVq*C{00l71<3 zu&-hWA(X1F1)l$R8#M^*%wfO+Nh;yRMhxzW-PJ`C*N7D;v{VNe6gP=x2%^O7 zj?A9;OnmUg8$>(n{%1$?t3`oQ#;Kt8Y~5oMNIKJN<{Akb_)RcEmyy{iw2TBSy8$6C zB#!57Dq%>qI*B0EHWSAL^47b}zL1V{Tc*O2)cbR6z*_WVwlAhdK(1U&ghRBjJ|RX6 z>TY3_&BCRI2>|+j#~bir1~xIb+05L}^iPE{6@2#b(R zPm|h`zr*)Qs+308UAKn_^&Ujth86y(RffilAprhDUcY-Dv4a$tz|FL8?$P%Vy&}|#jCXly`|f@}{(UOyDj&=*=UW5g_lQY%BP3w0)2CxG z82qW-{MW<)DyS}UAMODC`Vwd~YCoA8V1%M7$C!J}k>_cZpyUwuAe9dva(wzl4lESek(MMyog7f0i1H7Y|+E5^FM?B_Xz9yKU?{Z4TY;)Vap>}Ydb8DIP}Fq>)ulc+n@J4_eS@OwaQ zw7I4!>ul~Kvc0Ki%L?qIvU`(vJ!sdpenlU%G+TdZ=|}V6X!>O3-K-cY#rJ(rJJCSz zUT$CeC*r=H<*{$sDJ#IN$vVuo1ckLzJw617&y(GI5g5;Q-eHUGUKcD^FI-7=-Ot<6 z<<8%c`CX5+`b~38C<7*X;zjdbz-Tbj#iE!n$DG)#j0#*h5;v)es5zVddCG_*uV2 z=X=M(-s#z!)^})*VrQIP4co8CMChpi@s?xxcR-#CT(at^9)9VgdoKMs z)|T9d?Z+YZl$grcNA^@%Cwp-%ZV2A~Y#Vad7ps~^x`|`7%=ct)v736hY;q$ve(M@`gZWw5Jp#ZyOV6}ZD-NKF02F0p>`GM?l&zygKm{81hzn0>ctT2n7h4E z<_|D|D#5*`s1bq|AUJ14?;BfPR+GPyiO*IaUa@vMwNCiC6yY2}VlytsSos=a7yS$# z9X8k2n7TaHts>j7g|And$sW1U?z&Ej6wFO@k#5%U>z7pVn|w}NW3lEl6tFdxugAnH zD_!*we;J(SKHVlM%Dn*Qy;WuI-C(J&4jDVNSazR!#QYjvN%D$P=^kM)UTrFmZ8|nB zwtY=8Pt~lEqe*PxsVlapTPvsSTvBkPwdhD&Lpdq`m9hlDB0BP>l`?uB&+lTv+c5Vj zQ4D^7>|b<~3KML^^uBx@iDBjEvb9Y2$`RDy*X3;cct=OG17{d37tOwFG~pQt`juAAa}VxQtz&zjj;wImt|h#B)V%)uH9+aPpGrcAZ=^B>eFdvpf?!GBuqi(s{?a4yDZ89<_Y-&yS~_B$&dZ+(Zb6ZBzFFQ5CM-cz zF~nTHM;I-9>!8g++XRKkv8?OONIdUO{?fN4qgCf?Gs>MjccjE#8#R|3nPQm??@7Oj z!>|BxLQ;>lwXr9K{R?o%QI4V3(~4ba%>C`iCk#CK)XOW^jZ-L`Zffhv_ST0cP#cXS+l5J(P`R@Rb74$;9$dCv0~8|P9=}WMsRn$&s&|oKiKb}6~2Rc znaiU*1BW7gO65O2M6V7CDkL6EZ+6pRZ1H!UC&6RBX8!QcmBKu(UoKoH(#Echkb&3KDR&$UYV5Z`8YgQ-WG#NNTv^U^xe(wrgS;#s!%eMx!|Ll>~g%hm$30M_)`)qKnjOJ zSVnxG-H4$#nLF`JfF4%O1~tjOk^g1K6K$O*r@&H^j53s=q#DWzeve00C6Aw zaBsD;afEl2_c)oa)~#-Gx#8y*ZqzRIXytb+4trdJvuQrWMU@`04Oa<}qh$y7b>=}#kCP0-G@4R7oR$ki*5!0qUC&bxg5 z?h)tuS(T`+$Hm@h1bg@MMZa9d7b{~A(C~Bl#?__i$IBx5$NgAK#-CcLtJpW%!agdc zY`%M&=q^jH_Z7LHN>oHI&YBBgTd#*> zVO|d+Ymr9Yd0i+gt0+1A4?o5D)9+?T{vP>wve9Ju6`^~_>_gbJ{GJ(78_yNKnQN~e zf8N~~^K(K!+}F$5WQ_>DGV40T3Nrb}ycDT=*1G;Wxs_Ib5kst=BXm|^WRRub(l9lB zcEffddc%&^ePfm5mw5!IO@XDqlkg^Myhzb$^;iYxItsLA#LP*l1Ie3L+M?>AuSDE- z*Hm)Ej9RZ9>P@7pcly$>mJU-CN|@Mkpx<21I$LWL+K-N#LvNGcjk{0h+=N2J40Vtb zZqM=yVh^5|>|iL_ZQJH-*Tv+~XT7&D{jFe{lgS(K;DleD14$EoXM(TYqlka6J70sz;k^5z%l2P1#v?pSm`6T3 zFjVxxza!O%Q(5@y<)2*`9+JP1laGK)8(7!jl5}&qjZ}SU+WY#I*Q@=BWh$zmQ=_cM zr8bN%PX`kbH9mmZFykS$`E$pd>&DqDQ4Xh{O;#PSSK>2v4~tI%UXQYD**9{l_e`?b zBCVn`$V-LQ3QEo==ipq)*@swSpUIlH2nl^%mX%rjH;~!SPg|!_u-)=3J=)H1E^GpA z7(uu71AL{dz#LWydc9RjnJO7*?tyu#Y|(xxxx zF2k=sMJLQnTeUu2<4yT^yCDMoM>CQq^TF;kK;z?M7bhs=aK38Md;0;7;(KlJVd(eO zcFxl*4xU9-Bgd}#P!c4EboV}ZzV}e-sw}ol^if4>=RLX5;mx{Ps!CHG^L5FEEikv_ zt)j9@dST=vS77L;b}(}(c5mi-gLL)#OQJ!0i`|&d)zi`}k39c3VI$A)LSpWnpFJIK zmMr|M4VMhtP=Ox`Gu|x+8ug^kC-*}y$q(mTSMqMJ^16<$1F zoo}o2Ywdc-OYS}wd%1goLXD@5%iXNDj?S#Zh4`lpk8pV)^ciDjy`42)pG5!Z6L z%k$kQ{~dVoRIcX_zcH`rTB{=**nQUJ=Ghe9C8^H+u(t7)8A_Yn^{^BkEJy6(@-~b` z;3Dl}yte3Y!N=W}!=WW#^kOxX%t6rQa(`YbvhBBpo;o+Q#WpN&Qpg za2kO^Bd4G+dCFRca`Y)kl(l_+LaAikE@5Y(E#wKpVcVI!zw97O_^j^m_1!c-K;GKC zB!EsaHGga=i@Nl&C4u^1$b>8R|73NP7W@YvAi;W;=ldrD2Dg5e@cZYps_cJ=9D@G= z;HM^@#rggTX5`0&nEVSbL3M3V@wr|N&BV?Y@xBbfefh7KIM9S*leE&_7(4!_Vs(@3 zD`Ng*wAA(DnwlDaZRC9H&?^SXX0(3{3*~8IIpqEO_tlzObI^Yi3;v&U@V^=R0S*Q< z=-VH&MlZUvZaP<)e;K0n-8Xd;{epxcP3hX#SV**I(JDKIeCl5!ls2lVrQg+6^8N8S zS5P10>|u6)X;nVP-jmNH=i!OP%9%l5?K4c5CVf)Zl_$(2m_ctuJHkCQs)3M~qd;9Z z9jmYW+(a{Y4Oa+!0b<@Le!GaxmTu5LWZvxkQ?o=W-`)rETc#szNW0nh!wRL#M)`8b zCPPL#t9E^O*$|)0Ecg#~GngJVUw?}3braf+G`-qH>wKJoN`TJbmfh@AA)i6Cf>nem zRE*~|k?Q<>VNa4iwcJi+3qBQQ=dxu>`WxMcEFG(tjfnSM;z?AY#*n+BhH_MtVpWKi zWQv;y9rUH1dWR1E$;c}#RsuFehBgBU9zjhSQW%H$NQo(NDLt?P)<|e0dCY!hZM6CZ z?MriK56tp*dHpdJ?0t^QZ^HUoyG4aHM?bWa#`dk7P6pds_phIL2$S-*ad-{VtrNtP zBjl;EZG+RxP`TD>p~#^D_TL;JcWtA=^Da^qOE*hx@fr+U3Y4$E3G#C%%n7)xf8BM7 zfib+4+?knh%|63BjTa~X{CeOAuBi`m#c05MF?f{jz=^X;?Gt7lr1(pw>ADf&jd^?F zS*F&jSuiS*+*q=7Uc-A8V{=tHM0ypk#fiycVXIK&H5RgPUs^6p^3&W6#kwgv)I(>R8q2GE`>zv|6LEBFlU((GJfDNgNk6&2HA8fM zZ7Gwze#R6|t(JruK#huuokkNt9iF_NlpKABRng_^}Bj3^6mNGzlaE5#OX;n3WNz)^*!3W#u7f9Xy!J*9=or@|EmYt}V$a8dFWwflm z)mVb|DyelAj&VI)&eYByy>`w|G?ZfdHh(I^@cZiTsw>m%$eR3fgAa>N9|$+o+5b`4 zE?w@;(&_KFC-tPgt*en;GiBA;wPO3U=+zX1vl}J$2;*5azsq|Q!K`y?8x#xQrSfym{n)Bel&Z8w^rom>1C{f}pCo*|Jf71CMdV=a#eFE|068cX zLvknOt6>i>1sU4)`b#w6&rNA=F>RlH)1GIy^0c*o<>n1Dm&d&fAJLHRi@!5{ZUXNH zOFMA3ER##KP>~^psW}a$Md}Ipi0kD8d2-cX`sxmugnlxljUpoegNdYMR=KFJ4mGT7 zLzD!cHKy<^IR{t6^ZMD%xG22xlzQI+K?d~rOmUW$0lZ8AQp`#4$E(3taj&9^Q1aA9 z@Ths>2~8Pzw`RC4Wl*?M%JL+rHHcu2FYuz@oqzVSLmT?!!j8T?lth|8RG|X-PVYz% z%`THL77}14p^kI4o5xR3D6nK5#;Y!jhdn7_O9|INNGg$e@ns;dI4or*Rz{SNcnB^t zCzq%`+?#e{tjMzpRY$bTEn)9L`q9qQKj|gU_=iBSUp1TsiyxW zDwW8waoK3e2jeTDm}Ru6%=QN(nhC6<;&3w*$!B0qHaJtl+eb1F#_3AqW9xLY{V3=3 zjYIIg7&%2t6Qt#+n`uY-*4t@H<+0i(g#mx+)AoL_A&2A|lklq5CJsV9CXk08J7Q;u zP*H1H!#GVC+@5iKE1x1!?_d^lVGv-kP7^-WX8jjr-8oxf5QhDZ<=klqhf2s6ZPWp+ z^BZE>mS0hps|};DHHH;vJdJ>4cy5v6A1aU(-5b?=gnQNch0knbBVr~EV$U=kZ zX>TWs1D{~3|NBYQ?R~?as0D6L|G&ef2W?D8sRCa!)EOCYNG4P`TqFs&oiG#mCW%^y z;5H#!`|(O9mNX+s^_C&7aPvJYD+o__`P^azj9!^@RsLuP>976HdPTT1q=t<>4-uGN ziK96j+TP2nC{k|}b+i_zLs6Xz5wWon)^xdbA%AP>Wg4gGSvP;7$e3=gbc8;Si4Nf7 zUycZ*Yy7ricM#U>^vOx;-p3+D9(iV^)b}lCMkLz;nWWLsq)!w^j(eplTsGbB>Of$& zg%sTtnq=3xJ>D`veDiDOCyDAQe2sxqicqnmv?xJMXtqXW;4%(=ErB^;e75lE(4`Yu zCYoJ@6JLvcHxF$vT|?qP4wDcUFeWACeD$m`$yQ3^MN;5)=dX+mpf^Kstq)g&rg6&5>;Zjb%EZoa>tro8+mwm{j*fW~Rs+J7<^@uJ?qm=)4)Y@cDM;wwVQ&3frVDg(R8! z8|`vtH;_H0CU2X51(TqAi$J;4Mc6Pm=R9kox92rqvzqJT{l65kcRb!u}?)Sv{V_`p!k%|fd|8ZRr z(sV+Au=iUq=Z@BqTDsQH_mEyjd@RIK%a~{{QJ!Qfuh8a4t)S{q+Z61eJ#4p&O$sg# zo7CKxF{09{@UxR^gDNd2DA(s1J!4Z(H1Rdh93tml@in`_)nu3GHEJ9dg#6C?8w+Gu z8bXj4ST!k0kTW%+jvySRs#gL%S)CvWw9snm;W1};o*u$Ghc*pWd8^8NRYfWs{=Xzq=FB5= z*h{z7vU9W>l#k-=Q-t-wi$Y4VtvuZ5&zffDF8YsoH7z3?f+>vz$^_+twd#%g+p)QR6wzQgYsIDAqR!dQlgC(?P1G;Kuvu~wY#Ei5u zGUDy1$YLY07pf5Z9YqTkxh3`Q?dz;BcL~8BEqP>UglmdLG~pUbkVnN{>CpRTuV1ka z{(^WhPI@YTr~@h4UdUC?x_yj5Qo}`9cxr=WM421n_Q#7zk8xi(r4KV2!f_!=U5$ScO924>yozfD!c{N5=MQA`sa&em27ObTUP}G9ME56^Wc+{QwMtO}Y7zWXz#zLaLa-A%tw2cC{8S1tugwOfFRfwX zNBJsV{NWVwKT`3yXpJxWEVhg5%Jiz#5xKY~+8>H;zLd~l0tra(X{9QragEjyN^dmk zKGq5?@?Lmlt8#~yeN2#!eN8uy%ApUW;Xj-j zzf|4_)CwqcUqL`@WO=IB#Y51Khpqg{eo|iO~ zH-g@~nJ(SCGL=$MsIHqyYLUQ$CSG}BI=UT>2)vf@n{rID86jP;P%Exu;OJXeDx0yK z^7p(Tsc?}_@GS_`q!9sj zHY`>CBJXW(XLc;u*`26SkEpgm6VP3AuqC5vySe!(ehLm>LP8*yYhfNaSl0^$O%F@k zidgPlgy>uyaBOJx)7BNzG${3e|Ju&>si)V~yXFC~i2Jqi$Y|7EyG{(^~1#!y^c|>SAXREPl zAOKnkay3iT+s@DX!w}+4Ndy;VukPVspY`3HZ-T8_>>ch^mReco*Jef2lf7mYHVNyL z&zt7j>56>SvKd)do^pezXUo++2~l*tA&ML4q1~WE{EfSb7L1&^C#Ej{mOsbHt{T_w zJ|w4(1y{z1fAbAec-)XhZx{wW&&#|^8CpXC5LacStT)SXPL`>jw8qpJ*~}c)7*YP} z)J@LY#SAOXQi=wg=XXl0hIr2&mEWQKVO59o4qz17@RTrVWo{7QQ)wqjlWg#vAoK#cY)d`)Mdbi3uP&2g2lz6p`aPu9V7GZG3KqOZ+Id~po@ zlIF}d#3zkGL7O(Tavm?Bn#+U%H6uEarh-cR_#(ew0R9FN1B3|-X~o*wjf3?u<6iZ# zqa+GYff=&+khv9Gn0SHk2NZQizcw2Ia%T#%>;x|sAKVga-CXHXj8m4OWOA2A!d_|i zv>7DI-zlAp!K31u&L4hvaJDyRjGft@VN-qG>$R7d%)~+`0Fnf%i<|IqfxL0+87@$6 zNu0$u9CP+9SbN%cgZ%jBbH7Fwt4|b}h*B%Ibm3@VRsR8^-Tq4u1vI-sQ0ZeDx80Bw}|H!MaRWuDK zn~h5_r_8)kvDY)M{ClQuG7@QTA*rv0WrO_bEke;41H7_k4dXtBU#A zOjfUl_0Z>BLNiAmLSsH3KczC&d>8#0Ed*d(U?;m|07Sv}5rPy+Ib<_2nG^KTUQR2%E*T&=zxF1aKER@HULe&}bIgMTe&k?@j z=JV;N6N@*r+@KhVQW_C~64%+$MzOPzA~Ri2vK9qW=zqza`cTmt zmR0|NeZ<*j@uO=vF^hufBU-qyZs*Fu_HvBL_oEvN6oaJlFQW+gq|Oxo9Nkw-m){X% zc1$Am1TWd$P0RWOssRs9l<=v!Kq?wqI1w?TyxnCDRc5mxBH(}N$!O2b6cZ}>sG)=; zzhsx6UiGj6O?ej5{COe{f)y@z4u>#n#l8LwdCT>X+BuFHXOlGs2qn|(@;4D zq{t^*5ml=+3b^eG;wpN76cSK!HHZkm()c-BWQ&XQ+xUHwdQOGES|1*SpnJc8DEs@z zJa-@2Bjc$a%RTrFu%+L@n?!5-tB>C)Vli9H^2|+znj_$L}_7#@( zKbl|;jXEq_(2~@u=n(RcfT>SrW`!t@slc?8xdl;!k~txCE{IZ6r4ZwNfi41Ly_o%_ zqdc`!WiAVJ{zBE>XC=N{crfYV(fH%LQ=(1P?0iJINun>dK;DG4|CDtlZ8A}N!!(|8 zaTF2n(z`*3BE92ztij1W4uh0FcsiFcJi*Q5LVjwfNWIp8dHBn`LGTo`gVhzpN^&K{ z)nQp*rdIMBB1ze=_9~xoy!HwVnZwZC!(|0-QF@tPbGqb{qJ=fW}Y_-I{UVb-V z-Gm5CtmymXCv)va%oJ&3rK$4*)=5_QFn(E2DV&f>*qDr>gzIOGdHT44sJ;4a!d?c! z*NEEvc5xB~6LAB1X(Qpbc%5{PmaWk$?&%Ir%%Uxq69P4-VI=rtn3W~-$7s*dneLp- z{Cwe=8}@9*;J`1{O3Apwx-koTt_)QUc3uIX3NJ#nOy3H`pxAjFlW8&7s3o??vum!Z z?BP?3E}?E4>FT;mkv=-YJ{X~g4dik12UfaSplS*1p7naF&+qAFH&8)t=2Vk)Sg0wq z%NTy7WF~^=CQ?!);_PL{9#jybNdNK1nZbm>AA9*q4JFmWJ1LZU_qC~%YHOp*C zx;T1N%1V$A$nHQd1p6=3+t*3Ii42wu3NpsN_jX)*;cTs)l!wP$D>4FDTTWf&}8MaO^@4Kz+}6SO-IDC*`v2mDs%#B){HjjFjJLB_yf1hlQDW zB^m4+lUV7L)%+$2K6e|3<i*#fL{CHwkSwHAf3KPh%JJN0ttb_U6p4rY`2@4z5;? zZU;|VL>@hQ|40V#N!=@bcMkj+*F017P^mAEiu%`6Vk)bb#RV|T`rj0v!s^Ma`cx5b z>8DvlpC*+QRehzU3vIl&=y)Qe+$g70{I#CZU2o6@KhLrhlgBOqGd441=3_3V9770A zbRDNX0!*baniWs}?aRRgd33+LMP`aT?MdcFie>Bc%uGo4&e`*OOr-0J2aX?F;J0sQ z0(mosnQ>=PA1Ep(NTjWNCAj|`+bp(Z6I@Wo4?pr)E?*?DPB9wzlBc zq`ey_L_tTG4U5tEozCg3nfw`p+2X-3pML!*|Ic^Y3`MC=U>5>c|5Y38BJ~Tnw5)7n zPRBnFBwp~p>uQ+WPfWy*k#1*`*G5~IJP|NGg}I!135f^4#tQ)is2YB;m3Cr2ul$gS zt)i_>s4Md10r51zm@r2AEk6GGkyj8Vi3hqae|=qDI3fEo4nFoGF}{yPV8vPbdY^^A zJ3##p!X`%6kf`sqo0*vzjI-!uS;=Z|Z_jG>1=|~cuXEcX`4b@A|0UPL4x<6Z1N4{Q z9c=O-P!p^1m0}Ld;%U!9uk)KwG$;F)fEouCX0P3G7AN@^?{wabJODp>zDcoy7vS~W z3DMe^V@sX<>?zE8*8`V0lJL*yh8ugKyw%hTC%;zUCeOJn-Y(9|3h|~I>OTUwgl^fb zLF85*J;5d;o7Z|a4UM<_3Yxso$bHsSWB!Nn7v==spcmV}AF%+Ogqmm$#4!wGe(ITV zJ`8>N6%_c~Y5ptYfFI^Xwu*Ar%?s;??nePH(J>cqPshP4-1s9!QoJ7sW=)y?47}36 zOkjER6S|n%&pfdz`-g!*J}Ry+CmsqOm?Kd}GuMCgTK|*P+6yOtp#7|uy;<^N+CZal z9q}LZ=Ngt`ZCeCCKf3L791-t3wU8JoivN`^q51>LACO0H7@~jwy?G?|4CfD)KFjXI zJ0E@QZd%L~OBI><0S#466y-OS2gg-+3X^zj>xXlI_5yI98g!1qFHB-W2+fh(XtW`X zzWw%>pW7;cSoF08wh-@FjC-cjC%}SaFd${zYV7_g!~nCShcVV@o=x@-PG9igrBQD&YUarbKIcYi+J4nkW(rfG z&d*aM9&PXeoz-KSdz{r+ZU8*>R84z!yme(dx1|bYt$sIPf;@=S`A^jS6I@8-JdoY% z%&8Q62d-M7<@I@zY`%#leV#uB(wIE_g&J?PHhBCrr{Bc!Q)+(nHI2wxC((!+3_XI| zm)w73OyQL3u+$-|yfE;ebtktgQPR%f%#Jz==+)FyrIgOd->z}38l!mc&o>0En%JZF%wLx$T|_LX z-+jX4WK^>ln>LN5m44FKNDO1x@c;^u70&EAPwnvpk6S=z_FhL(QPWzA{YI>pF*DT_ zC-p6{nr_@t1d8BU&-x5ij9@iM*OkyjaDPqwR*F{eV@3C?#c<$S4VdsRc zlKV@xI-}*YV(zeHIENw`pNZg^E@#&vQBrp2YUJ4+--)Rjr#A~2^}4=ssB|Dt9u8_o z5%e&sABI36_9gQTwf(!xQuOLFab`F{wR*3BzE>>13aW#-C+fZ#vagfHwSda-oQ3uo zo#**2uN3uiWhxnGiYM|{*9Rf{YfK+g(-X>ObTtf3l$l?OkT{d{_9~F+$ZFQ0$|CK{ zW*cf}cem0T=B7V$spIXqH-=No6-1&JF9`dqGK*?!s}^dn-hA^Q>5~nQ)!F(~STvZr zMVb-)go&9--2t38K2NbSaa)%!(pHK1^I4eED)6U%n5PgDdq8fGRx z(OC5}CQO=KM+^Y<0I28&pN@IBakTLKj(3eqeWx7RdCRN;0JJN0_rF(wk8gFuE~Bjf z&g0i!X1(5Wgu#~(*`8E01`#VuLW;qa4?#n0?cRLmLyQbb@iW@0MNt`?O4J`*NY3qU z%Gj-_Hk|qNZv(%Tx~M;z(_K7^4w#3 zr&=eCkQTQOwm*d!t#&dlIp}ugw%4H0TdTKE;0apd^a;`*crBS3|2?+HBn~G}wOE^C zv*xg%SC$eCl-yv;)c-K6Rt_r#Ua2k3IwZxJhTKjZ+SJ2Uwp)U_0Mr{I{EVp(?Kn-# zIEC%>+;YuaPlcgPo!^}SGZ=ftSj?%bda>1qYZ=#(3%ojqP{~0HSB9F*boQX|Z!$F3uT-Spbd{JD!XW}x*)S77-bOgqi`t3b( zZ8h?Y3Fob%qfy=yE|!8W>!)4laY>a&#l z>uW|XE|S5+Ff#4jyT*GLR$>fhL)mwEI ziixowMiaJeUn!1LVPhZVl?>V>6^t5bq{-k{YI+LWTaxs8B%}y)oCV0O(>a(Yt*KjCsc+i=`2D=T=xVfNQe(Cy| zUcPI}j~$UoTvz4tr!5$;Nb?$JgLKw))-r)#W zf0z8v#?g!MhWpA1>oV(T`IPtj=AT}%I$V#1+EcripwU7g0! zq9BR&=|zF*UrQCGW1J=GruS*zG=qaL#eznb_hZ4GSs|l*%hKs;07F4Ox~_azx4*i zOVT%7)rBZL#oZeufD>b2T+aE(MhT?yr6ji$Acr0c?vqx2+~VQAUY^Px)NGg|!`i=- zjG=e&iv;M8(sqXKl|J~6dpV$)g9FoZf$|hwT3VWttMSy5>C}RFH=PZ%5J*sW!b@8X z`+?&4?~PcXj6t!N&{+p4jyH(qV-X}SX3EaaN@3Hg@G@h#v)e+^;(U+$_9Q8u&Pd&a zBuYn!DopLA;JR^nF*KG*A%pJX-Pl&0dtuzQy!agcPML6#YcvzH;E9FtAsr2avqQaL zFGC{M5fDzQK{ij8zwfnRA9#?F1c9i?_kDgD`Z{r}lT~KB8~EvjvSxy8Opx%Zf49#0 zmZf%SAvrOFx~z~S7dWL00EGKY_fv`c?~ew=C0PPaAd{WPI2qz)hN(1`KIGNoJ{6wq zp;H)*L;8FU>tE|S2X5TZYzyfNWg$SLxWSQg{VTc9tg6GSr>LDOwqszqImxlz)(}(5 z8zSVI-ihPP&o>vI?)W+;NcRW-oGG|0y?&;oZtUA^Y|9((P!1W6Rx2 zJADh$_&joC`s#ya8v*%2u>;L7%$_i^OzuH2h1<1N51P5CqP|-t$Jgl)$TV0)*CU$b zWYJwXi2xrd;?kR**G4U6k6RcSnp}4}Fw^>EMM(<*zuGKHQ_6ZHd`Nx~xx@GE3^;{E z*8BUI`g02(uqH#vgsc+tE9BKD9o54mWvG2X?uMD%hNQFy*M;kLMNBNnNeHW&C9C2= z5l%fxZ)k6sGlnID4~P-8U8j|h!V|evOFv3tzmFVs|2E!QM%`n=8p1hJ9%Q5oU;ato zI5DFL*fXq5YBoIf*!?~~=<5~jsbi8ehLPyyNdUgja4{_Vl3dho9p|1JaFCGlZh5t% zfr$MvO45m>G$J;9TrO8c&*+0ugIx&(Qnr@m4WB>vV8w=d#%GnSrPXV4UucgMSPF77 zhm1#+4aRSI-dA^znTk>5G!sDYwKRBiVN~-T?)Kxa6@8ajNJW`F3(_AH#>3axuUY{v z#K&EQ49MbU;IuHBIGs9oakkh$=~?C3pVI9&FY8x{86AK;6*BVI;VtY2(nwiPL#Lvf zftm6!*V1oi<+(8UozcRWK*AR93EZ%<9H>MsXg|eSQ&Nt{yUvo<%e&vhs9`3WK*@X1 zJ5lT+7`cQ{_}Lvxz(km{5d?%Ax}cWLf?ku1%+D*{^P};osb7~QjoekXbzg54i1q5g z1=JnvSajSk5h+ zyW-jHz-RM8Li1gV>S$Lub#-WwFMe%tt^}nmyAJIIa@A?i@ENE}R#)%WSs)oHF`sA4naibhV_0gfWuXJDfgRTV z#Jo+__f$tKv2nmsw0J6N#&d#{NaA$08*5LGXI^lCL)rjdemurCpQ|%+wQ|Asbu)K4 z*uilzg6}G3oG1XSaXm&rJzl?L%`16aLE`bmdqz)JSGzK)2wrZhX+~07s#Jnst^i*m z*b6>zoX3d+YB724hS^{oAa$@r-!dM%-1kt!hUCiUG<88}QFOoGhOO~MLMV@e=Ga!S zqK>-zyo)33tugu$#^ANBG!9p=?E>N`u0$qkj@{<>M00>bt<(&Yd}7#B92M|Pn*Eqn zS?_LwoLNQca%=N#^4MEyJ)?YUGxe>8FhR$g!;~_k-iR41=|Yf{~Wb z%jxJDVM%%(lNR>(&xOUwk^(#&*w|K`okR2FepL7_$`mr`@O6H@7jq{c*_$nF6;o&t;_bVDH}feGv3*8_*xf6eumAPk@J2ZbsJvhVXpNnq zJ^f*|ST=>|DKcy-%EkLSu|wT>UC$8Hlx=63B5eJuhF&$%T~OYJ#HsOms-2meXt9}g24v2{Kq*Q(vJbV{QL z>gm_MV&%d9O^^61I4^fJ$-L9>{@jbqRmV?7y#K5DoP*mcyN^@{l7JED^Ce{aRv3qh zNuQo&i1pO0G@_}*M2n@zz@n^zZh+Sd2cIcg2UGK^dE8&{zKo_6@L@+=JZe-z2!VpO z4G`Rb!4<847LPY^dmyrCm^Y3|ftiv*Ml8n!Wf*|u<7}K63VW|uzIwo8MKZ$S>-?)= zT<5a)ne$^g^Q_v$&W_MhE=*EpV&>;zQt59fW1=ZSM~Rv2#F(PG=YKE0uNGkWy*`{b z-b5(TC@TgS-VUTwNKmv@7~s25;*4ptS&^m-BhwaHN`KvyvBgtVd9(dhroc>5u-P3v z4Ik<#U~@+t9vtC=ZG~D(X#qy>qmu9)E=06$m_gXP@si*qgoiWEtw}u)b+|S zEy?F{&VW1$c#7y7u}Od?5@@EcCKtIX^@b@L5h^$oj+?Aesru{aX_n9u$gIQ#lBJDH z;$(v{-gxh_=yXn}i!{1aX>F|OfZ+ec5abUU#IU&Uc&tD8oaWuycNJ$z4H0o{EVknh zkq>fpgV(aGH#$ZScEU`F9mD0l#1Uoo-AJ~J8oh9I;KjFF1mizIB2M*g+N9B~GY|Nz zE7V@2(81GxovMq^qa}Yup9KpSFAHjCEjHm`nd+_^)@95*oqcq;Lckgwqh_RUlW5MQ z#i7_F{ylsxRIYTqZ*UxrJyFJ~+$y#}-}0V@I{?zH>*&US-|GdaK8_=~ztmq$EDMFF zE8lf*_iuhQ-`K1xOr+Mnz)K*eBI>*26_%hkEv7@^k>>VmXU4tHsB!9uAAB}ldg38q zQPKEnB6=`_RjF4y9cN}m#8T%vbYm2B2Vg@MOcid>(w_84xAPM-^vQ91NJ#E~eaexb zm9WEThmllp?FTA5!wlCay<`x24U^tADjMCw?g{iyF|@y7_@ni8ft|$A=V-aoM-!J2 zoY=QFp*v9jeg4N!WudV~pMR%VcD5fw$^_bE5H5|XAMXsL66x{82C&rvI5ik3Y~dZ$ z>U6mfFWH8wUL)8#&jc^7s7M9nmxdka85x3ue$W%ipm9@j_PD3Y$RUyv=OtP_ly7u? zz!B4`H#4uNcDzy4R+e$BZ?vg{dT;>y=<0USxNMZnjhvg^M@CdQC&4lC3QJ}8^r%qeuneLie zgBrjsQiP8M52;;KD!}9&d5yX*!P-x+TN>RXpP1s4a-dvDRznCmrYLj>@;5(}f zK1JCe?s^?+XW-Q>pkstKnRi=-)=*?g-@?WZ>%r+VZ)3oz+}S#TT(b8NYnDJd1TsC9 z7+D{--&rZbAT;R{a9yx%f3^QDOx5pZF`XQ>6Tl445II0JnLOupt?e8!AXc?3ihyp+ zKQ!YQmNVyQ;4rpuXavx$#vkg(n%8Mx+N3pMbr&l%S~XR8Tpw z)SlX<3DdBjvZmcG+O=cyt__ED5%l8L7Am0M4jh?q zXqN3wLm{Kenk7(Yz-qOQLH~UQ59(7&42`9^{=T69Kt9R&xFBB%7>aOxpWE+eA@jA| zPR$=V>?kTPukNxRdP-+2k*%3t&E$VD>@BoDB9z8KZF|*9h#doO>}4A2t;0KDNMz|# z2`N%3bae1ogBMXpF5{Q=8K<)##*%txS+LN*W$b|e4XdoHa8jEL^$tu{>Dj|)_L`su zG2cJS)7Zn+#>=Tmm9iso$;u~ECbjV@ABf?1n$vlYosfmGWU2IANy*dHf@HrI{u=4; zF6{FLP-#8%5%=?i;-_J1Mpi1*--fh49G&nZI6f)fKW1llcA2i6xQ;VMJ$;qcy|Q^n zb4Rw?GgUliLO!FcQ^xN(Lrr0LS{F{`>tCQgb5~OF@#hPaI~*^cAfd;Za`N_Ofi3wVLtuyed_2rE%3AEyS4A|fX3&mJ{JzRJI=U<6|>cj{g183lSd-kHX z_s#R)4Nn%^opJZWW#rK><_?jA^;HPa@U-2vqf*R7AM`R+=FaPu%h~P@HAPGPbkIb* zse1i{wd5?ZK5c~DZ+l^F>AYG3JcSrIZ(0}vU5W-J-LKv4IU>6?JO@&F&3`|{IXyT9 zmP%1cR^iaGs*Q*Nsjsk)zg(pr>n+BNr?6XxX<4{=94(ghEa+GI*~o~=f90Yvwn>_L zsh-lnU^_*lAg>9NeXh5bnDN?JRk6bH2wl!Fb#cUD!6E}eqqYRqvL&5v)~W-fceSM$ z4YLE<>Cj*iaZIM;JGHIEvh$}#f^Ry_%U_ITmv5>DCnA>fiHwa`ADpcYj=QOJZHh`* zv5%T5xE40^?k(&v|2tw+yA91z-P5o)#=OkWSCg>8b^+8DeR`XN{vbE_AaO|P{89l6 zltOD%^K3~!aXSF*%tObevsD|tfmt%QYbCa4_6FnSWuJ?$@W+rml?Zdav)I!$8Hz+| zcS(!7j-nNswLC_@;!?NvJjT7X8(}hvf3Ur`!;melPGndqhQ*eASaI>odT%K+QWI3O zjBJ!y)Y0iY=BJa^8!*2)?$uK<8Kw}m<#vu>3Jg>*13QhXEL5*Bro5x#KCX%!Bd_6e znqozU*XoM`A1rGp%~OPR4S06FO|j^> zu*gB}GoR&l-F}4q4rdG7({56W&}Reodyn!>KNgn0SL$?rLRHvbNk z2FrQfH_d2n!aPvN)``Y_M=y&YS2HAPv+m3x{}3|&L7kd@&>PXMRkc6^?6}U5A!O3C0GgpniaXp9INBt_L3|~+p z>!zA5Tp62yV1hZ@d&lY{dW7_wv_x!6x)Qo^YNi;pahs4e)gXEN(zwSF%vU8T7?SDe zloT!`B8`RbE2)5v(G zNJaMo6qBRjB}oExt@GQz8-ECOoUAa$EjQbX0z)o&7f{Cq3s;UW1PmIyPolP1hoVm4 zXZ6tfsy*X9cR?dMb`Sl8bs;hv;7R^RBgb&F-W<{X!;G*h1tU02ZnWS1d=Kfho7KM> zU%jvsu^;&J$yYDq3NV!MegQWOx9gRup3dOZ>JR!mPZ-4E4HP;uP>Wi*T6N@3=n9T{ z*T2Xds-TLk69O?=FZaC@LE%?vInG#Q-0up3DXACunWBnWeR6A!93D>Lcl0WsUL!uY z%V21_36r>PhSs|cY^9f`s6E4a;YK75h%IgyQaWQ6VLe!_gX-Lg9&X2OjbQn=ypC|? z7W`qLM||1d@Gei;Q?ZwadrCjTec>)=_r%&MV-`P7p`TUZvgq(RF;Ie?hV5En^BsagN=l+SKh)Jp?3*eLJ_Jx=jhhhAC23tN1ez0rwwH@q5mBtyE|3nVP;a4EZ>5lOu63DL?oO*oZ#<@!p+9C& zfa@hty{D+L#zKN1qj(2oaI;@;DMDopCsmxSOJ{3p<>2|?*J=c2X(w(aQg_0rnh0vW zms4Keheq#r*y8tUJngG~H87D8OM`CZ+V-|Q2rq!oUgmFp|Fx~*Ve4kiOH9fEZO#&h z%m4v;2bx8-TAfm1J{SE0dt?Z}*cH)Kyc-cVx2_Ds#gm{kf&a_}@Ko8Mrof?EEmL@r znFRG2CG$%X4J|eM_mtkX(dI%!+uRNGr37xFWDVD}OdElNBCVhdvZdn_X_wEF_&zwl zk2=MsTQM`MNiMS}Oo+>Ot0Tegpvx`lwX;6wYLqV6-Q<}s8PBA07DJ|2XhXR2dZ%}j6kYfNN+S->&pW6}qVuYU1@y~^eay@#wJ zv?2Rm_mwwEHY5D3J~7qKE}eEr8+#ey8^!7!E{n*RuA4!ED^>O^Ce5^rM&b4`n|h!$ zAvIhGR?=|Vkwy&MMWlzVTzFHg)XWfNZ`ROoIfC@0v`F{t!h+9Q9PBS*lTN%EJM|4m zp0Jj-g+Mmz)-zy{R3ax{$4;mp2cmv!qdPv1>76Yt7u8omH)II$ldOB?L7vT5r)lX; zU86x9d&TI*q#0kNX*SG!wRC)2T^h5SWuTipndRFnrk+B_RY}cb=cXNl#}Mz9Ec&G% z|G2Mt(LZ$woS4x=vuPgWoN<3{5WL=|drE^)o!4(}a_JcvbB*t_AJJ(K4QH9@Saaj_ zS>k^!srqe9&AM7mo;4}GBDS1Cu3P^NDUAuAqFb(hzb(_8a_>;T48cs<>uUMl9tOsD zETM^f3aP*-?Sg1}+!2lhc2zQ!+J_KW|EF^(Z9>?tCW#7H%&3!cUszaJO~_blNrpu8 zssDgdd~`*{td44-e)4;hax}SDv0Hth+r_gVy&d{UMme&y4B7-Yy#hc2UC#vJRE1~k z4CdK@*%Zm_KXFQyoO++^)@!t3&ByZE8R`Yf#qr<+?o#ou{DOp{?NjL zQct>K)W_+y<7JJS%Eyn=VW0SS^`N>KA>;IM33GnHK=gz&;*7!6={qYrwNf);dvpGk zP+4i>$&BHgWIm!jnANFb6rU!xG@hzNxL3<3qdgm%DK2o}XOfb$*P*g0iFv!JBAwnV zB^Z%5XXgme+<~_4Eth+~OfEe`EOU=ytOpNW4RUwBoL}Y$=P17n5-s18?7`;<*1;oi zb60+wm8oxCF|x~$xMATAC&`44r|lA)*~^Yu%cPP{hZ^M9%=RzJUF-)P=e)!qNJw9A z$&W6S4#g!CR@HEj?%rxnihz#C+os8+mm%aa@4lhyJSi481(*~E4pCCTj=m$ar3sK) zni#la?9Ft=;bMzd4!;B%4c$mk8;iwhoGVw%%*+UOhZ*{dL&Ak(^eE5VYyT zBXc_hBVUfoO;q^#k*RbWeA<8{N3#C%t}8K2uCmLXuHkgls&><{0h8BRGcu3l^;ZOQ z7YG!{Nurc5ko42sU4BcgUFuZT~0%#0Hw_NPO$WC-K2l;&7jm zQ)?3a+^*SRo+dH9<{iOf;N751JackPZaJ<=NCd6S)y(`daYfR}5520~g}Kdd(a85I zI!9|yt`+%0cmMo=+4-6kj2torFmYd7gf{xteBBapIbFRRPGvpgjzDG7V*!Eq*b)kg z@mhPe%3~REQfN?_%>#aFm0suNyWpK2e!p2qNl(QGYlfRlw@(Pyd-er1%y>f>k08j z9)PE156BOAa&}aKpw`LF8B1Cll+TY$2!M2yJ$Dp;2zqe2YBg*j=bo3iwh{~?WhaL3{M0jR zZw@qBk=%63E4K5&bqmShcUu?Uu$z(0Iu?vN9=6OS zySL|xf@q(p^g$NPUSo|uA5T^F1(-gZ-I&kP$&VbesHd)E}g5FybVa8CU zBl6bW#u1lNm-9On!%t&(t|a&R*@D!Calt&IT5DNqV;TM?wLAlv3`((ikyP0sTxbf}TeIC^p)*H7kzIK8sa-GDa zxOC1`OC2TDCJi#rRSOOYds-(R;NYyd^B_sbNyo?2-qlPg^;2i?%ksw^oC(}zT}i+| zFw6Ctx5X1+a$@Y5s{}2`30nv~!r>to!ErT(j=}G|pRV#E9x+Xn#clL!mzIK+Q$Qq! zDdKHHvzNE5l+p)1jNJ?=y2!OMjjN_yoQ+OzxV-vphU~x%=;9=yc4L0B99NOG`n9-s zHe7GhNk_)Mr_1<~zo4)xgRyFjKTnAGKr;&B_-xJDdaD@LCE=a|eeZF;5=D0pE16a{QUNEMUW!#S zi7>lP@5%O)cS&)pZinEa?9W7#KTLSj2Fs87niQoS%wxNcAT@F(SRMxxfw>w*gFip^ry5dR>J`7X>E*A~CNnQm0BUu+V|G4q%ga|qi zczm-X0DKwJgz9*PF61&ZaF!Z+C$)QA_sms;;#l;(KeiL?8BLU(MHJZ$sZ?lvYEwqP zONB+n$|i+oo|&+S(T64MhO;JA9i>wgiSxUQC34?8a*o>{4XBtoPbD;hK6|FS6T?yy zT@DSrw~*!7xGTlNG*(sfLGwAXq1jzNtc@eCnOO=%gH@MdsmuKe!tmL%YMm&?$@Q0W zoAC*ZBl&DSu54*R8wz-n+pTCKbDN z%8R7E%b7^kUn?muqddC6`_Pwoy_c)IDb6a9B`tV53AG0ouosIE(;idLV}K9E@=?dp zNfH`^ruNA_oaaN79Y9|HoRi+4S~@OCL`*32;J)|EdI{-{;5L*W3wMEiwz#t70+QfL z(4PpBPaUC5&DAu%-F-I9qi{8YDh^Xp@1pJKkbSm(+{_WzHQtYHS?exX=Pi_8TJpIx z^1-mAvO}-{uEcVlJ2@kXy=(FX$3q=A%uz*Ydt{@uVBmxC=s}25+v?s$er*XMH;Vqf z!pmCqgpA*Aol&(B741rU(E_iiCHs9l(ioX^dpQ$OVEVQeWm?>LGpm#6m9Aq+qXXOU zH^lpMg#GM=t+lnat*tBHI~A2DUY}JahJxH%ygc^V4J6N#naXTwH}3`uOk)jMH$BN` z?K|(1JRXJRS5;Ms*pQ+%YFvYOqu0`H&9a`?05{kVFiKP#v=!&}vFz!i@-D1Ytmk1G zxX{o32mS&c1}eiU2nO~KB8tOuZf>ci=QdW;ck~-X!wA&<&EcUF#Y-$Ka&6Mo6=`Q` zPG;BTGao}QM^`&jVY{^2^Sc%wJdax7_FNB&M=0FhmNrMt2z3@9OCm)@EJ$g2ABb&0 zUU=S?O;M}d5!e@tn>RnG*V7sV@RBE1TW!~q1jz^AJ8qW8<$6b&c7O#h@1hFRNjGT2 zt#(f(T9g|0+n25(N3i+Ho3_X&tj&g%6Fc^fj!TDT4J1wfx#6PIa#CwsNp z+q>I^S*(6AYk(O`YNB2CDW^!uf5_G|U{@;&(#F1k?4~xu7*nrqi`vWbxBMLnW<3OD zs2)=k4iM8MqI(0(CU)tH$TN6&71m~cm8E{oVJHnFysGO6yJ;5K9NW83qqVno89L%o z_$6X-ZUPPLE?_QM9_l})B`C~p4ppSMLVBMV7My zEh~G(0k=h$DHx4H10Ar(a9$#|L_D1pg1k$tHHXq8Dx={$r-9VId3u5ECApQ6b&KbB z-ul81x_!IN#mgJkvHU?iC@?tqMvF$|JcQ;6x!K@_Fk3s#dC zP#DZvzlqn15LXc}?-99obmbI8u>TMP!^+EN;;PzOg9AY`)6K?9@_f$rdvAFHyGU^6 z^R4E2>Jv_au+R(7>(BS8o5s*FAM&ghCzh9Sr_J{!UoUF)%yiZ~Nh!*=f7B)bb+rQ> zmIg^yZ(^hKE-1h>Gj)%@<|oU+}#rx3U>v$D0XA z*rq-CpZ@1B-L3wPKgxdm_jM2G>hH7vka@@aNrCYpXjf-9W>7- z@V78`nP-)e6FX;TRphq^cuXV@;6I_557Y_vwPH2=s7uiwdfvQj-AeWAWcj(~tYDFB z>yrP6=yN?M(^8C|=^&g(FK}k(D`%n^^{RfoX;wu{Osv}c$y^VNbXw4{@bdD~)0;_P zdG&MrL$roZBOLMk6lyck|MCyWtDyS&`oqI8`~2=p5przo;gJy>A|me|Sv05e9U`rY z{M5Riq57svxDT+O59{jdB>@2aRRy!~N|Hth1j1=K_+xJW;pSn2^-Cxo>w_Na>z&}rIyh?eZc$?I6XbBtM{h`W0K%+Zr-#GzG~x(v~~Q`9qI?e7@+BeaM1)xfFhWm|;h zzfVcM9rZ2%o_~Q~U@vJk{@ed(G5CL?0DtQM9!da;K8pPZ2A=f)wKn}1vCkE5|FHN! zObFk*NF);ZAWTMsM3Ha7!BPMKq+{8*Ey!T2<}X_xAuk`wJG2^K5p=A%aP#s;z2oQL z;Be`V{-D*!=WAnYD+oH@EmkY6Xt@VwD|_XK{mW(cW=W;^UmK;8o#h?$iiiRyq_ws6 z-D|1MB>caGDrx*?XT~jYqw0y-LCL9Z^#Rf?sBqS8? znE03Q7sj2E9-e;%HX-!CTsr^tvHyFL3;iW)6@(ggxT`2n!rmuGHtXKt2}*~N7OkLp zkg;W;6CbYlV;=Y|ZSpS_Z|@!WId9h_VEkpoZ#)^}W|Eiuz(}Ldoy2Q2Jl?bLP@l^! z@cUlfz%XA)hSiH|+6l*7%^9MeX@d%nwk(mT7q1p&$o%X^UJZZ4TWw87OllDvwa0${ zpz7StOAbC-F>rO*K36x4cHr@t1+y zm-?T@(!7kOQS(v}Mm`OlesW9j*q?_7s3sTTxMb9faYo#+r0B`%<{)ez*YePH#AGN_L-=}PT#c04R@2ArD@6K4 z+CxO5pyDnrHm_Kzxd9*p06bXVa(07ajlX<+u^o9v!$mqR2?u2hLOa?`yx$kA0)#Cv+-clF#Fy2BdZ z>UvXQv$x*rH-Z(RjO(1w3soSp2tNI)a^UXtn6yCY!&@D{GMrAon zneQjGek80EgVo7syHai^S}fy?d{3W`MDv{$N6Oah%LglkrwO6#)-qQtA(7zA*_|7N zXkXLd0#)o}7TBUPt?F{z@_@*lNbBFvtS}}>{XMHd{t#aTOI^=rIJo^VV;=@Y2-Do& zgAw{_D-LHZwvK0YwSZuwY0)y*o~2>W;syB5ab4m&?vsv|{#)k-SI6*FP9vgEmfFbd zsru%MKCb5K6kDwY&XTj_&i5HYV8Y5+2&8iWyvIJ%hUPHW2()>MJsd@CJ1=lUxJ>ky z5q$xIQj)t24;9(% zMDVVQvPntcU$Am?ZhIwu!1p|KqO7$4hR0f8*zp217i*d zL1#`{Ctr830YPqB)B>cExTE%9r*dj}OY)>MN`9fwaq9MG^6;*c`x=a##{gBed5Ua7 zTIaWTb4wEXHV_L7lwgQ()xCBtyYck{Y-2+&M#Cz%!?sD zWNv#_KA*@oDEN2t{aM-et={GBt0uY zk-U46?71NjUYDM^ud`7$uk^#5w(~p>qV+q8>o^yD3_Z^q*=5HKPO_vknS{@QrP@FP zBV3q(pO7)f7{BgNa!Csxs0~2&P`LJ|eP%O|cf0{`nYo=FV*5CB&gJ^j+n&bjWv;q! zeZ8+cBS>Xix})#UL|xOcIko4ZEBRfl_0_Yd(Haas{Mc@b&6*U@VIq@U<@4(|W1Dm! z6wHPmx4Ao3MRGPLaa#@@X5I%yq{{$A6U)4ha|@)ml8r63x27N@owAf^%EABoBmrB? zIH@PAomj+_`-+(p!v;Z4W72roDtcXS#nnBjA5va-0e~@&#-4MH@-xQ9qwyOD&~a{? z?R_6NIMQam1swzrws)FD&|e*%$OecDeb4}=cMcM{=UCsDhBeIxO9FUjPsS2Kk`crn z>tRWmJPOHW?4bQo3q|p%XgN8nb0Y_-JKx`k(=ps=cLNRzrt~1ZdwdPdK@<$ zAi=i*wm!@2g23YEwrkT(%`m}N9-b>kSi98zK(W*2;^h})j-5|>hK-1L{7%O+ll6|t ze^g&s78{sE_U;L`#LRO#+V5Yg)W>o=7U4(bpDMpDJpwbh+UiO|B>R)lE`DN@ zk&+0Ts-D&zwFMl{Dvy(fT&WH60D}w@AEsy-q}k#Tg*szf>+k4Up;WZ$JoH+2zL=%P zmzs~WV-SAB?jFgtN!ivJ4mZ|r$K*7c<>K^GEDVy#$JScUcKBBg5&vnY*RoKz8w$L0 zZuxS~WEG8%|Ju!;=D2?O|C*~ukNo~0co6@4M)hUq#eyj6YKT!U5`)L*@{rLW@PzZ> zTIy;0m#vQ|hsLdfuq&_Ri5#8dy?|x9|6Xur)@Y=9(*+~ zAww@d8>>Iyi(1)mc!s%7f_G?U*e6>Qw2ZzzfbI$!$+d~cXLo?XI`Ahs2 z%R@YV2IP;tx!TA=omGN+){etcNN|YtWj&gFFAtZnv9Te4z2U>1r88h#Tib&ZNcy@< zf`+S3JV35EKcAX|1Lx?~A06=1@S*+r*ne^P#^j?|fZVJ9=>5hrZq4=|)AN)1%YQh| zP70s?o0m+mPiwm8yz!;b;kq7qIr`Iq#P0e$x_WCiP9O>lnw0@4ENH&A0{+#s7w*zl z1pV4o`_;So2ZT?aq<7hhGHbV7U%0Ld9m%M{LZS#NK&RFDN^i+TFMOg1%0O;wIbA&C z=ZOuvejLbsRNm*6MyZ1=KhN`#d{*%Em^##Xpf?Fio7KYL?+e~jEqYrK6s;*Q`QuVG zM0|8TA^O2Qx4Ue! zjdu5!uFP8-;#Y!xKYXWrH_{JhCr!x@_`GLow(d7fxZW|bF|I2`ZGkZrHP;fVToV<@ z=N7nvMamZQhg#fMhq_+-4JgWI@zrF7{8gTkFM%G$srQJxpVk!D*LR}63IJ@e4^Y+i z%iWEv{)W3m_D@qq`PQf`O@yjP4!0QJ*GTdbAw>Y7ykfLMGgLWrgo7sHmHgdkc7#&d z%}ogMA%xUaGf(N^t%E`n0+BC%WWfJ37hqDS*fap61ZiU_^e8iC(RLovYHnH&5G$NSN5A>C@+uW#l$G@ zi*jiq1%TUm+U>-7UsAcuLG`yOBgItkW&X-Qb?6;RwT$2L=R4mO>Aoyc;l$V(Pkj5L z%Tq#TL=?o2-A`vNk@D}+fc}%{-z5lke#rZZDeVz;T8TIqG_}W;)A{LnkDNY!Yz<2!tNnChg9XlIQtx zSemcxIXX1uf8G*|Klz!LozY=+a|o^9ai9_T=8dpKUFuAh1SkK4mip#r9HSKKa03gg zSaWv1e9}(b`>N&bMX|thl+W(L0r(brWMpZ5xrt7M#iST>0#QtCIalq$nzOvVCTI9M z&yGtrRbxj%+6Q*AEf=)9%yf_1-#TWuXdQ{@bJ&B(V;X7Rasjujz&gFM+kRJT!IdNh zJvXJKf;uXyp66zBu(7+2XqbH6r^;j8&dI%ZUPe~0lJ~Q}5(jvLy~a?X5HCu# zMAQ)?IT9+YuIV{f$6YNnhRl_kaxcY9&_iJLwk56CZHk zBTnv_D@8=Csi1_SIn}ehVpGtSMUW9vtK9}G46BtC%M+`7F z!Vs=7&_GK`M-!V5-{q{>%>n>enXSkZ+Rd19dT!<5DlF8A)P~CYiydbDDu`3(lq2Mo z!E$#`iLiU_hLGTJ7Cg>^|qDuNyKu74&9ig>Qn z>o1fUf@=2%H;{R!TC`^;*)`zs^m>{g$Y$Bm3TbfA0&LwsO9a@mNM7o4Q#2}Qd&_n( zN=`v5bZocZz5^K~WAxfHHJlE72#mV*lI)ukCbNk9cdZJRp;3|*UM#*`H&M(=_bcZS zSagHOl7C&XXC!vD~(p%^) z^xh+iNJo%fA1EMT2#`R4kf73glTboOI)q*V1m*_6Su<)H+-B_qRu_pf=8z z)8AQHUv3(;Ubvr(GlCxsRn~uGFXqo-kxq&%M<4p3MqG{u-F+L}7UfwxgGkowc=bpA zmAhb5T=iA^gb?HHuJ9YKtg1F8PlV!gkS5`*_r>C{$JSzt)=0kRm3L$SG z6QOdt6-^(iiXgZ2aGnlr@%5@*`WjTC-7-Pz^Hhy;nkb6;k&l(BJBR9L_t8g2%@=26 zl-;8lCpwmNLzf_F?(3tGwA`V`Qc#T85BVQ~1u3TWKlab2WZ7&=8ne8YNt%k>Y)b8| zXXgh5`6sI$^Nu{e}De@&mfQ`0_I_n}B3{(1HDQU%d=c!s6i zVFK}wGnLEj3EFuH^0%imHiH}UW`n(Yms(DCn=%tWe#}Y1X`A3Jd!Tl8W7=Q?Xc6Yq zCz6KOC*Uv{%W#m*uf^y{n_ruO3gW?tb=?J)#O8oLlDmO>vvmc9{hhqkyNU6cY3hin zGfPWfQb}jzy%?irCTsNsn7od?UwJn(?w^tK;|{Vi{> z!$z#SX1%1f;RBgm-B-J=K-_p1V$*G^ZMuG<`ehVey6Z|PDB&)WK3=X~widD(s=h6fvCTGzG|(6Kr}^aSnu2$P z`(x_;W{cw3^U?s6^z~hZ=Zra#+4i|+xks5U&mD>8j{IHj3k~;?`7zmmb{1 zYA0$36*Wm*u0nsp5_Cg?l%4B2*`M2uF7{PK@u`~BK9v@FS%rpG61HYLGhb~8P$#DE z#UkTZcLtrPsl8e|`Rl}~6A8!cKE27w&GD{jYd?7fH^D1TX-KB579KWghB2e48xW^H z?4c+}SF4r8CnV^5PLifdvk3Je5wY~iImXSbmLv3gRh=?#Sr!YFOT_r| zN{^>BW6I=h5xT40^LSX_04LR(Hk zdB+)&M%Qg9Oig*`Q%OiJZeCuRH3!9M@US;Gt9mQZfqF#-;wLCD<$tz}rpp-<`KXvp zxxXZv6ukX%>}+ApYrZ#6$~%cTV|0$8lhd9NoXU~*;BxK#y8LAUqLY9*8&rSl)%&I;%hv|a$8{*C+!VEnQI;3A zg^lesYYefMnUBt)wN5|XdXQcKYEDL4%uaB8j7)!{2l~hl|ME;~EM#u9V!Eh} zwS8Qm=k+)bux=-YRUBxa1f571qhcaeOomZdBU~JNpi_)fJ+8q?6tDvj4QUqX&XSGBm_&I5y@3yiMB~u>Oks_o;c?c ze~k36bo7%|P)nFH_;IZzqH0+=cNDox;pYYiDQ9JGu9wCmTCPorWK2*7Nr*+ZSG=Q9 z1Ze=^oRO+|g9niDBp^3FQc)y<%1%dEs~>18mMkkf4`6($x0U}!sno92ob&qR9tCuL zU5JtH%S+49`g-oV81&wkxq{VaG~qg9YNkO$hrHwZkHj2XZh-@$iC=+~dvD1V7S&$f z&_@;V(BLXXj+gRY(k7*c2D!`8nT$-1K;Y^%nx4Yt>1`yl0DfdnEl5h9_b%qT)VLG} z7kdjE8%@@$osUe^9_!_@gGY{ZPqTU|jo!W6{oKvTHW>Q3bRcDCuaih^b(nKkn0+$! zu~<+1AC*eM<0(a{^UKuAt5tL?#LtKGOLjd{dxWuG+m5hETtI0-fh{g`u8!4!De0)L z>=qOHiMf1DrNdbNDg&MI)S9}v1p*Y)F4i`7YXGrxIWN9%3Mu`endwFiOZ1aK%a#q) z8}SxpGZ`I^A2oI@7096gr}L=giQ!vvmdl^e@IIGltl4OTh1;LthS1cN*O8H+wzjA? z(sJfxpUv^Kyx+{bJgT0zS#@*oCcBL9Br|&o3O;Gy8~HJjQ+$B+WeXUdN8#Jc;S2q} znBs|=x)l$Yhlc_s0fS>?)-ne0lUl~aegbH1d#AM3HLbme_g#9=uD+|0(|zg{S842K zO4ZxAa>>4p$K8Jx6&)=4rhOh8bj3IXZD4l}W>-p^sI%7}ppgz*t+!*CSnsAqj@8(m z;OOmNv~DHf^cLSflVbJj+a+eP3ZIRe$)-KwAqP@=z+-jm`?%#$cZB{;VQ?PU0Rlx-m6n%RlIkTn*Xo$@ zx16ab?GGAFhaXZivb*?fB-PkW#o|qoXBM`k9>MFWvB?Y~c9Gs_Q*8f(tja2je~DX! zkob7Jw9T)ECceE#pVX7%==5hpg@?0$Tjsq7At4I}M-BdC!29hx4Gjrw9nBr)+N!zce70_EpLMuL{_Vfx(kUXhuYG)WR zLf5h}y+2-K&6W7Gpr*!?V-_C&kX)sdA!D6uQY`FRMfTl0uSPn zvS)YuGrJ^`$6r}R=(Sw_qi6boSCAQuosA!|u)|pD=ywg!LMER#=e1OXM;_i`c2YIf zTgRKPa~1ts-=B_?*3q_>&$I1{rBh!l<s}uq8+MYkI)obZWQf%Jvjlt7)%MR2u_!yx(5Arg-6qMFBkOnMLd040Y zjVt3D*sY9cP5ZaXEE&YZFo|*>^IHGyxt85{geI(a+342pB3Hr zqT10R!jFO#W)x@=VtOI2Q4&$LIq?tdJr6dNJ;+;dGY@QE7xl*{2_YfC`Fz99!1(at zSN$@}SZ~$yUTbMTeQC`BZI6;JoSU&fT6Z>eR{iOLctc$o=gGS_lI-S1+v9bq2_Kib zV^e#r(Y`EevEqtGRX3ycuhQ|%{4zyYMO_wLk_eL zTfZJ=4l%n#vF=BZBjM?f=ac&B7yg_`DVUdcF>nFCnkf9@16+Xc_HRDKf4^GFD1tx} z75B;a-KX8_O#QGkQWTW)j>mf|va+&#cYzq)>ytQKeQ`1OqeruM;0n*1`~#Qs-(SCe zUG8}KQ&?D7i7OfM7E*l^GV}TKXX%D}C;67yb*AN1@~2y?!)4)Q+QtMx{AQz}p-DbBcuHjn;|CFZ};zQCaGKKTun|Ih1>;`%>o+bU_u1QLR!THNk6RR?;lGnog$8c}3$ zv$ohV#B1~LjtC>r=$QzMqEq;hxaZ3-?&J_=;I?~TZGKvrB2Qs*B+Wp#VEl~#N#HlQ&}5^5asmnh|1kG@9Ibz z_{e$N<>@PhSGbQv@S2}kf%$liHux)$xSLKx5zqbVjPc1$N(hseVm1DJqa*0V9 z2TPSRRK~o87~>ncW|qTufrm`co+fJW08i16& zkmP|_pU)8ymGsdj#z?^wN0?$j_3gmwkunV1INk6Ys9gW)1)<{b&EGP+$4Tjyj|-8H ztQ;srlJyHfjA{%3UBghtE&Nd&(Bqxrr{EQh6GR5?t@$+7(`ClB$7+y`VJXAaYd{wW zPFN$Eh(=IRiouU$dbJq#&$raL?9pZL_fWxgOkjVRthwwL z+kW1+->otQTPXP%o~r@->Nm6Qk>dS6DO#7u!nY|zbkk|z4)9cW1yJ(MSLXcKr|DBkWnC*sgC1uH=9VM`%ACWkXA)TJ%lB@-@KGmEK*!cMWW{;1&DnFc<~_&RxnZ>^ zgOib20HTE~n26e3m5j^0uB3TG|1(9r-QI1dzJGm#_LXJd4)ag0JeVK2(Ly6OOiAt% z*E@vP6q*nA!i|tUx-#@bBjP62t69rV`Qw4DjTEKlP0fGC8}B(W>_xYg$-W(z{W57z zJoLiYEf|SQOUcNXUOS8cYPm!(Glsyb+vZD1*5F2o^{xa^)@|W;C0j!GUB3t^oQmLn zMy86}C$qPzP?wXjm zZqed8tyjfq4+YNeIE1}psy+~;^enU&5))4H2SSIhPom*hPPg_Vd1c?eHJ4qUPI@9_ zuHDuCULdJoNa}2|Cz+=3O;%0-#u&1(??fS!^J<(N^0%nEhW_4k(t38sYX+9sEK2iG zNpQ;o5S*w7oNC0HGICIoU~(2-^ggh?AVRNC31`BUZy6hm{`)B6XJ80|y|`W#DDo|N zmmfE?e;7aPaCj9cz!yxF0VRCGv8g3|bs(#T3H)VV@yD?DtMuIpS$tR0GP49JWB1kx zHH(YtlX)I3;wRhl2Q}Y}dKc@Z(DOs`A~VmhP-qHiP$f(F#pRDZ$UE1?*~lk#68yen zw_k4hi*|{A=qIT7P4Y70WX*zQ(*M0KAU47*FkLfS(nxwgC?c^?>KZf_;j@Or=p2>= ztOd?v>A-w&uVbpLLpR<~qPz9(Y#K^WQtr`B-%;Mf^%CES0SN}ig=x$5--6KPx2?D)W!7T1XL@%hm+I9r2%>kBq&WC1nQ1j={;T~5XUONdzGOurbC>I z$UlMtNrS>rQZ0)Yyhyxlp4q0R3*?n@;g?h4Q7)W+3u8wc@rB=5d zc3rAS0Cl(b_Vv}o&Z9{8uwqUZYyA=+OvCBuRt{t(V?|?KV+-e?`73=cHmi7HG)U)x z>!fkINS{*_y%Yi+a9*=?_|q>+lB)<^R}P^1rsZoRa5Tq&q+5&5+HDVg`Ex2bQZT?e zZC@N!#mE1ow7StyPaiQCmogY!yJOMSQ|$edRmM>M^xeIV4CIA&wlMwB-})6++ECLa zQ~afX17pI66D=#moR+xh8&`Q%!4$qb{JY^l)&*yBtYe|2WgoF#y1)Loqp!kSI^G~P zMNh1?oA-DizEA`N;u}+c+AYWuOzh!Y#838AA>B1?t>ZpnOsaOFo>KBhN~jS0t1JjS zt4F|KJTnh#=8(0#Da&Gf=yJL=1&0xc3uiUT=WUI_8_okYIQaQdP)t!&B$9cHwFAgQ zI7wS!d|-BF>w>S&WqB1i<%iuBTXTU*lZDfUo}PXy5TmWFP3w1yW}Loy14``CPiyX0 zL5wXzI|Haw4HJ&8(j_%OW+i_!R z;gRGtUqcW`%Gk^kQ(1~c>YMWHKK)#|t>fF<|FS)7v2&+hU^lzKOmaBuP&b7D-cbtU zpTpUO(|=T*;O90mI6oX|6k-2IAcxe95XkxZaWe$IZt0~plv{8fFoTku-fwvZwA$k4 zPk=ABw(AwVd#{vQ8-yPUh@o$ zjg3uA@Ugip;lCoj(t6VYLkl>S(t`vwRdtUVY5biuLOCti5IwbiZ>5}H(B~*(E<;3r zQC%~@2*b<8$;rp}10nAcTI&sGOE#+uZu0Zjra>+GTu_XT2m$}ZdT&+<-Y<6+D#^3SU6 zCtp=}<%NhtRpa@Sy)t<$Ti@n|;E+d-XO?kXA5}pUwBuaBK+k-{?Dk4yS?>bXvR2m?^p8 zb8xJbcn`nNKx5gH?$&cxH5+AB0=2O^%-C@`F$N8iMm%e(r4&DxRhH{jiJS^b9Y7&X zxv6Vxi%3orKW8(?H6Z(KlIq1qKM#U`C`!Q`17hy7wfdswwqIS=U^t~$ImagX(w8E-H(`IIHo7MU3AD5Ggh9%^PD7x7>HNO5y(Ci)P zMAbrhw_|KdK%X1}BqcSTMYSm?KWzH~8rXKgr2dtUC%89ba5Q8x+l>Cl_WE@$YL7b7 zg7C<2nL#mIHp;bW z(O5kQVl|+J`c*VyP$PjuQFZsZiy5Tq;l|8mjz49;WSRGW8;-oO@GA%=t9}-kxz^`X zy;-;LkCF)4nfNSoFlznL>k|coR1|)tCM|8)x5Z{*$@q$(k2ey{(UQr=M!l=QC=>hK`*|tHePFXRF@0~$p9*es)un{6g7j1p)ZSJib0J^QfV6Hu^BwV^HNH7LnkoML6O4b zogUd;f6Bt9+Y6LeMK0P;FtJqoaohGWzj3UPLY!U3-A8~Sx!0d=OzrY`KOB|K3=9mQ&~sfR*>R*|6L8 z-z6P?_6unv9bhRm+tK;S1_3D!3X`T%UUjCd!CU|6>i$%qlD)^$+eBWELE&xlD=RC+ znYUDO0HbR9-r(&*68;*m0`jo}66X}Y7XG1M=sLEolb~{se z2L=W@IywMmyh7GLK(j9SiA;Ci^6>D;$;n9*1cx5YzJK3Xh8%fm8R3Sv;4G-7wrf{O z^W@04>_$dLT0Y(wju=G2@_l@K3X6&||I;DhBs&Cv=L~=Z{;!_jI*3cr!D0rKo?!>h zx3}H+2seyDQEomD&&3_ad8e`<4kQw(va<3bvN&NKY&Maeo{s-oGqWFk5FJUgVL~+h z`PjFdY^9%yFjpTbNj@1+Lry&H)V|zD_=O@nsOc~BMhAw?!H0&Eqb@9ulq9WUli?O? zfM<0OnBtI#zo3K95avAV00;oYAufI})OQ-L6K)WNGl#p??G8NP119+fFhFcS#K|Q3 z+Ah)os*yz6gieo)aI;a#?)6(I$l4*sl>7j1yP1CN*;C*l>zB)hj^ahF8Gtq9Zg4UT z5A|97$%7bc00b*wcagLp2$cjlZLDWo@3qZ9QAg-@seVfqN+*ZfSDh$Y)_rm)b)u&? zN80aTeGGU5L<+9~kQfo!PKVukS6W(X-4<^I!+rVkMcY(8CX&VEe%!-{t?%WF$t%{c zSpIA~L9L`vJ?(fdBN6~HY;0}!4-fsky<->Eth?>xepBE-goXXlB*gciYm4qiZVmbkL@3p{}?0-eBZ=Sp$n?PEZ zD@sB_qOG;HsHo_Lv4|lLd6{4O6?TKg5E~qzsoC@W?G0L5+8fue2L=X$KBLhm5{<+j zz`#rCaJ>FIy9ERSIwokympXlZb_j@9e0=;_S>rJ;3LgSMH$%l*5Ez}HxeSHNZ_MZQ zbS#4i_G}+c1#JBytYl!zoeDV2Xg*Yv<{{Th;2jxST3W!;)s-NR96dB7Bm~d_^FbGP zt*opJ3`T$z{3SVawT4{hyefn=pvJ73tef&npqF1sfCAo z$jxhQ`}XZ`pk^=_?Buk1WS$WoL181FevYVaY(PPdxKuvgQoN%B&f5%|UyM1KDN#I@4jM^NmgB!OS}&;s{gN9|_~!sF(L zfBSv^9iSsO>;LlEa>4=FtH>!z-zNEkOBn(1ZhNE*TP3?Q7xv|6HI)?j4D51Flm;K4 zHj;|Arp?%_G9`<5Sm#5r__JH6YG=r5Ua25=D9_4nCADyF*^N7-w!YqgqWW!emCXea z5gsBx9%gpQI)rkp?DC&iE-Lplo_y|J*pAi+axOpl)|h?V+FL)FHirup6LVz3lS%&J z95fG$Ue`?%p;~?+{*&`(NJPWtFp8892AOIu1==1XZJuC(a!$D^ytykM2hRRR$OZQLtXrs;k) zNp=Y=N&yw$(O{pDYbw58yY!>MTr28Ilola3x`Jm^I^N{%>xFvN+Vtx}t&ODx-mFWMW? zva!=9*~`~qS4pANiHGVU?0I~!Cjn1+y=ue)4hn!D7VSaEPnk~$k5KikcG?{Wn}A*F z$EShw@qPw+k`_zLVh(bH#kl9x3pc?q!3_Q!J;<&ayj*tNx4IFrq6Z<3H>72PKpZ+R z2(nT^n;k`m_)K#(xq4qOy`_6la*l*WFdz;c$8htFgjkKp*n3gP#SNELnan)*CW@TK z(6tc?q9CkKBQm-D7dO~AZ`gMa7C0T$5s)=v%&y2G3Ee1Y|ERon!hL?h$)% z#N$FGPvaj2gCAX7xWQ&woZR3*Phb6x(VLc}WHLeBeG@2EwGYOOvu0!ye~l+$8eK~} z*Cx=1zbH3NL|}usz0jEo1Z<;p*eUKFH8`XPn$p|b+itTKcZCBGq1R|80Kv8ci6PHE zW{KD@VT`B81P7Wn!RMqh5-I8Q*Ely^AA>}#l&V1S18L?iou*lN zD<^xyAA>^R5*w2z5ToR@`;wJlvKmM?1?IiHU9nJ)lR}S(AW!Vm5u82t7`LdA_)C!( zu!EcCvQPb~?s;Yc6meTHVrTz|FkkI1D}AzkL$t#*YeYXOg(;(AdHAeaFKCzN0*0O{ zK;m9aUY~$@ziyk~_LmVz1IF1Der7hv8|yUKs=3IF@G^%W?6uMP+n zT|`4Jhqy9R`xesylf(45F!)?fNRyQBWl@?%HoG;# zHTtiff6Wdlofa9sPz+p(HnoNY-ngc~1BF?j+cr-D8u$Bm?@C@Lf`Lu}=D!+*Ie6!G zlM3pK(KfJ20;hCzoC9sDT_V58`jibrjm0wXztrO~iOaiIpx-sg(8w!o-p639u41X>hVrEuB+P`j4Q3*d{|zR8Ze z%8xGixqmMU71fg!?4?Wc|NGRFi~X1R@c&sp`kX54HI7%A^WFlvK2^mRpz`MyZ~g-a C;AWrz literal 0 HcmV?d00001 diff --git a/fig/task_manage.png b/fig/task_manage.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7877763ee5284722d7a360552654d80256a002 GIT binary patch literal 45800 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 T-iHaO`~t{*RFbNbFbVxX<}Pyk literal 0 HcmV?d00001 diff --git a/fig/task_setting.png b/fig/task_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..131ac452bd754a7e4f798402963e190456be8551 GIT binary patch literal 66032 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 gZ1evGg9k6(NAuZ+ Date: Wed, 27 Mar 2019 12:35:50 +0800 Subject: [PATCH 038/100] add readme --- README.md | 68 ++++++++++++++++++++++++++++++ app/static/css/github.css | 8 ++-- app/templates/admin/index.html | 77 +++++++++++++++++++++++++++++++--- 3 files changed, 144 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e69de29..0406084 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,68 @@ +# I Am Watching You +监测网页变化,完成诸如新文章发布,商品价格变动,新动态提醒任务,通过设置xpath或css selector选择器,完成网页关键信息的提取。监测到更新后,发送通知到邮件或者微信。 +## 特性 +* 除支持常规requests网页请求外,还支持使用PhantomJS抓取异步加载的网页 +* 支持xpath和css selector选择器 +* 支持邮件和微信提醒(support by server酱) +* 简洁的UI,可视化操作 +## 使用方式 +clone该项目,修改```.env```文件,指定DATABASE_URL值为你自己的数据库地址 +### 运行 +``` +pip install -r requirements.txt +python -m flask run +``` +### 登录系统 +首次初始化数据库,系统会自动新建用户,默认用户名为```admin```,密码随机生成,记录在log/log.txt中,登录之后可以在账号密码管理中修改。进入127.0.0.1/login,输入账号密码登录。 +登录之后显示如下栏目 + +![展示](https://github.com/LogicJake/WebMonitor/raw/master/fig/all.png) +### 设置通知方式 +在通知方式管理中默认存在两种通知方式:邮件和Server酱的微信提醒。邮件提醒只需要设置接收邮箱,微信提醒需要申请SCKEY,自行搜索Server酱注册,简单免费。 + +![通知方式](https://github.com/LogicJake/WebMonitor/raw/master/fig/noti.png) +### 设置系统邮箱 +如果采用邮件提醒,则必须设置系统邮箱设置,该邮箱为提醒邮件的发信人。自行根据需要使用的邮箱查找相关设置,密码一般指授权码。 + +![系统邮件设置](https://github.com/LogicJake/WebMonitor/raw/master/fig/mail_setting.png) +### 添加任务 +在任务管理模块添加新任务 + +![任务管理](https://github.com/LogicJake/WebMonitor/raw/master/fig/task_manage.png) +![添加任务](https://github.com/LogicJake/WebMonitor/raw/master/fig/task_setting.png) +* 必须选择一种通知方式 +* 默认抓取频率为5分钟,自行根据需要调整,单位分钟,不建议调太快,以防反爬 +#### 选择器 +元素选择器类型可以选择xpath或css selector,可以借助浏览器F12直接copy两种选择器,需要注意的是,往往浏览器copy得到是元素,而不是文本信息,需要做以下补充: +##### xpath +* 获取元素文本信息,在浏览器得到的选择器后加```/text()```,如 +```//*[@id="id3"]/h3``` => ```//*[@id="id3"]/h3/text()``` +* 获取元素属性信息,在浏览器得到的选择器后加```/@属性名```,如想获取元素href值 +```//*[@id="id3"]/h3``` => ```//*[@id="id3"]/h3/@href``` +##### css selector +* 获取元素文本信息,在浏览器得到的选择器后加```/::text```,如 +```div#id3 > h3``` => ```div#id3 > h3/::text``` +* 获取元素属性信息,在浏览器得到的选择器后加```/::attr(属性名)```,如想获取元素href值 +```div#id3 > h3``` => ```div#id3 > h3/::attr(href)``` +#### 正则进一步提取 +如果获取到的文本信息有冗余,可以采用正则进一步筛选,如 +```价格:1390```使用正则```([1-9]\d*)```提取到纯数字1390 +#### 是否选择无头浏览器 +如果源网页没有异步加载,可以不使用无头浏览器获取网页 +``` +建议先选择不使用,假如提交时提示获取不到文本信息,再使用无头浏览器尝试 +``` +#### 监控规则 +目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多 + +### 任务状态查看 +可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类: + +* 监测到变化,最新值:{最新值} +* 成功执行但未监测到变化 +* 出错显示异常信息 + +![任务状态](https://github.com/LogicJake/WebMonitor/raw/master/fig/status.png) +可以通过修改任务状态,暂停或重启任务 + +![状态设置](https://github.com/LogicJake/WebMonitor/raw/master/fig/status_setting.png) \ No newline at end of file diff --git a/app/static/css/github.css b/app/static/css/github.css index f59ea16..c614370 100644 --- a/app/static/css/github.css +++ b/app/static/css/github.css @@ -9,28 +9,28 @@ font-family: 'Open Sans'; font-style: normal; font-weight: normal; - src: local('Open Sans Regular'),url('./github/400.woff') format('woff') + src: local('Open Sans Regular'),url('./static/400.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: normal; - src: local('Open Sans Italic'),url('./github/400i.woff') format('woff') + src: local('Open Sans Italic'),url('./static/400i.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: bold; - src: local('Open Sans Bold'),url('./github/700.woff') format('woff') + src: local('Open Sans Bold'),url('./static/700.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: bold; - src: local('Open Sans Bold Italic'),url('./github/700i.woff') format('woff') + src: local('Open Sans Bold Italic'),url('./static/700i.woff') format('woff') } html { diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html index 24d17a3..b372455 100644 --- a/app/templates/admin/index.html +++ b/app/templates/admin/index.html @@ -12,28 +12,28 @@ font-family: 'Open Sans'; font-style: normal; font-weight: normal; - src: local('Open Sans Regular'),url('./github/400.woff') format('woff') + src: local('Open Sans Regular'),url('./static/400.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: normal; - src: local('Open Sans Italic'),url('./github/400i.woff') format('woff') + src: local('Open Sans Italic'),url('./static/400i.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: bold; - src: local('Open Sans Bold'),url('./github/700.woff') format('woff') + src: local('Open Sans Bold'),url('./static/700.woff') format('woff') } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: bold; - src: local('Open Sans Bold Italic'),url('./github/700i.woff') format('woff') + src: local('Open Sans Bold Italic'),url('./static/700i.woff') format('woff') } html { @@ -411,5 +411,72 @@ .html-for-mac .context-menu { --item-hover-bg-color: #E6F0FE; } - +

I Am Watching You

+

监测网页变化,完成诸如新文章发布,商品价格变动,新动态提醒任务,通过设置xpath或css selector选择器,完成网页关键信息的提取。监测到更新后,发送通知到邮件或者微信。

+

特性

+
    +
  • 除支持常规requests网页请求外,还支持使用PhantomJS抓取异步加载的网页
  • +
  • 支持xpath和css selector选择器
  • +
  • 支持邮件和微信提醒(support by server酱)
  • +
  • 简洁的UI,可视化操作
  • +
+

使用方式

+

clone该项目,修改.env文件,指定DATABASE_URL值为你自己的数据库地址

+

运行

+
pip install -r requirements.txt
+python -m flask run
+
+ +

登录系统

+

首次初始化数据库,系统会自动新建用户,默认用户名为admin,密码随机生成,记录在log/log.txt中,登录之后可以在账号密码管理中修改。进入127.0.0.1/login,输入账号密码登录。
+登录之后显示如下栏目

+

展示

+

设置通知方式

+

在通知方式管理中默认存在两种通知方式:邮件和Server酱的微信提醒。邮件提醒只需要设置接收邮箱,微信提醒需要申请SCKEY,自行搜索Server酱注册,简单免费。

+

通知方式

+

设置系统邮箱

+

如果采用邮件提醒,则必须设置系统邮箱设置,该邮箱为提醒邮件的发信人。自行根据需要使用的邮箱查找相关设置,密码一般指授权码。

+

系统邮件设置

+

添加任务

+

在任务管理模块添加新任务

+

任务管理
+添加任务 +* 必须选择一种通知方式 +* 默认抓取频率为5分钟,自行根据需要调整,单位分钟,不建议调太快,以防反爬

+

选择器

+

元素选择器类型可以选择xpath或css selector,可以借助浏览器F12直接copy两种选择器,需要注意的是,往往浏览器copy得到是元素,而不是文本信息,需要做以下补充:

+
xpath
+
    +
  • 获取元素文本信息,在浏览器得到的选择器后加/text(),如
    +//*[@id="id3"]/h3 => //*[@id="id3"]/h3/text()
  • +
  • 获取元素属性信息,在浏览器得到的选择器后加/@属性名,如想获取元素href值
    +//*[@id="id3"]/h3 => //*[@id="id3"]/h3/@href
  • +
+
css selector
+
    +
  • 获取元素文本信息,在浏览器得到的选择器后加/::text,如
    +div#id3 > h3 => div#id3 > h3/::text
  • +
  • 获取元素属性信息,在浏览器得到的选择器后加/::attr(属性名),如想获取元素href值
    +div#id3 > h3 => div#id3 > h3/::attr(href)
  • +
+

正则进一步提取

+

如果获取到的文本信息有冗余,可以采用正则进一步筛选,如
+价格:1390使用正则([1-9]\d*)提取到纯数字1390

+

是否选择无头浏览器

+

如果源网页没有异步加载,可以不使用无头浏览器获取网页

+
建议先选择不使用,假如提交时提示获取不到文本信息,再使用无头浏览器尝试
+
+ +

监控规则

+

目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多

+

任务状态查看

+

可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类:

+
    +
  • 监测到变化,最新值:{最新值}
  • +
  • 成功执行但未监测到变化
  • +
  • 出错显示异常信息
  • +
+

任务状态
+可以通过修改任务状态,暂停或重启任务

+

状态设置

{% endblock %} \ No newline at end of file From f4e09fcdf1560be4950b2e27f53a87a97013d59c Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 27 Mar 2019 12:39:07 +0800 Subject: [PATCH 039/100] add todo --- README.md | 8 ++++++-- app/templates/admin/index.html | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0406084..64c4a05 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ python -m flask run #### 监控规则 目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多 -### 任务状态查看 +#### 任务状态查看 可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类: * 监测到变化,最新值:{最新值} @@ -65,4 +65,8 @@ python -m flask run ![任务状态](https://github.com/LogicJake/WebMonitor/raw/master/fig/status.png) 可以通过修改任务状态,暂停或重启任务 -![状态设置](https://github.com/LogicJake/WebMonitor/raw/master/fig/status_setting.png) \ No newline at end of file +![状态设置](https://github.com/LogicJake/WebMonitor/raw/master/fig/status_setting.png) + +### todo +* 添加cookie设置,获取需要登录才能访问的页面 +* 单独设一个页面,测试选择器和正则 \ No newline at end of file diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html index b372455..c3a71e7 100644 --- a/app/templates/admin/index.html +++ b/app/templates/admin/index.html @@ -469,7 +469,7 @@

是否选择无头浏览器

监控规则

目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多

-

任务状态查看

+

任务状态查看

可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类:

  • 监测到变化,最新值:{最新值}
  • @@ -479,4 +479,9 @@

    任务状态查看

    任务状态
    可以通过修改任务状态,暂停或重启任务

    状态设置

    +

    todo

    +
      +
    • 添加cookie设置,获取需要登录才能访问的页面
    • +
    • 单独设一个页面,测试选择器和正则
    • +
    {% endblock %} \ No newline at end of file From 28a99fe73ca70d890d794730fd62f3baaffa6f59 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sat, 30 Mar 2019 11:10:40 +0800 Subject: [PATCH 040/100] =?UTF-8?q?add=20=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/extract_info.py | 7 +++-- app/main/scheduler.py | 5 ++-- app/main/selector/phantomjs_selector.py | 37 +++++++++++++++++-------- app/main/selector/request_selector.py | 19 +++++++++---- app/model_views/task_view.py | 28 ++++++++----------- app/models/task.py | 8 ++++-- 6 files changed, 63 insertions(+), 41 deletions(-) diff --git a/app/main/extract_info.py b/app/main/extract_info.py index e58185d..b12f845 100644 --- a/app/main/extract_info.py +++ b/app/main/extract_info.py @@ -18,16 +18,17 @@ def get_content(url, is_chrome, selector_type, selector, - regular_expression=None): + regular_expression=None, + headers=None): if is_chrome == 'no': selector_handler = new_handler('request') else: selector_handler = new_handler('phantomjs') if selector_type == 'xpath': - content = selector_handler.get_by_xpath(url, selector) + content = selector_handler.get_by_xpath(url, selector, headers) elif selector_type == 'css': - content = selector_handler.get_by_css(url, selector) + content = selector_handler.get_by_css(url, selector, headers) else: logger.error('无效选择器') raise Exception('无效选择器') diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 9af3de6..f41e2c3 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 21:38:34 +@LastEditTime: 2019-03-30 10:41:42 ''' from datetime import datetime @@ -58,6 +58,7 @@ def monitor(id): wechat = task.wechat name = task.name rule = task.rule + headers = task.headers last = Content.query.filter_by(task_id=id).first() if not last: @@ -65,7 +66,7 @@ def monitor(id): last_content = last.content content = get_content(url, is_chrome, selector_type, selector, - regular_expression) + regular_expression, headers) if is_changed(rule, content, last_content): send_message(content, name, mail, wechat) last.content = content diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py index da53e8c..0c69c57 100644 --- a/app/main/selector/phantomjs_selector.py +++ b/app/main/selector/phantomjs_selector.py @@ -3,13 +3,13 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-27 09:56:26 +@LastEditTime: 2019-03-30 11:10:24 ''' +import ast import warnings from scrapy.selector import Selector from selenium import webdriver -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from app.main.selector.selector import Selector as FatherSelector @@ -17,19 +17,32 @@ class PhantomJSSelector(FatherSelector): - def get_html(self, url): - dcap = dict(DesiredCapabilities.PHANTOMJS) - dcap['phantomjs.page.settings.userAgent'] = ( - 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' - ) - driver = webdriver.PhantomJS(desired_capabilities=dcap) + def get_html(self, url, headers): + # 默认userAgent + webdriver.DesiredCapabilities.PHANTOMJS[ + 'phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36' + + if headers: + header_dict = ast.literal_eval(headers) + if type(header_dict) != dict: + raise Exception('必须是字典格式') + + for key, value in header_dict.items(): + if key.lower() == 'User-Agent': + webdriver.DesiredCapabilities.PHANTOMJS[ + 'phantomjs.page.settings.userAgent'] = value + else: + webdriver.DesiredCapabilities.PHANTOMJS[ + 'phantomjs.page.customHeaders.{}'.format(key)] = value + + driver = webdriver.PhantomJS() driver.get(url) html = driver.page_source driver.close() return html - def get_by_xpath(self, url, xpath): - html = self.get_html(url) + def get_by_xpath(self, url, xpath, headers=None): + html = self.get_html(url, headers) res = Selector(text=html).xpath(xpath).extract() if len(res) != 0: @@ -37,8 +50,8 @@ def get_by_xpath(self, url, xpath): else: raise Exception('无法获取文本信息') - def get_by_css(self, url, xpath): - html = self.get_html(url) + def get_by_css(self, url, xpath, headers=None): + html = self.get_html(url, headers) res = Selector(text=html).css(xpath).extract() if len(res) != 0: diff --git a/app/main/selector/request_selector.py b/app/main/selector/request_selector.py index 2a360c8..93befc7 100644 --- a/app/main/selector/request_selector.py +++ b/app/main/selector/request_selector.py @@ -3,8 +3,10 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:31:35 -@LastEditTime: 2019-03-26 21:39:23 +@LastEditTime: 2019-03-30 11:05:03 ''' +import ast + import requests from scrapy.selector import Selector @@ -12,12 +14,19 @@ class RequestsSelector(FatherSelector): - def get_html(self, url): - r = requests.get(url, timeout=10) + def get_html(self, url, headers): + if headers: + header_dict = ast.literal_eval(headers) + if type(header_dict) != dict: + raise Exception('必须是字典格式') + + r = requests.get(url, headers=header_dict, timeout=10) + else: + r = requests.get(url, timeout=10) html = r.text return html - def get_by_xpath(self, url, xpath): + def get_by_xpath(self, url, xpath, headers=None): html = self.get_html(url) res = Selector(text=html).xpath(xpath).extract() @@ -26,7 +35,7 @@ def get_by_xpath(self, url, xpath): else: raise Exception('无法获取文本信息') - def get_by_css(self, url, xpath): + def get_by_css(self, url, xpath, headers=None): html = self.get_html(url) res = Selector(text=html).css(xpath).extract() diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 565aa7d..72e646c 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 21:28:58 +@LastEditTime: 2019-03-30 11:04:21 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -35,25 +35,19 @@ def check_selector(form, field): selector = form.selector.data url = form.url.data is_chrome = form.is_chrome.data + headers = form.headers.data if is_chrome == 'no': selector_handler = new_handler('request') - - if selector_type == 'xpath': - selector_handler.get_by_xpath(url, selector) - elif selector_type == 'css': - selector_handler.get_by_css(url, selector) - else: - raise Exception('无效选择器') else: selector_handler = new_handler('phantomjs') - if selector_type == 'xpath': - selector_handler.get_by_xpath(url, selector) - elif selector_type == 'css': - selector_handler.get_by_css(url, selector) - else: - raise Exception('无效选择器') + if selector_type == 'xpath': + selector_handler.get_by_xpath(url, selector, headers) + elif selector_type == 'css': + selector_handler.get_by_css(url, selector, headers) + else: + raise Exception('无效选择器') except Exception as e: raise ValidationError(repr(e)) @@ -77,12 +71,14 @@ def inaccessible_callback(self, name, **kwargs): 'mail': '邮件提醒', 'wechat': '微信提醒', 'regular_expression': '正则表达式', - 'rule': '监控规则' + 'rule': '监控规则', + 'headers': '自定义请求头' } column_descriptions = { 'regular_expression': '使用正则表达式进一步提取信息,可以留空', - 'rule': '规则写法参考文档,留空则只简单监控内容变化' + 'rule': '规则写法参考文档,留空则只简单监控内容变化', + 'headers': '自定义请求头,如可以设置cookie获取登录后才能查看的页面' } column_list = [ diff --git a/app/models/task.py b/app/models/task.py index 87c263f..9a9a090 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 21:40:13 +@LastEditTime: 2019-03-30 10:40:31 ''' from datetime import datetime @@ -23,11 +23,13 @@ class Task(db.Model): is_chrome = db.Column(db.String(32), nullable=False, default='no') frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) - regular_expression = db.Column(db.String(128)) - rule = db.Column(db.String(128)) # 通知方式 mail = db.Column(db.String(32), nullable=False, default='no') wechat = db.Column(db.String(32), nullable=False, default='no') + # 高级设置 + regular_expression = db.Column(db.String(128)) + rule = db.Column(db.String(128)) + headers = db.Column(db.String(1024)) def after_insert_listener(mapper, connection, target): From 21bea9496237f595ad62943ec4dfd130ea403496 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sat, 30 Mar 2019 11:25:02 +0800 Subject: [PATCH 041/100] Update README.md --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 64c4a05..74c3e45 100644 --- a/README.md +++ b/README.md @@ -44,18 +44,23 @@ python -m flask run ```div#id3 > h3``` => ```div#id3 > h3/::text``` * 获取元素属性信息,在浏览器得到的选择器后加```/::attr(属性名)```,如想获取元素href值 ```div#id3 > h3``` => ```div#id3 > h3/::attr(href)``` -#### 正则进一步提取 -如果获取到的文本信息有冗余,可以采用正则进一步筛选,如 -```价格:1390```使用正则```([1-9]\d*)```提取到纯数字1390 #### 是否选择无头浏览器 如果源网页没有异步加载,可以不使用无头浏览器获取网页 ``` 建议先选择不使用,假如提交时提示获取不到文本信息,再使用无头浏览器尝试 ``` +#### 正则进一步提取 +如果获取到的文本信息有冗余,可以采用正则进一步筛选,如 +```价格:1390```使用正则```([1-9]\d*)```提取到纯数字1390 + #### 监控规则 目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多 -#### 任务状态查看 +#### 自定义请求头 +可以自定义请求时的请求头,主要用于设置Cookie,获取需要登录才能查看的页面,格式为字典,如 +```{'Cookie':'自定义cookie值'}``` + +### 任务状态查看 可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类: * 监测到变化,最新值:{最新值} @@ -68,5 +73,5 @@ python -m flask run ![状态设置](https://github.com/LogicJake/WebMonitor/raw/master/fig/status_setting.png) ### todo -* 添加cookie设置,获取需要登录才能访问的页面 -* 单独设一个页面,测试选择器和正则 \ No newline at end of file +- [x] 添加cookie设置,获取需要登录才能访问的页面 +- [ ] 单独设一个页面,测试选择器和正则 From ea637aca00f51d4c7056b97db5428d9df3933beb Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Sat, 30 Mar 2019 11:25:39 +0800 Subject: [PATCH 042/100] update fig --- fig/task_setting.png | Bin 66032 -> 76379 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/fig/task_setting.png b/fig/task_setting.png index 131ac452bd754a7e4f798402963e190456be8551..2f49953f2beca61e2d4094d848f87d3d00707a6b 100644 GIT binary patch literal 76379 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 gZ1evGg9k6(NAuZ+ Date: Sat, 30 Mar 2019 12:26:55 +0800 Subject: [PATCH 043/100] update index.html --- app/templates/admin/index.html | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html index c3a71e7..6ecc072 100644 --- a/app/templates/admin/index.html +++ b/app/templates/admin/index.html @@ -459,17 +459,20 @@
    css selector
  • 获取元素属性信息,在浏览器得到的选择器后加/::attr(属性名),如想获取元素href值
    div#id3 > h3 => div#id3 > h3/::attr(href)
-

正则进一步提取

-

如果获取到的文本信息有冗余,可以采用正则进一步筛选,如
-价格:1390使用正则([1-9]\d*)提取到纯数字1390

是否选择无头浏览器

如果源网页没有异步加载,可以不使用无头浏览器获取网页

建议先选择不使用,假如提交时提示获取不到文本信息,再使用无头浏览器尝试
 
+

正则进一步提取

+

如果获取到的文本信息有冗余,可以采用正则进一步筛选,如
+价格:1390使用正则([1-9]\d*)提取到纯数字1390

监控规则

目前监控规则没有完善,默认不填即可,只要文本发生变化就通知,待日后完善完成更多复杂规则监控,如数字减少或增多

-

任务状态查看

+

自定义请求头

+

可以自定义请求时的请求头,主要用于设置Cookie,获取需要登录才能查看的页面,格式为字典,如
+{'Cookie':'自定义cookie值'}

+

任务状态查看

可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类:

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 ul:first-child, +#write > ol:first-child{ + margin-top: 30px; +} + +body > *:first-child { + margin-top: 0 !important; +} +body > *:last-child { + margin-bottom: 0 !important; +} +a { + color: #4183C4; +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin-top: 1rem; + margin-bottom: 1rem; + font-weight: bold; + line-height: 1.4; + cursor: text; +} +h1:hover a.anchor, +h2:hover a.anchor, +h3:hover a.anchor, +h4:hover a.anchor, +h5:hover a.anchor, +h6:hover a.anchor { + /*background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;*/ + text-decoration: none; +} +h1 tt, +h1 code { + font-size: inherit; +} +h2 tt, +h2 code { + font-size: inherit; +} +h3 tt, +h3 code { + font-size: inherit; +} +h4 tt, +h4 code { + font-size: inherit; +} +h5 tt, +h5 code { + font-size: inherit; +} +h6 tt, +h6 code { + font-size: inherit; +} +h1 { + padding-bottom: .3em; + font-size: 2.25em; + line-height: 1.2; + border-bottom: 1px solid #eee; +} +h2 { + padding-bottom: .3em; + font-size: 1.75em; + line-height: 1.225; + border-bottom: 1px solid #eee; +} +h3 { + font-size: 1.5em; + line-height: 1.43; +} +h4 { + font-size: 1.25em; +} +h5 { + font-size: 1em; +} +h6 { + font-size: 1em; + color: #777; +} +p, +blockquote, +ul, +ol, +dl, +table{ + margin: 0.8em 0; +} +li>ol, +li>ul { + margin: 0 0; +} +hr { + height: 2px; + padding: 0; + margin: 16px 0; + background-color: #e7e7e7; + border: 0 none; + overflow: hidden; + box-sizing: content-box; +} + +body > h2:first-child { + margin-top: 0; + padding-top: 0; +} +body > h1:first-child { + margin-top: 0; + padding-top: 0; +} +body > h1:first-child + h2 { + margin-top: 0; + padding-top: 0; +} +body > h3:first-child, +body > h4:first-child, +body > h5:first-child, +body > h6:first-child { + margin-top: 0; + padding-top: 0; +} +a:first-child h1, +a:first-child h2, +a:first-child h3, +a:first-child h4, +a:first-child h5, +a:first-child h6 { + margin-top: 0; + padding-top: 0; +} +h1 p, +h2 p, +h3 p, +h4 p, +h5 p, +h6 p { + margin-top: 0; +} +li p.first { + display: inline-block; +} +ul, +ol { + padding-left: 30px; +} +ul:first-child, +ol:first-child { + margin-top: 0; +} +ul:last-child, +ol:last-child { + margin-bottom: 0; +} +blockquote { + border-left: 4px solid #dfe2e5; + padding: 0 15px; + color: #777777; +} +blockquote blockquote { + padding-right: 0; +} +table { + padding: 0; + word-break: initial; +} +table tr { + border-top: 1px solid #dfe2e5; + margin: 0; + padding: 0; +} +table tr:nth-child(2n), +thead { + background-color: #f8f8f8; +} +table tr th { + font-weight: bold; + border: 1px solid #dfe2e5; + border-bottom: 0; + text-align: left; + margin: 0; + padding: 6px 13px; +} +table tr td { + border: 1px solid #dfe2e5; + text-align: left; + margin: 0; + padding: 6px 13px; +} +table tr th:first-child, +table tr td:first-child { + margin-top: 0; +} +table tr th:last-child, +table tr td:last-child { + margin-bottom: 0; +} + +.CodeMirror-lines { + padding-left: 4px; +} + +.code-tooltip { + box-shadow: 0 1px 1px 0 rgba(0,28,36,.3); + border-top: 1px solid #eef2f2; +} + +.md-fences, +code, +tt { + border: 1px solid #e7eaed; + background-color: #f8f8f8; + border-radius: 3px; + padding: 0; + padding: 2px 4px 0px 4px; + font-size: 0.9em; +} + +code { + background-color: #f3f4f4; + padding: 0 4px 2px 4px; +} + +.md-fences { + margin-bottom: 15px; + margin-top: 15px; + padding: 0.2em 1em; + padding-top: 8px; + padding-bottom: 6px; +} + + +.md-task-list-item > input { + margin-left: -1.3em; +} + +@media screen and (min-width: 914px) { + /*body { + width: 854px; + margin: 0 auto; + }*/ +} +@media print { + html { + font-size: 13px; + } + table, + pre { + page-break-inside: avoid; + } + pre { + word-wrap: break-word; + } +} + +.md-fences { + background-color: #f8f8f8; +} +#write pre.md-meta-block { + padding: 1rem; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border: 0; + border-radius: 3px; + color: #777777; + margin-top: 0 !important; +} + +.mathjax-block>.code-tooltip { + bottom: .375rem; +} + +.md-mathjax-midline { + background: #fafafa; +} + +#write>h3.md-focus:before{ + left: -1.5625rem; + top: .375rem; +} +#write>h4.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h5.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h6.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +.md-image>.md-meta { + /*border: 1px solid #ddd;*/ + border-radius: 3px; + padding: 2px 0px 0px 4px; + font-size: 0.9em; + color: inherit; +} + +.md-tag { + color: #a7a7a7; + opacity: 1; +} + +.md-toc { + margin-top:20px; + padding-bottom:20px; +} + +.sidebar-tabs { + border-bottom: none; +} + +#typora-quick-open { + border: 1px solid #ddd; + background-color: #f8f8f8; +} + +#typora-quick-open-item { + background-color: #FAFAFA; + border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee; + border-style: solid; + border-width: 1px; +} + +/** focus mode */ +.on-focus-mode blockquote { + border-left-color: rgba(85, 85, 85, 0.12); +} + +header, .context-menu, .megamenu-content, footer{ + font-family: "Segoe UI", "Arial", sans-serif; +} + +.file-node-content:hover .file-node-icon, +.file-node-content:hover .file-node-open-state{ + visibility: visible; +} + +.mac-seamless-mode #typora-sidebar { + background-color: #fafafa; + background-color: var(--side-bar-bg-color); +} + +.md-lang { + color: #b4654d; +} + +.html-for-mac .context-menu { + --item-hover-bg-color: #E6F0FE; +} diff --git a/md2html.py b/md2html.py new file mode 100644 index 0000000..8c38b96 --- /dev/null +++ b/md2html.py @@ -0,0 +1,21 @@ +import markdown +from bs4 import BeautifulSoup + + +class Markdown2Html: + def __init__(self, cssfile): + with open(cssfile, 'r') as f: + css = f.read() + self.headTag = f'' + + def convert(self, infile, outfile): + with open(infile, 'r', encoding='utf8') as f: + markdownText = f.read() + + raw_html = self.headTag + markdown.markdown( + markdownText, output_format='html5', extensions=['extra']) + + template_html = "{% extends 'admin/master.html' %}\n{% block body %}\n" + raw_html + '\n{% endblock %}' + + with open(outfile, 'w', encoding='utf8') as f: + f.write(template_html) diff --git a/wsgi.py b/wsgi.py index 03b8b15..d62310f 100644 --- a/wsgi.py +++ b/wsgi.py @@ -3,11 +3,20 @@ # @Date: 2019-02-15 19:53:12 # @Last Modified time: 2019-03-12 18:31:47 import os + from app import create_app +from md2html import Markdown2Html dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): from dotenv import load_dotenv load_dotenv(dotenv_path) +css_file = os.path.join( + os.path.dirname(__file__), 'app', 'static', 'css', 'github.css') +index_html = os.path.join( + os.path.dirname(__file__), 'app', 'templates', 'admin', 'index.html') +m2h = Markdown2Html(css_file) +m2h.convert('README.md', index_html) + app = create_app(os.getenv("FLASK_ENV")) From 5a7a95f87bd22990ceb1f1734b15f8b59234dabb Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 12:52:46 +0800 Subject: [PATCH 023/100] no bs4 --- md2html.py | 1 - 1 file changed, 1 deletion(-) diff --git a/md2html.py b/md2html.py index 8c38b96..790bed6 100644 --- a/md2html.py +++ b/md2html.py @@ -1,5 +1,4 @@ import markdown -from bs4 import BeautifulSoup class Markdown2Html: From 4c3421880f98447d8bb0401ae8972a000dc245b6 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 13:45:06 +0800 Subject: [PATCH 024/100] =?UTF-8?q?add=20=E6=AD=A3=E5=88=99=E6=8F=90?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/extract_info.py | 33 +++++++++++++++++++++++++++++++++ app/main/scheduler.py | 26 ++++++++------------------ app/model_views/task_view.py | 13 +++++-------- app/models/task.py | 8 ++++---- 4 files changed, 50 insertions(+), 30 deletions(-) create mode 100644 app/main/extract_info.py diff --git a/app/main/extract_info.py b/app/main/extract_info.py new file mode 100644 index 0000000..f25df43 --- /dev/null +++ b/app/main/extract_info.py @@ -0,0 +1,33 @@ +from app.main.selector.selector_handler import new_handler +import re + + +def extract_by_re(conetnt, regular_expression): + m = re.match(regular_expression, conetnt) + + if m: + return m.groups()[0] + else: + raise Exception('无法使用正则提取') + + +def get_content(url, + is_chrome, + selector_type, + selector, + regular_expression=None): + content = None + if is_chrome == 'no': + selector_handler = new_handler('request') + + if selector_type == 'xpath': + content = selector_handler.get_by_xpath(url, selector) + else: + selector_handler = new_handler('phantomjs') + + if selector_type == 'xpath': + content = selector_handler.get_by_xpath(url, selector) + + if regular_expression: + content = extract_by_re(content, regular_expression) + return content diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 69a6bcd..e179e69 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,30 +3,17 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 09:57:08 +@LastEditTime: 2019-03-26 13:42:29 ''' from datetime import datetime from apscheduler.jobstores.base import JobLookupError from app import app, db, scheduler -from app.main.selector.selector_handler import new_handler from app.models.notification import Notification from app.models.task import Task from app.models.task_status import TaskStatus - - -def get_content(url, is_chrome, selector_type, selector): - if is_chrome == 'no': - selector_handler = new_handler('request') - - if selector_type == 'xpath': - return selector_handler.get_by_xpath(url, selector) - else: - selector_handler = new_handler('phantomjs') - - if selector_type == 'xpath': - return selector_handler.get_by_xpath(url, selector) +from app.main.extract_info import get_content def wraper_msg(title, content): @@ -58,11 +45,12 @@ def send_message(id, content): handler.send(key, header, content) -def monitor(id, url, selector_type, selector, is_chrome): +def monitor(id, url, selector_type, selector, is_chrome, regular_expression): with app.app_context(): status = '成功' try: - content = get_content(url, is_chrome, selector_type, selector) + content = get_content(url, is_chrome, selector_type, selector, + regular_expression) send_message(id, content) except Exception as e: status = repr(e) @@ -74,7 +62,8 @@ def monitor(id, url, selector_type, selector, is_chrome): db.session.commit() -def add_job(id, url, selector_type, selector, is_chrome, interval): +def add_job(id, url, selector_type, selector, is_chrome, interval, + regular_expression): scheduler.add_job( func=monitor, args=( @@ -83,6 +72,7 @@ def add_job(id, url, selector_type, selector, is_chrome, interval): selector_type, selector, is_chrome, + regular_expression, ), trigger='interval', minutes=interval, diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 10381b2..b89d784 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 09:35:16 +@LastEditTime: 2019-03-26 13:39:43 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -53,16 +53,13 @@ class TaskView(ModelView): 'frequency': '频率(分钟)', 'mail': '邮件提醒', 'wechat': '微信提醒', + 'regular_expression': '正则表达式', } + column_descriptions = {'regular_expression': '使用正则表达式进一步提取信息,可以留空'} + column_list = [ - 'id', - 'name', - 'url', - 'frequency', - 'create_time', - 'mail', - 'wechat', + 'id', 'name', 'url', 'frequency', 'create_time', 'mail', 'wechat' ] form_args = { diff --git a/app/models/task.py b/app/models/task.py index f98b939..c35f4a9 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 10:08:56 +@LastEditTime: 2019-03-26 13:44:04 ''' from .. import db from datetime import datetime @@ -19,7 +19,7 @@ class Task(db.Model): is_chrome = db.Column(db.String(32), nullable=False, default='no') frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) - + regular_expression = db.Column(db.String(128)) # 通知方式 mail = db.Column(db.String(32), nullable=False, default='yes') wechat = db.Column(db.String(32), nullable=False, default='no') @@ -29,7 +29,7 @@ def after_insert_listener(mapper, connection, target): from app.main.scheduler import add_job add_job(target.id, target.url, target.selector_type, target.selector, - target.is_chrome, target.frequency) + target.is_chrome, target.frequency, target.regular_expression) from app.models.task_status import TaskStatus task_status = TaskStatus.__table__ @@ -43,7 +43,7 @@ def after_update_listener(mapper, connection, target): remove_job(target.id) add_job(target.id, target.url, target.selector_type, target.selector, - target.is_chrome, target.frequency) + target.is_chrome, target.frequency, target.regular_expression) def after_delete_listener(mapper, connection, target): From a39387f28fa8c855aaeaafcdc201a83e9b4027d0 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 16:02:20 +0800 Subject: [PATCH 025/100] add simple rule --- app/__init__.py | 3 +-- app/main/rule.py | 8 ++++++ app/main/scheduler.py | 51 ++++++++++++++++++++++-------------- app/model_views/task_view.py | 8 ++++-- app/models/content.py | 21 +++++++++++++++ app/models/task.py | 13 +++++---- app/models/task_status.py | 2 +- 7 files changed, 76 insertions(+), 30 deletions(-) create mode 100644 app/main/rule.py create mode 100644 app/models/content.py diff --git a/app/__init__.py b/app/__init__.py index 2007719..e7bc5ee 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -94,6 +94,5 @@ def create_app(config_name): if task_status.task_status == 'run': task_id = task_status.task_id task = Task.query.filter_by(id=task_id).first() - add_job(task.id, task.url, task.selector_type, - task.selector, task.is_chrome, task.frequency) + add_job(task.id, task.frequency) return app diff --git a/app/main/rule.py b/app/main/rule.py new file mode 100644 index 0000000..99c2c6c --- /dev/null +++ b/app/main/rule.py @@ -0,0 +1,8 @@ +def is_changed(rule, content, last_content): + if not last_content: + return True + else: + if not rule: + if last_content != content: + return True + return False diff --git a/app/main/scheduler.py b/app/main/scheduler.py index e179e69..5c77c30 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 13:42:29 +@LastEditTime: 2019-03-26 15:51:46 ''' from datetime import datetime @@ -12,8 +12,10 @@ from app import app, db, scheduler from app.models.notification import Notification from app.models.task import Task +from app.models.content import Content from app.models.task_status import TaskStatus from app.main.extract_info import get_content +from app.main.rule import is_changed def wraper_msg(title, content): @@ -22,14 +24,9 @@ def wraper_msg(title, content): return header, content -def send_message(id, content): +def send_message(content, name, mail, wechat): from app.main.notification.notification_handler import new_handler - task = Task.query.filter_by(id=id).first() - mail = task.mail - wechat = task.wechat - name = task.name - header, content = wraper_msg(name, content) if mail == 'yes': @@ -45,13 +42,35 @@ def send_message(id, content): handler.send(key, header, content) -def monitor(id, url, selector_type, selector, is_chrome, regular_expression): +def monitor(id): with app.app_context(): - status = '成功' + status = '成功执行但未监测到变化' try: + task = Task.query.filter_by(id=id).first() + url = task.url + selector_type = task.selector_type + selector = task.selector + is_chrome = task.is_chrome + regular_expression = task.regular_expression + mail = task.mail + wechat = task.wechat + name = task.name + rule = task.rule + + last = Content.query.filter_by(task_id=id).first() + if not last: + last = Content(id) + + last_content = last.content content = get_content(url, is_chrome, selector_type, selector, regular_expression) - send_message(id, content) + print(rule, content, last_content) + if is_changed(rule, content, last_content): + send_message(content, name, mail, wechat) + last.content = content + db.session.add(last) + db.session.commit() + status = '监测到变化,最新值:' + content except Exception as e: status = repr(e) @@ -62,18 +81,10 @@ def monitor(id, url, selector_type, selector, is_chrome, regular_expression): db.session.commit() -def add_job(id, url, selector_type, selector, is_chrome, interval, - regular_expression): +def add_job(id, interval): scheduler.add_job( func=monitor, - args=( - id, - url, - selector_type, - selector, - is_chrome, - regular_expression, - ), + args=(id, ), trigger='interval', minutes=interval, id='task_{}'.format(id), diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index b89d784..4d01a59 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 13:39:43 +@LastEditTime: 2019-03-26 14:55:27 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -54,9 +54,13 @@ class TaskView(ModelView): 'mail': '邮件提醒', 'wechat': '微信提醒', 'regular_expression': '正则表达式', + 'rule': '监控规则' } - column_descriptions = {'regular_expression': '使用正则表达式进一步提取信息,可以留空'} + column_descriptions = { + 'regular_expression': '使用正则表达式进一步提取信息,可以留空', + 'rule': '规则写法参考文档,留空则只简单监控内容变化' + } column_list = [ 'id', 'name', 'url', 'frequency', 'create_time', 'mail', 'wechat' diff --git a/app/models/content.py b/app/models/content.py new file mode 100644 index 0000000..c01cf8f --- /dev/null +++ b/app/models/content.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# coding=UTF-8 +''' +@Author: LogicJake +@Date: 2019-03-26 14:58:27 +@LastEditTime: 2019-03-26 15:31:15 +''' + +from .. import db + + +class Content(db.Model): + id = db.Column(db.Integer, primary_key=True) + task_id = db.Column(db.Integer, nullable=False) + content = db.Column(db.String(128), nullable=False) + + def __init__(self, task_id): + self.task_id = task_id + + +db.create_all() diff --git a/app/models/task.py b/app/models/task.py index c35f4a9..f75cdf7 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 13:44:04 +@LastEditTime: 2019-03-26 15:50:04 ''' from .. import db from datetime import datetime @@ -20,6 +20,7 @@ class Task(db.Model): frequency = db.Column(db.Integer, nullable=False, default='5') create_time = db.Column(db.DateTime, nullable=False, default=datetime.now) regular_expression = db.Column(db.String(128)) + rule = db.Column(db.String(128)) # 通知方式 mail = db.Column(db.String(32), nullable=False, default='yes') wechat = db.Column(db.String(32), nullable=False, default='no') @@ -28,8 +29,7 @@ class Task(db.Model): def after_insert_listener(mapper, connection, target): from app.main.scheduler import add_job - add_job(target.id, target.url, target.selector_type, target.selector, - target.is_chrome, target.frequency, target.regular_expression) + add_job(target.id, target.frequency) from app.models.task_status import TaskStatus task_status = TaskStatus.__table__ @@ -42,8 +42,7 @@ def after_update_listener(mapper, connection, target): remove_job(target.id) - add_job(target.id, target.url, target.selector_type, target.selector, - target.is_chrome, target.frequency, target.regular_expression) + add_job(target.id, target.frequency) def after_delete_listener(mapper, connection, target): @@ -56,6 +55,10 @@ def after_delete_listener(mapper, connection, target): connection.execute( task_status.delete().where(TaskStatus.task_id == target.id)) + from app.models.content import Content + content = Content.__table__ + connection.execute(content.delete().where(Content.task_id == target.id)) + event.listen(Task, 'after_insert', after_insert_listener) event.listen(Task, 'after_update', after_update_listener) diff --git a/app/models/task_status.py b/app/models/task_status.py index 48b4876..7fba2e5 100644 --- a/app/models/task_status.py +++ b/app/models/task_status.py @@ -27,7 +27,7 @@ def after_update_listener(mapper, connection, target): task.select().where(Task.id == target.id)) for t in select_res: - add_job(target.id, t[2], t[3], t[4], t[5], t[6]) + add_job(target.id, t[6]) else: remove_job(target.id) From 4732f0252df26e6517f4b91f9e672c1506bee6a5 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 16:20:09 +0800 Subject: [PATCH 026/100] feat xpath get text default --- app/main/selector/phantomjs_selector.py | 4 +++- app/main/selector/request_selector.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py index b59a557..4be9353 100644 --- a/app/main/selector/phantomjs_selector.py +++ b/app/main/selector/phantomjs_selector.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-25 13:31:17 +@LastEditTime: 2019-03-26 16:19:42 ''' import warnings @@ -28,6 +28,8 @@ def get_by_xpath(self, url, xpath): if len(content) != 0: res = content[0] + if type(res) == etree._Element: + res = res.text else: raise Exception('无法获取文本信息') diff --git a/app/main/selector/request_selector.py b/app/main/selector/request_selector.py index 334b04d..abea762 100644 --- a/app/main/selector/request_selector.py +++ b/app/main/selector/request_selector.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:31:35 -@LastEditTime: 2019-03-25 13:19:30 +@LastEditTime: 2019-03-26 16:18:16 ''' import requests from lxml import etree @@ -22,6 +22,8 @@ def get_by_xpath(self, url, xpath): if len(content) != 0: res = content[0] + if type(res) == etree._Element: + res = res.text else: raise Exception('无法获取文本信息') From 0d2f2db1e9d4f0cb1d4e41c8a41cc36b204670c8 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 17:32:01 +0800 Subject: [PATCH 027/100] feat scrapy --- app/main/extract_info.py | 8 ++++++ app/main/scheduler.py | 3 +-- app/main/selector/phantomjs_selector.py | 35 ++++++++++++++----------- app/main/selector/request_selector.py | 32 +++++++++++++--------- app/main/selector/selector.py | 6 ++++- app/model_views/task_view.py | 13 ++++++--- 6 files changed, 63 insertions(+), 34 deletions(-) diff --git a/app/main/extract_info.py b/app/main/extract_info.py index f25df43..c490229 100644 --- a/app/main/extract_info.py +++ b/app/main/extract_info.py @@ -22,11 +22,19 @@ def get_content(url, if selector_type == 'xpath': content = selector_handler.get_by_xpath(url, selector) + elif selector_type == 'css': + content = selector_handler.get_by_css(url, selector) + else: + raise Exception('无效选择器') else: selector_handler = new_handler('phantomjs') if selector_type == 'xpath': content = selector_handler.get_by_xpath(url, selector) + elif selector_type == 'css': + content = selector_handler.get_by_css(url, selector) + else: + raise Exception('无效选择器') if regular_expression: content = extract_by_re(content, regular_expression) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index 5c77c30..dad12b6 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 15:51:46 +@LastEditTime: 2019-03-26 17:31:42 ''' from datetime import datetime @@ -64,7 +64,6 @@ def monitor(id): last_content = last.content content = get_content(url, is_chrome, selector_type, selector, regular_expression) - print(rule, content, last_content) if is_changed(rule, content, last_content): send_message(content, name, mail, wechat) last.content = content diff --git a/app/main/selector/phantomjs_selector.py b/app/main/selector/phantomjs_selector.py index 4be9353..4a99742 100644 --- a/app/main/selector/phantomjs_selector.py +++ b/app/main/selector/phantomjs_selector.py @@ -3,35 +3,40 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:52:35 -@LastEditTime: 2019-03-26 16:19:42 +@LastEditTime: 2019-03-26 17:00:35 ''' import warnings -from lxml import etree from selenium import webdriver -from app.main.selector.selector import Selector +from app.main.selector.selector import Selector as FatherSelector +from scrapy.selector import Selector warnings.filterwarnings("ignore") -class PhantomJSSelector(Selector): - def get_by_xpath(self, url, xpath): +class PhantomJSSelector(FatherSelector): + def get_html(self, url): driver = webdriver.PhantomJS() driver.get(url) - html = driver.page_source - s = etree.HTML(html) - res = None + driver.close() + return html - content = s.xpath(xpath) + def get_by_xpath(self, url, xpath): + html = self.get_html(url) + res = Selector(text=html).xpath(xpath).extract() - if len(content) != 0: - res = content[0] - if type(res) == etree._Element: - res = res.text + if len(res) != 0: + return res[0] else: raise Exception('无法获取文本信息') - driver.close() - return res + def get_by_css(self, url, xpath): + html = self.get_html(url) + res = Selector(text=html).css(xpath).extract() + + if len(res) != 0: + return res[0] + else: + raise Exception('无法获取文本信息') diff --git a/app/main/selector/request_selector.py b/app/main/selector/request_selector.py index abea762..05f5392 100644 --- a/app/main/selector/request_selector.py +++ b/app/main/selector/request_selector.py @@ -3,28 +3,34 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:31:35 -@LastEditTime: 2019-03-26 16:18:16 +@LastEditTime: 2019-03-26 17:00:29 ''' import requests -from lxml import etree -from app.main.selector.selector import Selector +from app.main.selector.selector import Selector as FatherSelector +from scrapy.selector import Selector -class RequestsSelector(Selector): - def get_by_xpath(self, url, xpath): +class RequestsSelector(FatherSelector): + def get_html(self, url): r = requests.get(url, timeout=10) html = r.text - s = etree.HTML(html) - res = None + return html - content = s.xpath(xpath) + def get_by_xpath(self, url, xpath): + html = self.get_html(url) + res = Selector(text=html).xpath(xpath).extract() - if len(content) != 0: - res = content[0] - if type(res) == etree._Element: - res = res.text + if len(res) != 0: + return res[0] else: raise Exception('无法获取文本信息') - return res + def get_by_css(self, url, xpath): + html = self.get_html(url) + res = Selector(text=html).css(xpath).extract() + + if len(res) != 0: + return res[0] + else: + raise Exception('无法获取文本信息') diff --git a/app/main/selector/selector.py b/app/main/selector/selector.py index 15eec3b..ce857d2 100644 --- a/app/main/selector/selector.py +++ b/app/main/selector/selector.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-25 12:23:59 -@LastEditTime: 2019-03-25 12:24:39 +@LastEditTime: 2019-03-26 16:45:34 ''' from abc import ABCMeta, abstractmethod @@ -14,3 +14,7 @@ class Selector(): @abstractmethod def get_by_xpath(self): pass + + @abstractmethod + def get_by_css(self): + pass diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 4d01a59..0154173 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 14:55:27 +@LastEditTime: 2019-03-26 16:58:01 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -32,11 +32,19 @@ def check_selector(form, field): if selector_type == 'xpath': selector_handler.get_by_xpath(url, selector) + elif selector_type == 'css': + selector_handler.get_by_css(url, selector) + else: + raise Exception('无效选择器') else: selector_handler = new_handler('phantomjs') if selector_type == 'xpath': selector_handler.get_by_xpath(url, selector) + elif selector_type == 'css': + selector_handler.get_by_css(url, selector) + else: + raise Exception('无效选择器') except Exception as e: raise ValidationError(repr(e)) @@ -76,8 +84,7 @@ class TaskView(ModelView): } form_choices = { - 'selector_type': [('xpath', 'xpath'), ('css selector', - 'css selector')], + 'selector_type': [('xpath', 'xpath'), ('css', 'css selector')], 'is_chrome': [('no', 'no'), ('yes', 'yes')], 'mail': [('yes', 'yes'), ('no', 'no')], 'wechat': [('no', 'no'), ('yes', 'yes')], From 8cef7ee003b6d4c4eec2a2633406ef8850fc7b5d Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 18:27:26 +0800 Subject: [PATCH 028/100] =?UTF-8?q?fix=20=E6=9F=A5=E4=B8=8D=E5=88=B0task?= =?UTF-8?q?=5Fstatus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/scheduler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/main/scheduler.py b/app/main/scheduler.py index dad12b6..ea5938e 100644 --- a/app/main/scheduler.py +++ b/app/main/scheduler.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 14:32:34 -@LastEditTime: 2019-03-26 17:31:42 +@LastEditTime: 2019-03-26 18:24:16 ''' from datetime import datetime @@ -73,7 +73,7 @@ def monitor(id): except Exception as e: status = repr(e) - task_status = TaskStatus.query.filter_by(id=id).first() + task_status = TaskStatus.query.filter_by(task_id=id).first() task_status.last_run = datetime.now() task_status.last_status = status db.session.add(task_status) From 1eb0c42d21a3a56ad1597d72cce0793b006e778e Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 18:27:41 +0800 Subject: [PATCH 029/100] =?UTF-8?q?add=20=E5=A4=96=E9=94=AE=E7=BA=A6?= =?UTF-8?q?=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/content.py | 7 +++++-- app/models/task_status.py | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/models/content.py b/app/models/content.py index c01cf8f..d0b1c32 100644 --- a/app/models/content.py +++ b/app/models/content.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-26 14:58:27 -@LastEditTime: 2019-03-26 15:31:15 +@LastEditTime: 2019-03-26 18:18:44 ''' from .. import db @@ -11,7 +11,10 @@ class Content(db.Model): id = db.Column(db.Integer, primary_key=True) - task_id = db.Column(db.Integer, nullable=False) + task_id = db.Column( + db.Integer, + db.ForeignKey('task.id', ondelete='CASCADE'), + nullable=False) content = db.Column(db.String(128), nullable=False) def __init__(self, task_id): diff --git a/app/models/task_status.py b/app/models/task_status.py index 7fba2e5..2d46896 100644 --- a/app/models/task_status.py +++ b/app/models/task_status.py @@ -5,7 +5,8 @@ class TaskStatus(db.Model): id = db.Column(db.Integer, primary_key=True) - task_id = db.Column(db.Integer) + task_id = db.Column(db.Integer, db.ForeignKey( + 'task.id', ondelete='CASCADE')) task_name = db.Column(db.String(32), nullable=False) last_run = db.Column(db.DateTime, nullable=False, default=datetime.now) last_status = db.Column(db.String(64), nullable=False, default='创建任务成功') From f473b1e87c90edfd4a885b29a6da8f0ecc4c517b Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 18:36:47 +0800 Subject: [PATCH 030/100] =?UTF-8?q?feat=20=E4=BF=AE=E6=94=B9=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=80=9A=E7=9F=A5=E6=96=B9=E5=BC=8F=E5=92=8C=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/model_views/task_view.py | 16 ++++++++++++++-- app/models/task.py | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 0154173..76b798f 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 16:58:01 +@LastEditTime: 2019-03-26 18:34:24 ''' import requests from flask_admin.contrib.sqla import ModelView @@ -20,6 +20,15 @@ def check_url(form, field): raise ValidationError(repr(e)) +def check_noti(form, field): + is_wechat = form.wechat.data + is_mail = form.mail.data + + print(is_wechat, is_mail) + if is_wechat == 'no' and is_mail == 'no': + raise ValidationError('必须选择一个通知方式') + + def check_selector(form, field): try: selector_type = form.selector_type.data @@ -80,13 +89,16 @@ class TaskView(ModelView): }, 'selector': { 'validators': [check_selector] + }, + 'wechat': { + 'validators': [check_noti] } } form_choices = { 'selector_type': [('xpath', 'xpath'), ('css', 'css selector')], 'is_chrome': [('no', 'no'), ('yes', 'yes')], - 'mail': [('yes', 'yes'), ('no', 'no')], + 'mail': [('no', 'no'), ('yes', 'yes')], 'wechat': [('no', 'no'), ('yes', 'yes')], } diff --git a/app/models/task.py b/app/models/task.py index f75cdf7..b011774 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -3,7 +3,7 @@ ''' @Author: LogicJake @Date: 2019-03-24 16:35:24 -@LastEditTime: 2019-03-26 15:50:04 +@LastEditTime: 2019-03-26 18:33:25 ''' from .. import db from datetime import datetime @@ -22,7 +22,7 @@ class Task(db.Model): regular_expression = db.Column(db.String(128)) rule = db.Column(db.String(128)) # 通知方式 - mail = db.Column(db.String(32), nullable=False, default='yes') + mail = db.Column(db.String(32), nullable=False, default='no') wechat = db.Column(db.String(32), nullable=False, default='no') From 3bffdfdd5faca8a407465250177a8b0fae55d9b5 Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Tue, 26 Mar 2019 20:58:25 +0800 Subject: [PATCH 031/100] =?UTF-8?q?add=20=E7=99=BB=E5=BD=95=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__init__.py | 31 ++ app/main/login_form.py | 10 + app/main/views.py | 31 +- app/model_views/mail_setting_view.py | 11 +- app/model_views/notification_view.py | 10 +- app/model_views/task_status_view.py | 8 + app/model_views/task_view.py | 11 +- app/model_views/user_view.py | 19 ++ app/models/user.py | 34 +++ app/templates/admin/index.html | 416 ++++++++++++++++++++++++++- app/templates/login.html | 22 ++ md2html.py | 5 +- 12 files changed, 593 insertions(+), 15 deletions(-) create mode 100644 app/main/login_form.py create mode 100644 app/model_views/user_view.py create mode 100644 app/models/user.py create mode 100644 app/templates/login.html diff --git a/app/__init__.py b/app/__init__.py index e7bc5ee..a4e56d3 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,26 +3,43 @@ # @Date: 2019-02-15 19:33:23 # @Last Modified time: 2019-03-13 17:06:37 from flask import Flask +from flask_login import LoginManager from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin, AdminIndexView from app.model_views.task_view import TaskView from app.model_views.notification_view import NotificationView from app.model_views.mail_setting_view import MailSettingView from app.model_views.task_status_view import TaskStatusView +from app.model_views.user_view import UserView + from flask_apscheduler import APScheduler +from flask_bootstrap import Bootstrap + import psutil import os db = SQLAlchemy() +login = LoginManager() admin = Admin(name='I AM WATCHING YOU', template_mode='bootstrap3') scheduler = APScheduler() app = Flask(__name__) +bootstrap = Bootstrap() def create_app(config_name): from config import config app.config.from_object(config[config_name]) + # 注册flask-login + login.init_app(app) + + # bootstrap + bootstrap.init_app(app) + + @login.user_loader + def load_user(user_id): + return User.query.get(user_id) + # 注册蓝图 from app.main.views import bp as main_bp app.register_blueprint(main_bp) @@ -45,11 +62,13 @@ def create_app(config_name): from app.models.mail_setting import MailSetting from app.models.notification import Notification from app.models.task_status import TaskStatus + from app.models.user import User admin.add_view(TaskStatusView(TaskStatus, db.session, name='任务状态')) admin.add_view(TaskView(Task, db.session, name='任务管理')) admin.add_view(NotificationView(Notification, db.session, name='通知方式管理')) admin.add_view(MailSettingView(MailSetting, db.session, name='系统邮箱设置')) + admin.add_view(UserView(User, db.session, name='账号密码管理')) with app.test_request_context(): db.create_all() @@ -60,6 +79,18 @@ def create_app(config_name): db.session.add(mail_setting) db.session.commit() + # 初始化账号密码 + user = User.query.first() + if user is None: + import random + import string + random_password = ''.join( + random.sample(string.ascii_letters + string.digits, 10)) + + user = User('admin', random_password) + db.session.add(user) + db.session.commit() + # 插入默认通知方式 notis = Notification.query.all() mail_exist = False diff --git a/app/main/login_form.py b/app/main/login_form.py new file mode 100644 index 0000000..1c99335 --- /dev/null +++ b/app/main/login_form.py @@ -0,0 +1,10 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, PasswordField, BooleanField, SubmitField +from wtforms.validators import DataRequired + + +class LoginForm(FlaskForm): + username = StringField('用户名', validators=[DataRequired("请输入帐号!")]) + password = PasswordField('密码', validators=[DataRequired("请输入密码!")]) + remember_me = BooleanField('记住我', default=False) + submit = SubmitField('登录') diff --git a/app/main/views.py b/app/main/views.py index 46799ee..5570be0 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -2,14 +2,33 @@ # @Author: LogicJake # @Date: 2019-02-15 20:04:12 # @Last Modified time: 2019-03-14 21:17:03 -from flask import Blueprint +from flask import Blueprint, render_template, request, redirect from app.main.notification.notification_handler import new_handler +from flask_login import login_user, logout_user +from app.models.user import User +from app.main.login_form import LoginForm bp = Blueprint('main', __name__) -@bp.route('/send') -def test(): - handler = new_handler('mail') - handler.send('835410808@qq.com', 'fuck') - return 'test' +@bp.route('/login', methods=['GET', 'POST']) +def login(): + error = None + form = LoginForm() + if form.validate_on_submit(): + user_name = request.form.get('username', None) + password = request.form.get('password', None) + remember_me = request.form.get('remember_me', False) + user = User.query.filter_by(name=user_name).first() + if user and password and user.password == password: + login_user(user, remember=remember_me) + return redirect('/') + else: + error = '账户名或密码错误' + return render_template('login.html', error=error, form=form) + + +@bp.route('/logout', methods=['GET', 'POST']) +def logout(): + logout_user() + return '注销成功' diff --git a/app/model_views/mail_setting_view.py b/app/model_views/mail_setting_view.py index 3383aa9..c373ef3 100644 --- a/app/model_views/mail_setting_view.py +++ b/app/model_views/mail_setting_view.py @@ -3,13 +3,20 @@ ''' @Author: LogicJake @Date: 2019-03-24 18:41:42 -@LastEditTime: 2019-03-25 18:48:42 +@LastEditTime: 2019-03-26 20:51:52 ''' - +from flask_login import current_user +from flask import redirect, url_for from flask_admin.contrib.sqla import ModelView class MailSettingView(ModelView): + def is_accessible(self): + return current_user.is_authenticated + + def inaccessible_callback(self, name, **kwargs): + return redirect(url_for('main.login')) + column_labels = { 'mail_server': '邮箱服务器', 'mail_port': '端口', diff --git a/app/model_views/notification_view.py b/app/model_views/notification_view.py index 4ae5d86..4420ba9 100644 --- a/app/model_views/notification_view.py +++ b/app/model_views/notification_view.py @@ -3,12 +3,20 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 09:24:31 +@LastEditTime: 2019-03-26 20:51:47 ''' from flask_admin.contrib.sqla import ModelView +from flask import redirect, url_for +from flask_login import current_user class NotificationView(ModelView): + def is_accessible(self): + return current_user.is_authenticated + + def inaccessible_callback(self, name, **kwargs): + return redirect(url_for('main.login')) + can_create = False can_delete = False diff --git a/app/model_views/task_status_view.py b/app/model_views/task_status_view.py index c810579..d705a04 100644 --- a/app/model_views/task_status_view.py +++ b/app/model_views/task_status_view.py @@ -1,7 +1,15 @@ from flask_admin.contrib.sqla import ModelView +from flask import redirect, url_for +from flask_login import current_user class TaskStatusView(ModelView): + def is_accessible(self): + return current_user.is_authenticated + + def inaccessible_callback(self, name, **kwargs): + return redirect(url_for('main.login')) + can_create = False can_delete = False diff --git a/app/model_views/task_view.py b/app/model_views/task_view.py index 76b798f..5f31487 100644 --- a/app/model_views/task_view.py +++ b/app/model_views/task_view.py @@ -3,13 +3,14 @@ ''' @Author: LogicJake @Date: 2019-03-24 11:01:56 -@LastEditTime: 2019-03-26 18:34:24 +@LastEditTime: 2019-03-26 20:51:37 ''' import requests from flask_admin.contrib.sqla import ModelView from wtforms.validators import ValidationError - +from flask_login import current_user from app.main.selector.selector_handler import new_handler +from flask import redirect, url_for def check_url(form, field): @@ -59,6 +60,12 @@ def check_selector(form, field): class TaskView(ModelView): + def is_accessible(self): + return current_user.is_authenticated + + def inaccessible_callback(self, name, **kwargs): + return redirect(url_for('main.login')) + column_labels = { 'id': '任务id', 'name': '任务名称', diff --git a/app/model_views/user_view.py b/app/model_views/user_view.py new file mode 100644 index 0000000..b744f62 --- /dev/null +++ b/app/model_views/user_view.py @@ -0,0 +1,19 @@ +from flask_login import current_user +from flask import redirect, url_for +from flask_admin.contrib.sqla import ModelView + + +class UserView(ModelView): + def is_accessible(self): + return current_user.is_authenticated + + def inaccessible_callback(self, name, **kwargs): + return redirect(url_for('main.login')) + + column_labels = { + 'name': '用户名', + 'password': '密码', + } + + can_create = False + can_delete = False diff --git a/app/models/user.py b/app/models/user.py new file mode 100644 index 0000000..efe56fd --- /dev/null +++ b/app/models/user.py @@ -0,0 +1,34 @@ +from .. import db +from flask_login import logout_user +from sqlalchemy import event +from flask import redirect + + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(64)) + password = db.Column(db.String(64)) + + def __init__(self, name, password): + self.name = name + self.password = password + + def is_active(self): + return True + + def get_id(self): + return self.id + + def is_authenticated(self): + return True + + def is_anonymous(self): + return False + + +def after_update_listener(mapper, connection, target): + logout_user() + redirect('/') + + +event.listen(User, 'after_update', after_update_listener) diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html index 5ffb6df..24d17a3 100644 --- a/app/templates/admin/index.html +++ b/app/templates/admin/index.html @@ -1,5 +1,415 @@ -{% extends 'admin/master.html' %} - +{% extends 'admin/master.html' %} {% block body %} -