From dfe30f47769b1dd28e4791f9f73e3c5017bfde25 Mon Sep 17 00:00:00 2001 From: MasonLiu <2857911564@qq.com> Date: Thu, 5 Dec 2024 12:20:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AD=BE=E5=90=8D=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E6=9B=B4=E6=96=B0=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core.py | 177 +++++++++++------- GotoSend_4hou.py | 18 +- GotoSend_anquanke.py | 17 +- GotoSend_doonsec.py | 17 +- GotoSend_freebuf.py | 17 +- GotoSend_qianxin.py | 17 +- GotoSend_xianzhi.py | 17 +- JSON/4hou.json | 14 +- JSON/anquanke.json | 48 ++--- JSON/doonsec.json | 160 ++++++++-------- JSON/freebuf.json | 32 ++-- SendBot.py | 2 +- __pycache__/GotoSend_4hou.cpython-312.pyc | Bin 5526 -> 5499 bytes __pycache__/GotoSend_anquanke.cpython-312.pyc | Bin 5401 -> 5360 bytes __pycache__/GotoSend_doonsec.cpython-312.pyc | Bin 5654 -> 5607 bytes __pycache__/GotoSend_freebuf.cpython-312.pyc | Bin 5560 -> 5523 bytes __pycache__/GotoSend_qianxin.cpython-312.pyc | Bin 5339 -> 5273 bytes __pycache__/GotoSend_xianzhi.cpython-312.pyc | Bin 5290 -> 5242 bytes __pycache__/SendBot.cpython-312.pyc | Bin 3719 -> 3698 bytes config.yaml | 2 +- db/4hou.db | Bin 229376 -> 229376 bytes db/anquanke.db | Bin 12288 -> 12288 bytes db/doonsec.db | Bin 69632 -> 69632 bytes db/freebuf.db | Bin 20480 -> 20480 bytes db/qianxin.db | Bin 12288 -> 12288 bytes db/xianzhi.db | Bin 24576 -> 24576 bytes 26 files changed, 289 insertions(+), 249 deletions(-) diff --git a/Core.py b/Core.py index ee74183..c00bca8 100644 --- a/Core.py +++ b/Core.py @@ -4,8 +4,8 @@ import sys import time import yaml import requests -from SendBot import SendToFeishu -from media.common import run +from SendBot import SendToFeishu, gen_sign +from media.common import run, seebug_main, M_4hou_main, anquanke_main, sec_wiki_main, huawei_main, doonsec_main, qianxin_main from media.freebuf import freebuf_main from media.xianzhi import xianzhi_main from GotoSend_4hou import Src_4hou @@ -16,26 +16,95 @@ from GotoSend_freebuf import Src_freebuf from GotoSend_qianxin import Src_qianxin # 加载参数 - with open('./config.yaml', 'r', encoding="utf-8") as file: config = yaml.safe_load(file) # sleep_time = int(f"{config['sleep_time']}") e_hour = int(f"{config['e_hour']}") - -def crab_job(): +webhook_url_once, timestamp_once, sign_once = gen_sign() +def send_job(time_1): + # 爬取数据 print("正在启动各爬虫并获取资源中...") run() - xianzhi_main() freebuf_main() + xianzhi_main() -def send_job(time_1): - Src_4hou(time_1) - Src_anquanke(time_1) - Src_doonsec(time_1) - Src_xianzhi(time_1) - Src_freebuf(time_1) - Src_qianxin(time_1) + # 分析各个数据源的结果 + reslt_4hou = Src_4hou(time_1) + reslt_anquanke = Src_anquanke(time_1) + reslt_doonsec = Src_doonsec(time_1) + reslt_xianzhi = Src_xianzhi(time_1) + reslt_freebuf = Src_freebuf(time_1) + reslt_qianxin = Src_qianxin(time_1) + + webhook_url, timestamp, sign = gen_sign() + + + # 发送嘶吼资讯 + if reslt_4hou: + print("-" * 40) + print("嘶吼资讯递送中:") + SendToFeishu(reslt_4hou, "嘶吼资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("嘶吼数据为空,跳过执行。") + + # 发送安全客资讯 + if reslt_anquanke: + print("-" * 40) + print("安全客资讯递送中:") + SendToFeishu(reslt_anquanke, "安全客资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("安全客数据为空,跳过执行。") + + # 发送洞见微信安全资讯 + if reslt_doonsec: + print("-" * 40) + print("洞见微信安全资讯递送中:") + SendToFeishu(reslt_doonsec, "洞见微信安全资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("洞见微信安全数据为空,跳过执行。") + + # 发送先知社区资讯 + if reslt_xianzhi: + print("-" * 40) + print("先知社区资讯递送中:") + SendToFeishu(reslt_xianzhi, "先知社区资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("先知社区数据为空,跳过执行。") + + # 发送FreeBuf资讯 + if reslt_freebuf: + print("-" * 40) + print("FreeBuf资讯递送中:") + SendToFeishu(reslt_freebuf, "FreeBuf资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("FreeBuf数据为空,跳过执行。") + + # 发送奇安信攻防社区资讯 + if reslt_qianxin: + print("-" * 40) + print("奇安信攻防社区资讯递送中:") + SendToFeishu(reslt_qianxin, "奇安信攻防社区资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + time.sleep(60) + else: + print("-" * 40) + print("奇安信攻防社区数据为空,跳过执行。") def signal_handler(sig, frame): print("接收到退出信号,程序即将退出...") @@ -52,11 +121,10 @@ def main_loop(): try: # 执行任务 print(f"第{n}次执行,当前时间为:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") - crab_job() send_job(e_hour) print("执行完毕,等待下一次执行...") n += 1 - time.sleep(e_hour * 60 * 60 - 3 * 60) + time.sleep(e_hour * 60 * 60 - 5 * 60) except Exception as e: print(f"发生错误: {e}, 程序已暂停") @@ -75,61 +143,27 @@ def check_rss_status(url): return f"请求异常: {str(e)}" def test_rss_source(): + rss_sources = { + "奇安信": "https://forum.butian.net/Rss", + "洞见": "https://wechat.doonsec.com/bayes_rss.xml", + # "华为": "https://www.huawei.com/cn/rss-feeds/psirt/rss", + # "安全维基": "https://www.sec_wiki.com/news/rss", + "安全客": "https://api.anquanke.com/data/v1/rss", + "嘶吼": "https://www.4hou.com/feed", + # "Seebug社区": "https://paper.seebug.org/rss/", + "FreeBuf社区": "https://www.freebuf.com/feed", + "先知社区": "https://xz.aliyun.com/feed" + } + rss_info = "" - url_1 = check_rss_status("https://forum.butian.net/Rss") - if url_1 == True: - rss_info += "奇安信 源正常\n" - else: - rss_info += f"奇安信 源异常: {url_1}\n" - - url_2 = check_rss_status("https://wechat.doonsec.com/bayes_rss.xml") - if url_2 == True: - rss_info += "洞见 源正常\n" - else: - rss_info += f"洞见 源异常: {url_2}\n" - - url_3 = check_rss_status("https://www.huawei.com/cn/rss-feeds/psirt/rss") - if url_3 == True: - rss_info += "华为 源正常\n" - else: - rss_info += f"华为 源异常: {url_3}\n" - - # url_4 = check_rss_status("https://www.sec_wiki.com/news/rss") - # if url_4 == True: - # rss_info += "安全维基 源正常\n" - # else: - # rss_info += f"安全维基 源异常: {url_4}\n" - - url_5 = check_rss_status("https://api.anquanke.com/data/v1/rss") - if url_5 == True: - rss_info += "安全客 源正常\n" - else: - rss_info += f"安全客 源异常: {url_5}\n" - - url_6 = check_rss_status("https://www.4hou.com/feed") - if url_6 == True: - rss_info += "嘶吼 源正常\n" - else: - rss_info += f"嘶吼 源异常: {url_6}\n" - - url_7 = check_rss_status("https://paper.seebug.org/rss/") - if url_7 == True: - rss_info += "Seebug社区 源正常\n" - else: - rss_info += f"Seebug社区 源异常: {url_7}\n" - - url_8 = check_rss_status("https://www.freebuf.com/feed") - if url_8 == True: - rss_info += "FreeBuf社区 源正常\n" - else: - rss_info += f"FreeBuf社区 源异常: {url_8}\n" - - url_9 = check_rss_status("https://xz.aliyun.com/feed") - if url_9 == True: - rss_info += "先知社区 源正常\n" - else: - rss_info += f"先知社区 源异常: {url_9}\n" - + + for name, url in rss_sources.items(): + status = check_rss_status(url) + if status: + rss_info += f"{name} 源正常\n" + else: + rss_info += f"{name} 源异常: {status}\n" + return rss_info if __name__ == "__main__": @@ -139,10 +173,9 @@ if __name__ == "__main__": start_info += "程序已启动,当前时间为:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n" start_info += "程序作者:MasonLiu \t 开源地址:[GM-gitea](https://git.masonliu.com/MasonLiu/PyBot)" + "\n" start_info += "时间配置:每隔" + str(e_hour) + "小时执行一次推送\n" - start_info += "可启用源:\n嘶吼\n洞见微信安全资讯\n安全客\n先知社区\n" - SendToFeishu(start_info, "程序信息") + SendToFeishu(start_info, "程序信息", webhook_url_once, timestamp_once, sign_once) # print(start_info) - SendToFeishu(rss_info, "RSS源状态") + SendToFeishu(rss_info, "RSS源状态", webhook_url_once, timestamp_once, sign_once) # print(rss_info) # 首次运行先暂停两分钟 diff --git a/GotoSend_4hou.py b/GotoSend_4hou.py index 4cec4b4..9fdb637 100644 --- a/GotoSend_4hou.py +++ b/GotoSend_4hou.py @@ -121,14 +121,16 @@ def Src_4hou(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("嘶吼资讯递送中:") - SendToFeishu(results, "嘶吼资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("嘶吼数据为空,跳过执行。") - # print(results) + return "" if __name__ == "__main__": - Src_4hou(4) + reslts = Src_4hou(4) + if reslts != "": + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("嘶吼数据为空,跳过执行。") + diff --git a/GotoSend_anquanke.py b/GotoSend_anquanke.py index f54147b..872ac75 100644 --- a/GotoSend_anquanke.py +++ b/GotoSend_anquanke.py @@ -114,14 +114,15 @@ def Src_anquanke(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("安全客资讯递送中:") - SendToFeishu(results, "安全客资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("安全客数据为空,跳过执行。") - # print(results) + return False if __name__ == "__main__": - Src_anquanke(4) + reslts = Src_anquanke(4) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("安全客数据为空,跳过执行。") diff --git a/GotoSend_doonsec.py b/GotoSend_doonsec.py index 0db946a..7e5ac15 100644 --- a/GotoSend_doonsec.py +++ b/GotoSend_doonsec.py @@ -122,14 +122,15 @@ def Src_doonsec(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("洞见微信安全资讯递送中:") - SendToFeishu(results, "洞见微信安全资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("洞见数据为空,跳过执行。") - # print(results) + return False if __name__ == "__main__": - Src_doonsec(4) + reslts = Src_doonsec(4) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("洞见微信安全数据为空,跳过执行。") diff --git a/GotoSend_freebuf.py b/GotoSend_freebuf.py index febb1fe..ece423d 100644 --- a/GotoSend_freebuf.py +++ b/GotoSend_freebuf.py @@ -121,14 +121,15 @@ def Src_freebuf(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("Freebuf资讯递送中:") - SendToFeishu(results, "Freebuf资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("Freebuf数据为空,跳过执行。") - # print(results) + return False if __name__ == "__main__": - Src_freebuf(4) + reslts = Src_freebuf(4) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("Freebuf数据为空,跳过执行。") \ No newline at end of file diff --git a/GotoSend_qianxin.py b/GotoSend_qianxin.py index 685b629..41643b9 100644 --- a/GotoSend_qianxin.py +++ b/GotoSend_qianxin.py @@ -113,14 +113,15 @@ def Src_qianxin(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("奇安信攻防社区资讯递送中:") - SendToFeishu(results, "奇安信攻防社区资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("奇安信攻防社区数据为空,跳过执行。") - # print(results) + return False if __name__ == "__main__": - Src_qianxin(4) + reslts = Src_qianxin(4) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("奇安信攻防社区数据为空,跳过执行。") diff --git a/GotoSend_xianzhi.py b/GotoSend_xianzhi.py index 4dc842f..cb5cf7d 100644 --- a/GotoSend_xianzhi.py +++ b/GotoSend_xianzhi.py @@ -118,14 +118,15 @@ def Src_xianzhi(e_hour): if filtered_articles: results = get_filtered_articles(filtered_articles) - print("先知社区资讯递送中:") - SendToFeishu(results, "先知社区资讯递送") - print("-" * 40 + "\n") - # print(results) + return results else: - # 如果为空,则跳过执行 - print("先知社区数据为空,跳过执行。") - # print(results) + return False if __name__ == "__main__": - Src_xianzhi(100) + reslts = Src_xianzhi(4) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("先知社区数据为空,跳过执行。") diff --git a/JSON/4hou.json b/JSON/4hou.json index 96d25c7..6146f09 100644 --- a/JSON/4hou.json +++ b/JSON/4hou.json @@ -1,4 +1,11 @@ [ + { + "title": "网络钓鱼电子邮件越来越多地使用 SVG 附件来逃避检测", + "link": "https://www.4hou.com/posts/rpXB", + "description": "
威胁者越来越多地使用可扩展矢量图形 (SVG) 附件来显示网络钓鱼形式或部署恶意软件,同时逃避检测。网络上的大多数图像都是 JPG 或 PNG 文件,它们由称为像素的小方块网格组成。每个像素都有特定的颜色值,这些像素一起形成整个图像。 SVG(即可缩放矢量图形)以不同的方式显示图像,因为图像不是使用像素,而是通过代码中文本数学公式中描述的线条、形状和文本创建。
例如,以下文本将创建一个矩形、一个圆形、一个链接和一些文本:
\n \n \n \n Hello, SVG!
在浏览器中打开时,该文件将生成上述文本描述的图形。
生成的 SVG 图像
由于这些是矢量图像,它们会自动调整大小,而不会损失图像质量或形状,这使得它们非常适合在可能具有不同分辨率的浏览器应用程序中使用。
使用 SVG 附件逃避检测
在网络钓鱼活动中使用 SVG 附件并不是什么新鲜事,然而,根据安全研究人员发现,威胁者正在网络钓鱼活动中越来越多地使用 SVG 文件。
SVG 附件的多功能性,使得它们不仅可以显示图形,还可以使用。这使得威胁者可以创建 SVG 附件,这些附件可以创建网络钓鱼表单来窃取凭据。如下所示,最近的 SVG 附件 [VirusTotal] 显示了一个带有内置登录表单的虚假 Excel 电子表格,提交后会将数据发送给受害者。
显示网络钓鱼表单的 SVG 附件
最近活动 [VirusTotal] 中使用的其他 SVG 附件会伪装成官方文档或要求提供更多信息,提示您单击下载按钮,然后从远程站点下载恶意软件。
用于分发恶意软件的 SVG 附件
其他活动利用 SVG 附件和嵌入式 JavaScript 在打开图像时,自动将浏览器重定向到托管网络钓鱼表单的网站。问题在于,由于这些文件大多只是图像的文本表示,因此安全软件往往不会检测到它们。
从上传到VirusTotal的样本来看,最多只有一两次被安全软件检测到。尽管如此,接收 SVG 附件对于合法电子邮件来说并不常见,人们应保持怀疑态度。
除非您是开发人员并希望收到这些类型的附件,否则安全研究人员会建议删除包含它们的任何电子邮件会更安全。
", + "pubDate": "Thu, 05 Dec 2024 12:00:00 +0800", + "author": "胡金鱼" + }, { "title": "新型漏洞攻击利用服务器进行恶意更新", "link": "https://www.4hou.com/posts/8gW2", @@ -131,12 +138,5 @@ "description": "以“拥抱以人为本、智能向善的数字未来——携手构建网络空间命运共同体”为主题的2024年世界互联网大会乌镇峰会于11月19日至22日在浙江乌镇举行。盛邦安全受邀参与本次峰会,董事长权小文入选人工智能专委会推进计划牵头人,并参与“2024年世界互联网大会乌镇峰会智能交通论坛”专题对话环节,与业界专家学者共同探讨智联网环境下网络安全前沿技术与发展趋势。
图片来源于世界互联网大会官方
2024年世界互联网大会乌镇峰会,谋划了一系列新议题、新亮点,世界互联网大会人工智能专业委员会正式在会上成立。盛邦安全积极响应,董事长权小文入选专委会推进计划牵头人名单。作为大会国际组织成立后设立的第一个专业化、常态化分支机构,专委会将搭建人工智能国际交流合作平台,开展专题研讨、成果分享、倡议发布等活动,推动人工智能技术以人为本、向上向善。
权小文表示,人工智能在提高社会生产效率、突破技术难题、新应用方面有巨大作用,对于人工智能建议提前做好约束和规范,通过制度约束,加强人工智能技术应用的监管,加强国际合作,倡导技术向善的价值观。
图片来源于世界互联网大会官方
以“智联未来,交通无界—共创智能交通新生态”为主题的智能交通论坛将于11月22日上午召开。盛邦安全董事长权小文受邀参加“智能网联汽车与交通基础设施的协同”专题对话,聚焦智慧交通,分享如何利用卫星互联网推动智能交通安全防护系统的全面升级。
今年,世界互联网大会乌镇峰会迈入第11个年头,正式开启“下一个十年”的新篇章。这十年间网络安全作为护航国家数字经济发展的核心力量,与行业生态紧密协同、持续发展。盛邦安全作为世界互联网大会的会员单位,将继续充分发挥其在网络安全领域的积淀与优势,为构建网络空间命运共同体贡献中国智慧和力量,携手各界共绘“下一个十年”的辉煌未来。
近日,FCIS 2024网络安全创新大会在上海召开,第十届WitAwards 2024 中国网络安全年度评选颁奖盛典同步隆重举行(以下简称WIT)。盛邦安全DayDayMap全球网络空间资产测绘平台凭借领先的IPv6探测技术、显著的科研属性以及灵活的应用场景,荣获WIT2024年度安全技术变革TOP10。
WIT已连续举办九届,是业内广受关注的网络安全创新大奖评选。旨在以专业的角度和公正的态度,发掘优秀行业案例,树立年度标杆。其中,年度安全技术变革TOP10的设立是为了表彰引领或代表了网络安全技术重大变革的创新成果,不仅是对技术本身突破性的认可,更是对这些技术变革者在推动行业进步、提升全球网络安全水平方面所做贡献的肯定。此次荣获WIT2024年度安全技术变革TOP10,是对DayDayMap在网络网络安全领域技术变革的影响力、推动网络空间测绘进步、解决安全挑战以及激发未来创新等方面表现的高度认可。
DayDayMap是一款集产学研一体的全球网络空间资产测绘平台,聚焦空间测绘科研领域,拥有领先的空间测绘技术,丰富的IPv6测绘数据,让网络空间资产可感知、易定位、更有价值。平台提供全面、精准、实时的全球网络空间资产测绘服务,能够自动扫描和智能识别用户在互联网上的多元资产,包括域名、IP地址、端口、服务、组件等信息。通过构建详尽的资产和主机画像,揭示出互联网资产的暴露边界,并精准识别各类资产属性,实现互联网资产的可查、可定位。
应用场景
借助DayDayMap平台,各类组织能全面提升对其在线资产分布的洞察力,强化对数字化资产的整体管理和安全保障;增强组织对未知威胁的预警和响应能力,全面掌控网络空间资产的安全态势,及时感知并减轻潜在安全风险;优化资产安全管理成本,实现安全防护与经济效益的双重提升。
盛邦安全致力于从网络空间视角剖析数字世界, 2022年,盛邦安全率先发布首个网络空间地图——网络空间坤舆图,实现了网络空间与地理空间的关联与映射。2024年,盛邦安全又发布了DayDayMap这一里程碑式的平台,为网络空间地图做底层数据赋能。盛邦安全从未停止过在网络空间测绘领域的深耕与探索,未来,盛邦安全也将紧抓技术变革的浪潮,持续加大投入,不断突破技术边界,为用户提供更加精准、高效的网络空间安全服务,携手共创安全的数字世界。
据Cyber Security News消息,最近,独立研究人员在谷歌Chrome 的 V8 JavaScript 引擎中发现了一个严重性较高的类型混淆漏洞。
在大多数人的观念里,“老人机”功能简单,不能上网购物、玩游戏,只能打电话、收短信,使用起来也相对安全。果真如此吗?
各位 Buffer 周末好,以下是本周「FreeBuf周报」,我们总结推荐了本周的热点资讯、安全事件、一周好文和省心工具,保证大家不错过本周的每一个重点!渗透测试入门必备的JS基础
JavaScript 在几乎所有现代 Web 应用程序中都得到了广泛使用。了解如何格式化.js
文件、设置断点以及动态更改脚本的逻辑,在使用 Web 应用程序时非常有用。
首先,让我们导航到一个网站并查看应用程序的资源。在我们的示", - "category": "Web安全", - "pubDate": "Fri, 29 Nov 2024 13:22:42 +0800" - }, - { - "title": "为抵御风险投资低迷,以色列加大网络安全市场投资", - "link": "https://www.freebuf.com/news/416501.html", - "description": "持续的投资表明,以色列仍然是美国硅谷之外最强大的科技创新中心之一。", - "body": "
尽管全球针对网络安全公司的投资在 2022 年底开始放缓,但以色列网络安全产业的强劲表现超出了当地预期和全球经济挑战,即便该国还面临加沙地区局势不断升温的背景。
l{bZFH6uuhfgy@Nl|O|y+nj-+
zh!ZFykjf8}VPvRe1c{{ZAwngSbF)d(
l{bZFH6uuhfgy@Nl|O|y+nj-+
zh!ZFykjf8}VPvRe1c{{ZAwngSbFO%-6Qn(QE$$>=wEm0$-qGtgiV{(ORA
zvLCzS
9YZ5NO_=rIMc}iA
z+`sX_X9@DZM*yEmG~eAq{0wsMyWb*yy5RdqBJ}=JxcB{ZIw6cCih4k4PN
LL6ptN2cy>?mc?X)^7i>vBum}vFlVB9+?p4%>u>%!CFbECKR
zkKQ~rc6~rO(&rv*_qf{B8z15eo3Krkq?dGqpo?Z`lhM#XrZKv|S=?A{FWN2(v9hyv
z&nDSkE4-^;xoV|O$f&fJ$=UXba;4+AGSs28ol%aRR);&(JG~JxmMu}^OvxY`#PMz=
zOU5Z#^sL#dOgddT(ehlQS=^iyBW!dy9hJhS@~ToHwR~48d!I@cUNVgaNiX74tFS?o
zCI`qMFs7tu2HObFb5^q$ztOT$=|8Nr_POsJH9M=S>Kc@;5x47#db^MLrL^^7bA0#?
zX>y7fLp14)Oc&7*UsnDSvpCw*;~D8xkF=;gH