From c5f7dbcd468579d9b024b06efdd80b8e4eb2ae92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chic=20Ye=28=E5=8F=B6=E6=99=BA=E5=BC=BA=29?= Date: Tue, 6 Apr 2021 20:05:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=8A=E4=BB=A3=E7=A0=81=E5=8A=A0?= =?UTF-8?q?=E5=AF=86&=E6=95=B0=E6=8D=AE=E5=8A=A0=E5=AF=86=E3=80=8B=20?= =?UTF-8?q?=E3=80=8A=E5=A4=87=E4=BB=BD=E8=BF=98=E5=8E=9F=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E3=80=8B=20(=E9=83=A8=E5=88=86=E4=BF=AE=E6=94=B9)=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=A4=A7=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Mass_production/zh/CodeEncryption.md | 12 -- docs/Mass_production/zh/DataEncryption.md | 108 ++++++++++++++++++ docs/Mass_production/zh/QuecPythonBack.md | 2 - docs/Mass_production/zh/README.md | 10 -- .../Mass_production/zh/code/DataEncryption.py | 33 ++++++ .../zh/media/DataEncryption_210406_01.png | Bin 0 -> 51858 bytes docs/Mass_production/zh/sidebar.yaml | 4 +- .../zh/QuecPythonTest/QuecPythonLED.md | 10 +- 8 files changed, 145 insertions(+), 34 deletions(-) create mode 100644 docs/Mass_production/zh/DataEncryption.md create mode 100644 docs/Mass_production/zh/code/DataEncryption.py create mode 100644 docs/Mass_production/zh/media/DataEncryption_210406_01.png diff --git a/docs/Mass_production/zh/CodeEncryption.md b/docs/Mass_production/zh/CodeEncryption.md index 4a2bc96..ea574b8 100644 --- a/docs/Mass_production/zh/CodeEncryption.md +++ b/docs/Mass_production/zh/CodeEncryption.md @@ -1,15 +1,3 @@ -# QuecPython 加密保护介绍 - -本文档主要介绍QuecPython 代码加密保护,数据加密保护方案。 - -本文档适用于移远通信如下模块: - -- EC100Y-CN - -- EC600S-CN - - - ## 加密方式介绍 在 python 中,可以将 py 文件编译为 pyc 文件。编译后的 pyc 文件是二进制格式,一是可以加快加载速度, 更重要的是可以保护原始代码。在 micropython 中同样提供了这个功能,只是它将 pyc 改名为 mpy,编译出的文件扩展名是.mpy。这一加密过程正是通过 mpy-cross 工具来完成。 diff --git a/docs/Mass_production/zh/DataEncryption.md b/docs/Mass_production/zh/DataEncryption.md new file mode 100644 index 0000000..8944ed2 --- /dev/null +++ b/docs/Mass_production/zh/DataEncryption.md @@ -0,0 +1,108 @@ +## 加密方式介绍 + +MD5、SHA1和SHA256是非常常用的两种单向散列函数,现在比较常用的是SHA256算法。 + +三大特性: +1. 将任意长度的数据转换成固定长度的数据 +(无论输入的是一个比特还是一亿个比特,输出的结果长度固定,具体长度根据不同算法决定,比如MD5输出的长度就是128位) +2. 很强的抗碰撞性 +(输出的结果唯一,也就是很难找到H(x1)=H(x2)) +3. 不可逆 +(目前没有任何方法可以通过散列值找到对应的输入值,也就是不能通过H(X)的值找到对应的X) + +QuecPython模组支持的功能: 实现二进制数据散列算法,目前支持MD5 , SHA1, SHA256; + +以一个60M的文件为测试样本,经过1000次的测试平均值,三种算法的表现为: + +- MD5 算法运行1000次的平均时间为:226ms + +- SHA1 算法运行1000次的平均时间为:308ms + +- SHA256 算法运行1000次的平均时间为:473ms + + 安全性方面,SHA256(又称SHA2)的安全性最高,建议使用SHA256。 + + + +## 常见应用场景: + +1、数据库中保存用户密码 +比如前段时间频频爆出一些公司的数据库被爆,用户的账户密码以明文存在,大量资料流出这样的做法是极其不负责和危险的。 +最好的方法就是将用户的密码通过单向散列函数输出到数据库,每次登录时对比散列值即可。由于单向散列函数的不可逆性,就算数据库被盗取,也没有办法得到用户的信息。 +(某些自称破解单向散列函数的网站使用的方法其实是低级的穷举法,保存大量常用明文的散列值,这样做是很愚蠢的。有很多方法可以应对,比如一种叫做“加盐”的常用方法,将用户的信息后面统一加上诸如$%*^&这样的字符,然后计算散列值存入数据库中,或者可以计算散列值的散列值,这样可以保证绝对的安全性。) + +2、防止文件篡改 +目前大部分提供下载服务的网站都有提供文件的SHA256值,这是因为单向散列函数具备防篡改的效果,若是下载的文件的SHA256和网站提供的值不符,则可能此文件已经遭到了修改,可能含有病毒或者是盗版等等。。。接下来的代码中我们也会来实现计算文件的SHA256值。 + +3、 数字签名(阿里云、腾讯云等) +在进行数字签名时也会使用单向散列函数。 +数字签名是现实社会中的签名和盖章这样行为在数字世界中的实现。数字签名的处理过程非常耗时,因此一般不会对整个消息内容直接使用数字签名,而是先通过单向散列函数计算出消息的散列值,然后再对这个散列值使用私钥加密,得到的就是数字签名。 + +4、伪随机数生成器 +使用单向散列函数可以构造伪随机数生成器。 +密码技术中所使用的随机数需要具备“事实上不可能根据过去的随机数列预测未来的随机数列”这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。 + +5、秒传 +很多诸如某云盘,某网盘这样的公司利用单向散列函数的特性实现秒传的效果。 +单向散列函数就像文件的指纹一样,当用户上传文件时,首先计算一下此文件的单向散列值,将此值在数据库中进行查找,若存在相同值,证明此用户上传的文件已经存在相同的,所以无需上传,共享即可。如此可大幅降低服务器负载,大幅缩减存储空间,实现去重的效果。 + + + +## 二进制数据加密 + +示例代码: + +```python +import uhashlib +import ubinascii +# 目前支持 md5,sha1, sha256 + +data = b"QuecPython" # 待加密数据 + +hash_obj = uhashlib.md5() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("md5加密后的数据:", hex_msg) +# b'37b8419ee7cdb3c64d7e66019216117c' + +hash_obj = uhashlib.sha1() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha1加密后的数据:", hex_msg) +# b'614a4247ef68e9f9793e11353cc86acb932badab' + +hash_obj = uhashlib.sha256() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha256加密后的数据:", hex_msg) +# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd' +``` + +执行结果如下图: + +![DataEncryption_210406_01](media\DataEncryption_210406_01.png) + +## 更多内容 + +想要了解其他功能吗?请浏览官方网站: + +https://python.quectel.com/wiki/#/zh-cn/api/?id=pin + +官方网站: + +https://python.quectel.com/ + +相关工具、例程、驱动、文档下载: + +https://python.quectel.com/download + + + +了解更多,请关注QuecPython公众号 + + + + \ No newline at end of file diff --git a/docs/Mass_production/zh/QuecPythonBack.md b/docs/Mass_production/zh/QuecPythonBack.md index 6b0effd..1a4df1e 100644 --- a/docs/Mass_production/zh/QuecPythonBack.md +++ b/docs/Mass_production/zh/QuecPythonBack.md @@ -1,5 +1,3 @@ -# QuecPython备份还原机制 - ## 概述 QuecPython具备文件备份还原功能,当用户的代码误删除或意外被修改,可以从备份区还原丢失或错误的文件。 diff --git a/docs/Mass_production/zh/README.md b/docs/Mass_production/zh/README.md index 0d537a7..a283ca2 100755 --- a/docs/Mass_production/zh/README.md +++ b/docs/Mass_production/zh/README.md @@ -1,13 +1,3 @@ -# QuecPython 产品开发及量产方案 - -本文档主要介绍QuecPython 产品开发及量产方案。 - -本文档适用于移远通信如下模块: - -- EC100Y-CN - -- EC600S-CN - ## 代码保护 diff --git a/docs/Mass_production/zh/code/DataEncryption.py b/docs/Mass_production/zh/code/DataEncryption.py new file mode 100644 index 0000000..edc9dde --- /dev/null +++ b/docs/Mass_production/zh/code/DataEncryption.py @@ -0,0 +1,33 @@ +import uhashlib +import ubinascii +# 目前支持 md5,sha1, sha256 + +data = b"QuecPython" # 待加密数据 + +hash_obj = uhashlib.md5() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("md5加密后的数据:", hex_msg) +# b'37b8419ee7cdb3c64d7e66019216117c' + +hash_obj = uhashlib.sha1() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha1加密后的数据:", hex_msg) +# b'614a4247ef68e9f9793e11353cc86acb932badab' + +hash_obj = uhashlib.sha256() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha256加密后的数据:", hex_msg) +# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd' + + +# print("原始数据:", b'\x11\x22\x33123') +# res = ubinascii.b2a_base64('\x11\x22\x33123') +# print("编码base64数据:", res) +# res = ubinascii.a2b_base64(res) +# print("还原base64数据:", res) diff --git a/docs/Mass_production/zh/media/DataEncryption_210406_01.png b/docs/Mass_production/zh/media/DataEncryption_210406_01.png new file mode 100644 index 0000000000000000000000000000000000000000..7b48e23d2fc8242a874d7bc06f412d229da750e8 GIT binary patch literal 51858 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ФB=2) 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ⅇ3MRXZrYE%uAU!!o{% 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

(4#J*6jrI5L)^bB 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 literal 0 HcmV?d00001 diff --git a/docs/Mass_production/zh/sidebar.yaml b/docs/Mass_production/zh/sidebar.yaml index b9da97c..1731dbf 100755 --- a/docs/Mass_production/zh/sidebar.yaml +++ b/docs/Mass_production/zh/sidebar.yaml @@ -2,7 +2,9 @@ items: - label: 量产工具 file: README.md - - label: 加密保护 + - label: 代码加密保护 file: CodeEncryption.md + - label: 数据加密保护 + file: DataEncryption.md - label: 备份还原机制 file: QuecPythonBack.md \ No newline at end of file diff --git a/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md b/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md index b9b45f8..e9bee17 100644 --- a/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md +++ b/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md @@ -1,11 +1,3 @@ -# 平台说明 - -​ 本实验例程基于 EC600S_QuecPython_EVB_V1.1 开发板完成。 - - - -# QuecPython流水灯 - 1、 概述 流水灯:顾名思义,就是像水一样会流动的LED灯。 @@ -61,7 +53,7 @@ for x in [1, 2, 3]: print(x, end=" ,") ``` -输入结果:1,2,3 +输出结果:1,2,3 像这样把IOlist列表迭代,我们可以很方便的控制每一个LED灯的输出状态。 -- Gitee From 8d87a71dadcb35fd3a5ea7fe43c033f54ad8279a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chic=20Ye=28=E5=8F=B6=E6=99=BA=E5=BC=BA=29?= Date: Tue, 6 Apr 2021 20:05:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=8A=E4=BB=A3=E7=A0=81=E5=8A=A0?= =?UTF-8?q?=E5=AF=86&=E6=95=B0=E6=8D=AE=E5=8A=A0=E5=AF=86=E3=80=8B=20?= =?UTF-8?q?=E3=80=8A=E5=A4=87=E4=BB=BD=E8=BF=98=E5=8E=9F=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E3=80=8B=20(=E9=83=A8=E5=88=86=E4=BF=AE=E6=94=B9)=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=A4=A7=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Mass_production/zh/CodeEncryption.md | 12 -- docs/Mass_production/zh/DataEncryption.md | 108 ++++++++++++++++++ docs/Mass_production/zh/QuecPythonBack.md | 2 - docs/Mass_production/zh/README.md | 10 -- .../Mass_production/zh/code/DataEncryption.py | 33 ++++++ .../zh/media/DataEncryption_210406_01.png | Bin 0 -> 51858 bytes docs/Mass_production/zh/sidebar.yaml | 4 +- .../zh/QuecPythonTest/QuecPythonLED.md | 10 +- 8 files changed, 145 insertions(+), 34 deletions(-) create mode 100644 docs/Mass_production/zh/DataEncryption.md create mode 100644 docs/Mass_production/zh/code/DataEncryption.py create mode 100644 docs/Mass_production/zh/media/DataEncryption_210406_01.png diff --git a/docs/Mass_production/zh/CodeEncryption.md b/docs/Mass_production/zh/CodeEncryption.md index 4a2bc96..ea574b8 100644 --- a/docs/Mass_production/zh/CodeEncryption.md +++ b/docs/Mass_production/zh/CodeEncryption.md @@ -1,15 +1,3 @@ -# QuecPython 加密保护介绍 - -本文档主要介绍QuecPython 代码加密保护,数据加密保护方案。 - -本文档适用于移远通信如下模块: - -- EC100Y-CN - -- EC600S-CN - - - ## 加密方式介绍 在 python 中,可以将 py 文件编译为 pyc 文件。编译后的 pyc 文件是二进制格式,一是可以加快加载速度, 更重要的是可以保护原始代码。在 micropython 中同样提供了这个功能,只是它将 pyc 改名为 mpy,编译出的文件扩展名是.mpy。这一加密过程正是通过 mpy-cross 工具来完成。 diff --git a/docs/Mass_production/zh/DataEncryption.md b/docs/Mass_production/zh/DataEncryption.md new file mode 100644 index 0000000..8944ed2 --- /dev/null +++ b/docs/Mass_production/zh/DataEncryption.md @@ -0,0 +1,108 @@ +## 加密方式介绍 + +MD5、SHA1和SHA256是非常常用的两种单向散列函数,现在比较常用的是SHA256算法。 + +三大特性: +1. 将任意长度的数据转换成固定长度的数据 +(无论输入的是一个比特还是一亿个比特,输出的结果长度固定,具体长度根据不同算法决定,比如MD5输出的长度就是128位) +2. 很强的抗碰撞性 +(输出的结果唯一,也就是很难找到H(x1)=H(x2)) +3. 不可逆 +(目前没有任何方法可以通过散列值找到对应的输入值,也就是不能通过H(X)的值找到对应的X) + +QuecPython模组支持的功能: 实现二进制数据散列算法,目前支持MD5 , SHA1, SHA256; + +以一个60M的文件为测试样本,经过1000次的测试平均值,三种算法的表现为: + +- MD5 算法运行1000次的平均时间为:226ms + +- SHA1 算法运行1000次的平均时间为:308ms + +- SHA256 算法运行1000次的平均时间为:473ms + + 安全性方面,SHA256(又称SHA2)的安全性最高,建议使用SHA256。 + + + +## 常见应用场景: + +1、数据库中保存用户密码 +比如前段时间频频爆出一些公司的数据库被爆,用户的账户密码以明文存在,大量资料流出这样的做法是极其不负责和危险的。 +最好的方法就是将用户的密码通过单向散列函数输出到数据库,每次登录时对比散列值即可。由于单向散列函数的不可逆性,就算数据库被盗取,也没有办法得到用户的信息。 +(某些自称破解单向散列函数的网站使用的方法其实是低级的穷举法,保存大量常用明文的散列值,这样做是很愚蠢的。有很多方法可以应对,比如一种叫做“加盐”的常用方法,将用户的信息后面统一加上诸如$%*^&这样的字符,然后计算散列值存入数据库中,或者可以计算散列值的散列值,这样可以保证绝对的安全性。) + +2、防止文件篡改 +目前大部分提供下载服务的网站都有提供文件的SHA256值,这是因为单向散列函数具备防篡改的效果,若是下载的文件的SHA256和网站提供的值不符,则可能此文件已经遭到了修改,可能含有病毒或者是盗版等等。。。接下来的代码中我们也会来实现计算文件的SHA256值。 + +3、 数字签名(阿里云、腾讯云等) +在进行数字签名时也会使用单向散列函数。 +数字签名是现实社会中的签名和盖章这样行为在数字世界中的实现。数字签名的处理过程非常耗时,因此一般不会对整个消息内容直接使用数字签名,而是先通过单向散列函数计算出消息的散列值,然后再对这个散列值使用私钥加密,得到的就是数字签名。 + +4、伪随机数生成器 +使用单向散列函数可以构造伪随机数生成器。 +密码技术中所使用的随机数需要具备“事实上不可能根据过去的随机数列预测未来的随机数列”这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。 + +5、秒传 +很多诸如某云盘,某网盘这样的公司利用单向散列函数的特性实现秒传的效果。 +单向散列函数就像文件的指纹一样,当用户上传文件时,首先计算一下此文件的单向散列值,将此值在数据库中进行查找,若存在相同值,证明此用户上传的文件已经存在相同的,所以无需上传,共享即可。如此可大幅降低服务器负载,大幅缩减存储空间,实现去重的效果。 + + + +## 二进制数据加密 + +示例代码: + +```python +import uhashlib +import ubinascii +# 目前支持 md5,sha1, sha256 + +data = b"QuecPython" # 待加密数据 + +hash_obj = uhashlib.md5() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("md5加密后的数据:", hex_msg) +# b'37b8419ee7cdb3c64d7e66019216117c' + +hash_obj = uhashlib.sha1() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha1加密后的数据:", hex_msg) +# b'614a4247ef68e9f9793e11353cc86acb932badab' + +hash_obj = uhashlib.sha256() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha256加密后的数据:", hex_msg) +# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd' +``` + +执行结果如下图: + +![DataEncryption_210406_01](media\DataEncryption_210406_01.png) + +## 更多内容 + +想要了解其他功能吗?请浏览官方网站: + +https://python.quectel.com/wiki/#/zh-cn/api/?id=pin + +官方网站: + +https://python.quectel.com/ + +相关工具、例程、驱动、文档下载: + +https://python.quectel.com/download + + + +了解更多,请关注QuecPython公众号 + + + + \ No newline at end of file diff --git a/docs/Mass_production/zh/QuecPythonBack.md b/docs/Mass_production/zh/QuecPythonBack.md index 6b0effd..1a4df1e 100644 --- a/docs/Mass_production/zh/QuecPythonBack.md +++ b/docs/Mass_production/zh/QuecPythonBack.md @@ -1,5 +1,3 @@ -# QuecPython备份还原机制 - ## 概述 QuecPython具备文件备份还原功能,当用户的代码误删除或意外被修改,可以从备份区还原丢失或错误的文件。 diff --git a/docs/Mass_production/zh/README.md b/docs/Mass_production/zh/README.md index 0d537a7..a283ca2 100755 --- a/docs/Mass_production/zh/README.md +++ b/docs/Mass_production/zh/README.md @@ -1,13 +1,3 @@ -# QuecPython 产品开发及量产方案 - -本文档主要介绍QuecPython 产品开发及量产方案。 - -本文档适用于移远通信如下模块: - -- EC100Y-CN - -- EC600S-CN - ## 代码保护 diff --git a/docs/Mass_production/zh/code/DataEncryption.py b/docs/Mass_production/zh/code/DataEncryption.py new file mode 100644 index 0000000..edc9dde --- /dev/null +++ b/docs/Mass_production/zh/code/DataEncryption.py @@ -0,0 +1,33 @@ +import uhashlib +import ubinascii +# 目前支持 md5,sha1, sha256 + +data = b"QuecPython" # 待加密数据 + +hash_obj = uhashlib.md5() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("md5加密后的数据:", hex_msg) +# b'37b8419ee7cdb3c64d7e66019216117c' + +hash_obj = uhashlib.sha1() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha1加密后的数据:", hex_msg) +# b'614a4247ef68e9f9793e11353cc86acb932badab' + +hash_obj = uhashlib.sha256() +hash_obj.update(data) +res = hash_obj.digest() +hex_msg = ubinascii.hexlify(res) +print("sha256加密后的数据:", hex_msg) +# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd' + + +# print("原始数据:", b'\x11\x22\x33123') +# res = ubinascii.b2a_base64('\x11\x22\x33123') +# print("编码base64数据:", res) +# res = ubinascii.a2b_base64(res) +# print("还原base64数据:", res) diff --git a/docs/Mass_production/zh/media/DataEncryption_210406_01.png b/docs/Mass_production/zh/media/DataEncryption_210406_01.png new file mode 100644 index 0000000000000000000000000000000000000000..7b48e23d2fc8242a874d7bc06f412d229da750e8 GIT binary patch literal 51858 zcmb5WbyStx8!fy6X%M8OTe_sXrKG#1rMtUDX^;{S5EPK^ZX`uYx`T*Yws`vBE8L~cgqLitQ_h6iwD2^2C_FhCue!Q=*&*PT2#F#TQyjeMd*Lzb zJ_!>Kii^YS`{Uea#tvR=Xd##^5jdzcFyySPW$8sq|NeF!BeQ-z=FrfP5q{6MaoyYx zIN1Z^s+q>7gTDvE6mNV#WD&Apze$GHB}$VB0}-zetGCTN68rZ6>jP$0Ge%W2S2QK; zX=qG?uz{XZ39z!z3jtTtQ0YVFX7vn7&G5vvfsg`2T;} z4J#uYw~qJaTgiW?=k1&xsev!j8`m6=!TR^8PUz&BpK6^^;ThuO6%>9PHTq_Sm-n!`?Fz0 z0Rh-UV?^0Q z{XyXvAI<|O^<=%xHmsF@wa|q1k3|0r^@))CcX#xo2sjYt{O>xLQ`dw0>_i>{Uz+yF zG%7fV)&4x6BvZXP?j?)=^l9f~+F2}VTAH^d>R>!o)D0&e9qVuLtZfR%v2}83n?V00 zn311>n&UUbj!&EjnJrwUagZUp%+(_jti|=lxMv8=)w+-o^85_=K|JqRs+?EG4dnQf z);X`>8R!^g|GAbv^C7NOG&4-(h$Ygo5-Xdx@40jgsw|?H2Kh&KbEdZ9sPI&-NqDW| z5_7}E+E5ViJdq3NFYnMqMZ)7(|nmwV3QIzIyz_=0^vk~->k3H{)m7O_%cuO)j(LJHS&PfP| zhD%w6*3dU$ll^BbW|nv>Tf+W;VT%Gy9-M?-C5Lg7YUhMFddsyIv(FWU27TlYY*rQ1 zw0KGGVXomIPe~ZdlqrXrw2NM;myJ!8rX6jkj0B66#ZC_MS<(;ce@-sxowC!;m3K;w zO6_C+*kLzYtW%||tNUSWOtp}ETniaG6rm)EeWH!>UDLc!XQ^NE(SzW)3r|Lui%_l^LIEYO_q^NTtcf#6M8} zlV>tKM_iT)Y#4?vg;?Bgad$apG{E^^e4P-t8KKZ(s>vS?`$cX$K#y{0Wes`AE8NK6@6XF_jW@%xWGrDQ=jnpnp{ta3Ke*eNo zS6rli3trgA@V^VR{$a(+DDwb?Mk0^tr`}TU#YN=r^^YN$@saUV1X~#vTSs2`rgY3G zgKqeI2{2vvLwK+w*>TL0G#pq_isej9tSui+V4Ize~M4IXP&crT(wD{la6>k4WQqOUcB9CifK!yimemog0Xq z8}w(RsHHyyj$+$Upzf5u{5Bl#S;@opY6aMK3nBp=`%H)6342dGo;Q#UPuU19JAerG}-xhmK zZsaXp5$dd>hH*mzwHM|rC=-p_uYAoY=`MeF-L5(Xpz~YeBM@ei@(+Ej%k(JkpYZib`%gOK@+Ys*z+<}D}x7CQlJ zhoQh0$3jT1yby!4bfbcYtx}|TGCZRvj&)+Z+JRuSIcmEl^il%=EHh*jQ#(s8D= z#ka-n7Ux;vu0R4E7?Q!x?APJ9tv*ZAt;9-)rZ(mIDR(VDLk%&H-tHI#2Sh)$)3ce& zKgn2sYB%Xdwy>xe@|3XfGU=Z+i-YW{lW+5(Y6Q*4AHaNufuQkkq3QCPU<;kyxrh+B z_Wia|F`UNxW{C<96D5XdV9Zy2^Yho+=<2WoG2HtGKGB@u=TYa;Rb08MC7yq};sS$r&ZML&5R08{fU1)@{{1 zxva$06${*&ZeBY)$uOg~sX4lHa($Bd>##5dm4fnitK|dM{=bn7Gua?IHj-T8^b}T? zEKHYr^W!PZXM{kpGU+g>HC~;m-JG(%AAOUMSE(>(AJaxRH^g(tz4&GjA?U9B=*})* zt+We=U4P4#af#-`K$uZ#yoJl1XG??T9-Y^zn-HX1tK1ZC^C!enh0Zz^@XtoHEORF0 z>az$*&^j-RFxjX#MQuiM#q|#E4Do2{5C-kigrZAf4~D#3c*xEV{XRO9UEd&cBn0yl zy7v7Hdwo%3mnF5K+5XHinToc7d2o+e>MVeaZ_MBRZ-gV`$bPD|uGYmrJD_bl7@|Dy z8!EB%vkz2!YiV<#Q{XlL;b-?PMPtKHh~HCU>{>UYCPLeicYcRTK6lfDTIejcS>{`7a~*!Tk`XnQ z^%q;fzWyYfK*(H;km-^rm`_tYPfdcR%bWlsZK04GV%fZ<0?)uupLoUHX%szdX3aUG zuAbf5g4xDb`95rfW;1)9S;iSz4y7h|&y>&E8Rb>-b2A5YlQf3Q`|*u+@-&CV+1X+Z zMx!q?5}X}m&*r03Yv`ehU^l3!XQmR^_4b#Wb8 zmV9HuZfIETNZJhS?s~AQ9-*n@c5t(v9N50|uZ7pK8xrQ=IA>d57uCyox41l;qJaTN z?1#+7&&Q6Rz<3=O!w&PXp0=Etml}->!{Zxy@ZC|C) zpo@NT{E^Gw`Y97A!(&|}g&0!$g==|?qG5hH+3q*WZDd1C#Lk$sYW4Qprb@0=f}E$v zpWK zZ2mORlN!4>39h?8llgF2S%Z=1*sYo0ku8Xp(PeHUy`d?ZRVZdrN=jJLmUi~k46iWY zZ;xnrB7-G!a^HGpr$AieeVAM39)+h{LMFxlQCE*JJLIobnDUYECRCQn(t{y+4)LI- z+O~S+)U`}xRECMy`zlkO6=RXb;ztdNJ{qX|Le)&D2CwEI60`2nk_=M5BAK@sD3xgm zEh($B2pZNz#L`*YTdxbHbCz4+03w_<@p2f_pF7sUMLBBy3+yS8LDQZ5{kwc~IP2|j z245Gch<}EV^E#3Z8~*g(p6z6MhFLj8+b(C*e843^2f~!#GVR>^gj>fpOq?0j0lo&e zkH*E^%P?X{R?)(xnRQ()XR;!|Unta#^|!ad*6qqO8v(#q{$xc>=mFzm*Zo1vOx1`K-!&d*BD%BG1 z?%YjwbKLI3pM{D$jEpeIgntr7OI=(Yuk978BeEkX!#;bDOl5%Y( z?OI!clarH1nlE;UA&MdKxcs77^!#ngs9OnxLi6I(SJ$&5zmm$cv^s^ISZ&w?O%kC+DX(#_USZF%FI~}GH6eKRvED@K9xGV!ePrz}>@6s6D zlIKogJ|;HyxVc-4;{h6j`(to|!Yf|y5y*I$3k0HJONOTKn|wb8jXJiKw8HNOaj$A* zY;5mL2e&9+pA>84P>y_Wz5!cF_?r4DnehAy`_1|8yUtGWyu3UaZ4M9abaYy!&)uzl zw?_*eODlKRr;xy-Bgc9F+kF{D#h#;;t{i1LSl!sta=%-5!H26gHo|B~AcaKuatMZS z`}x$Hr6DdjYisLr_kG>1b8kpHnA#jSGd;d&l^Mb;9LzbiMeonmz1FpO{TkK(;rea! z{ly%Jw6r{Pm*#uTn(FFyTW*OQWpXB_pH^Ns22`PO%UI>2WA=5qrKL|bi*Qv`RFKfo z(LZ1hpgw0Y`tbo58m96z*y;?p8$;>uZV#H2&ZL*@>r4+9TRhJvw2r$lL?Do!D1wl- zyFaY;E8#@sDX*vA6*V*vG2C|fJpdLlAU9}nz?;m?=w2hQvLU3tv4vf#>OMoHGMyS zN-nkfy(rRqJ7ddTY|w-k@Nk+nIx-UIbI^c@*41uOk^TKUigYaLj|P`bOhUpB9U+Jk zC7QW!+WaG;q9kKUg^nim9E`z+Uu}v!zK4NBcv4+@UPEK6drCiff4Rh~n6?usG5&7J7d+cjMCUqrKB(q-avQoeewqlm>LSbcRS66&yW;8r1p3H^r?zwmK z=`VqT(ozJ7x`xKe??N^0YRhLJ#pi3G7fmV{ad+oi{HBf6qKW|Gcz5LlX$Sf9qEPE? z1yf{=&6G(;FuXEDQs3}!Z?)BUx%C7C)0}7x)FQmP4-A6O~5F-n0e&KEJAXbG*nnY;>uVZd~Q%&|^_I<9Ih+rhRks z`pSIQ!}I1V51VD5qwH>#N3W7_itPP@0_1M+J0fZYIkY6E3V4*h*)7wqfQ5&L=XKdY zvl#k>8)sBmS&0QwsymrkPmtTn*2<~_?Ah^Qz$1~!-4PsEP$7`X8wqGMI?1>sV$HR+ zlZTo_s^5!>x5kt;N1?6bCWQ+1IU2 zSC|$Q6}jB*adC02?9Eg~ynheV#pWA_%*%4*)JBxS@%9%v1H(?j9U3;Mn{-AgPW$cx zpVHGu=jWpu8~MS~=YVUaNkj&%YT;zfp>D3i_u5%FVjYlS#d>v5-~P&Q`kpdm(FJbB z@n~5r9~=JQ`!>&#FV(ic?Ls52hK2@cZ<*e|fB#;t8WwgDXxNU@DAGI@qh9tL`Vbj; z{7c}_=<(rRu?%joa=I-*1a!fSV43#OC$~hrwoEZRN(Y`QLd8 z-W_#8L#)SI(HfDIFKasY=`H!4@CO__*fP1c!(^IF%`^&YIH~t-{tj)_8*9o1+ zrfsVeKVpq~Cms9{;>Ef3P~C0s@yb~IpY+DwGkCT5Zikn7iFW_^u`+8@hU@2hwersM z{(S2AX18puGYl1k%i7dhaDQbbd;gB}&To1qK#!*LI9%+SK`S7*1<#x9{0fgl!~UIT zbkL-id;Qw!V4m-xer#lfoKVKF*>iOJ*8O5n2ed0Vux`jQ3xtG(*;BhtmkS4e)LOOU7l4=8JCy)$g_&ha>0jEIN`l&9GpD~jwiiU3K&V%Qu3_B4MR6aaAk zXF@8=uqgCgoSZTj67=W&a%yUcbDUK(QPD&^un<5Mhjw>MLY6t=fBg7iuk}#~Fw>s{ z9=td?IRR6Q@&5gL&*dP*^0&jJZIeQvc7OKTAox8sMMX=CC>=xGF%ge0`BrI#--SaT%?UCxDGje)EC4`Qn-0Re$6}Mx(KXG9ri_ZliEiH}L z^T;T_&b(^oXy$E}@nABueea8KV^D*hHt0W%{1LpdVUd50_>{Pv$e}q1Gzv0s4STKz zuqyy)fvjUeLxB5j&9(6>GjcRn+H~j>7q9D9+}z2#rzD*TFJ7~`?WliDN?IX%yh4m2 z<_iX`$prK_d``SjRD~eh}sHpt5JXv0`=H{KTbhi9p|9! z(I3)2ki@9+=FO7%Txnt9O2Ar@+zZejADhTXNcMlD$j~GjA1!zA`rU965)r)$z@R4r zK&FGrC@3#Ku+O??b-uv`B&dX~EtB{8PFQ()Im_b_k5w4ehm+P+ZQmbL1`^1}*7 zK;WpQD=Hch5s`|%K3ceOx#cJ&L=-dxZrf>cLdo!V?;=0jdOQd0KH!&3W~;3{K>)uB zk!jG6$;+e85c0v>{FUkQX$s`^l%WqgGBWbj?b2fm?PpK%G0`-09ca&Uf2?j8H{XA- z;@~d1#_<@=q#b>m>u0WCT!i~X#AHbV!FXjwIXwLR&!%dCBpebxx}2=b`hvn~pVpU} zivRNy7plj+6QcLU-g~>b+7*BXB+boV1n8UU;4K9_3PBTMkhxAqm5d%>k7WRPpzx~$ zRC568HnRdq0U4%Qq;Ym-TcLe)+4e|s*m6nw(}IIc5a0_U=syg7_PMe`EUp>(`3d{` z`$3G51Ng(QA(ee2@6B%U6JPLR+7uG_;RA~8;{5g6`?k>Mg6a%O!~W|O6rT~doLhJS zvd!~xyDliv7eNA1G@h>n?TdalXJP=a=cqGmTjz%6*&=ZIT-avtyP@n(mPnYI=8g-3 zv^d|LI@N06aad%UZRVh)gjLH|{NZ=GK&#WjZ*#sg5!Y{~U1N>g`uN~8YJPKh7+co% zKv<+z))NemI=`XEgx7pBz&KrPh2464AP^cJE~nXsy7|j!A>eVpf{(F_4GA4pT3uc# zG(3zC0hv8rMb8Chl4kR=-NL4$@$rF(Cx0ny(Qi$1Ffn79SBn%axrRACjKW^{fL}+JON%PHyg#p*IF1 z81sGG0Mj?VY5zri*N_=LWC0eHDuzrXW_DJ$yQhbepP%0d?!=Y4{N$}jUV%;dEmPP5Kv;`34sKy>-!3FbPIQc~hH ziN`QL<&TP3;(bXp*(rJV4Lbwy9|0f$-9^;Zm6J?a&dUbfUT@L$QbQ4t0AHDuXc8%2 zzI>*mqXP*9Vc(RQ=SApB361%0@?x5rn#zm8P-Kk|lA~r0R7N9!pArxgUZj7Rw?FP+ zL+e?%K@>b+-Q5b9FshrXk~YKfzKrfVDw19q+RW;#eZ0gK8Md#=F;i2idy!Gtv7x(X6Je!KNr1snW0tO zW%Jh$5|4Rk>&U{OShA;4f^coR^L|$20NtoE*61#+WSbjl3bzT%-;_a2y zbg9A(Uzl@xs2i7QF&131t$AxpHh;OERdJa@HtJZhXpufYfsivY4sP>u zx^5}2Z*H#j5IF$iA+9mP1* zRRBy;61m68@;yNYeW8guBJ#tB&eWHtS2V?7EY6jV-Pm*)ZkVcQZ6yV>{>~VTXK1k| zV+^U#4xVIBZ|~`InQ(L>gk*Ep!rM`3V3TJDnfW+~Q0$3#0nnx2?D?$g9Y)Gox4vA; zpsceG&~-yYpD^iGBLRlvYNx17uyq*3Ro%QZDpZqsMkV!RAGvrJ!e6SL9JXNJYge}r z4%D`MFCrfMZV3#bC!nH*ha-TBCU@h-W#CwvE>F`{qE-!^%tZX^o&^MKAam;ctoQGv zUTuQ0uM&SmjnjU= zI+QAJ-ArMa8czOU(g8{ZoAqzHQ9NQq4AO3Z>l(j%XX1egj9%^AGKhW8KS^3wrh|bn zaBRk%PxAdf4*p4HGlm6u5J)8*199{ff!1$f8v;78n$Y3$d8=&tVH#Wds1T zA-qyM_kc+_%6hy*1ZUYBTl#Q&*hUsBbdlPNiUc+a4A|@WV0wgNVeLvY*^~*Dt+VZM zMKLo^Pu}0wHEM5MP{@%fsCnTvq{eVFLlIc*N8sKFMu!v0`=ZCVJluIP=~O;BK0a0) z*Gc{XBB%GV1ZVI;Cfe9+izk~o!b}J6-N0qLi906;_k%Yi`uXm)=$N&g^X@JE#O?6~ z?Jf-O8_DU5do9mXR;ApAnH~Jawzp*$xPc}x6~%G zJl95yggAkWirO`jBLP~@)+`OnC5pbaaxhq$Hq@ zQlAh=HZ6n?yumo4)j;c7{w6!Fe4_Ep+JZsyS${R{KUjYtoX$Wn@GN``z%KcNG^GcQ<>T9{uDPUjCMD zAFR*P3mRbs*nHp9As$6B9T^!U8pRAyiXsjQT9rT{S@OSSegO1@fFGF>peDdr&dX(2 zGh;hlX&$LYCfl?S^Jg%Hih=?rkw#%>Y?28IyC3dvDH8h|xgzu%oL?|7Fw6trg-##f zw)PfV=73J`u??2=ksvxU(gl@LPgnN{uu(Z6nE|H+MyXu17ZjmS-e>pAu%p3!Rej&r zCj$bDmONzt3dN**1JQJO+yKxE;3V-`S+VFu+!0SBRtA91+7*rtiU@Rep3r(j;#yXy zTOtK!uUClsma(Gqs>YxY_H^0Neg!Lcnqu>k-V_f3odgCVL&!yVon-lZ_64+1&}AA4#IUCY4e@gOLMb zM!()M=5cF8Z-}8n7bK!+E$Xu-wBTrlz6a@mL5wpqPtUNWcDrRlZr{t zK);Ma+m;s3bnNBq({Duuv+)P5$1}Q%gDYe(HllT9d$hse3o->cjG;jMZZO(&Bi(%4 zks<62#8w_MT1qyF@Q2MG!{*^#lpF66{X=IWNaO1_kHaEV&!3DF5;I72Wh>KVl2TBV zDlipV74ZPbk0El$hJ}s2u#q-op{}V3ZL44+!WR0h!-RKtUKa2J+9zC>x&RXOX%U5D zB{Oq#3Lzm9fP(r422MPWdjZi`U!Qs?;PusIU(cJ~%G%obrWj#vGZ|C7)C^`&=7vN3 zyF87Aq~sG5Q`2WeM5td?2}X+6N$8u3>JhvO^7H5Z!6U!95{(D;a z+iqOXi7)kR@8>!7(j6U_NI`3mkt2vCjR%A(YOg}#H_?eA9>Y&OMBjE!>#dJ40e@^b z#;^PHd1mG3m1jb1yQ8-Ao`YnNz&6(PU9#VIkI~V?O z`omWWZS^kcE1s;s>m8w{%GZ z*`z!{AhI|?WO?s66e!bSg0%6!zo7sKnLVxeHJr>rx1MdIw$QqBLoefl>gBt{PahTB z+HQ6jN69Nes6k0yuvITjLUWN{cx3g10$0C~HEPRkI{r026^;&<#lq|tQyf61-Ri++4KQ?pg{Je6{B#lOY z4g(Q!SPTV4?)u@qvlkNQlws_RF1CG^f2`{gPk4}cVK;L?Gtrb%YG`--6y@=!QRVXw z@c6^D1IaxI>RAGjWs}9-Q#Ox-0gAUh24Q(NJu+%_gT!5IGP1HA04Br&bYweQjSLo4 z!o`K-@!?{791&o}?)D(K+_s0EjEM&@e#Ivxg@OKI3I@@I3L-@_b^=nrGnKvB z8dSj8h?$sBe)c_))%QD}m@YSlgTnJVi!#7Z#|oYx9W-ZXfR`bj7Gm7N{4cJd$4%` z(#9PI*Tx(aV?dWj^3Oz`P29fLbaIWemJKyk9i{ z;R6tDfN)hVR0lQf)D!L)ocU~L0u}J0P%#B6S&>yFEonxfpc?vPL)l2gi-TZxrujnF zJb4NAU~Hh4d{2NO{O6J%h!4%Ds(2T+k1(K` z_-4t4iN7zr6pUEBN0iZQV}ueLP};@l?&=r}e2)Atwdim_?}rRlZY?zNfG}JL?gy9= zs_%FL@u;zJ=L?j+08`I0ut-Yi>k|jalX6;OPL}AsYw@|{XU>X?3*7wd^AzX=_yX=s zP#yqaZBwv)hKP>a5%cr4$jD-^t~}57 zW)ia&C+gERnh@B*{FBOUM+h$VP@NUl7&2R)4co^b#VO4P$xEYiq5{(J=Zg_#gyq-z~ zLLTQ#T2=-vt$3ghBrwr3{biGs6Ie9`|`Z^OK$Gsc2nBeQ^|?fCWDW)Vnd@+yKNg?Tz_yIxK<_E!Fs-4@Jl6_ML4H z=d8s1u6>8;eN70J;A;SHfvG1rPwW8bB@hTuaD!)TdjO5>1lU3oa8T0pm$cN>|Auz8)B{mkIwFmfXXdzo@7(gRfn_qG$a7Rs1?JWk0Dx>Y;_|?R zC1n^%s&X)MZbX&XKSFCy&Tb(RT3AIYE}2J_JLr1KEE4|k9Y#JIIUFcCWnB(nw*BF$F5QC>&{6jbgb=-WNnQ=B=g1eZXt!ricVKY#&xEg zb$ddW^Kc-d0qB!61X+q%H_5J=%nY9NJ6Qos1Wla2BI$` zfhl{McCtCJcLVhr%B*XbXaYMqlU{99o5$3jP;;HuagiyWu`In1M~nl8fb5-~B80o#;0`gvrT@qI;wO+tiAKpMN{T^ z1w@0DUXd@|l(BDts+WudCoBy+gQl9`Ux4Mz;ut5fR>VpG@XIPl7 zxBr+wc&`td4jY?Lp0ooZWO6}+oMdEVWckd)&(Du%A~dcYTqxARVc!Exu?rgYU%+lv zH5G{>Q5dR_Z~p*X1Nd%e966MrboanzL3W)-V>xShk++ME&j#_kz4-G;%Ij#vGZ`M& zo+CQ;uArdcpcIxOFI}Z7?;>Z-!ZCZ8nPS0ozTOFxGkp)Okhs9yzh_)$cLPJLPiC9f z=?2U9{;%(Ze4a*q?f23xz>;sPwKX*`AOSi{W-`!IF#!7V2||x<53}C1awZrNz(Yb$ zDqakA#r@AO3lrGrU0&7#ueV~&HbHZF4J3#4A2BN0M1+KFrafpN3-VvFb8x%_)Onr8 z%omgCO=j0DQY_e+`lTSRm0=@)X}`q&uOa{1Y$=73?QXM-iH92=g_wJpscQAJ(}v3L zkL|OYVIOQ;T3Z*HBc4DKWvLenbvB&<~$Od^Q1+BNk zpQ8bV3FC-{a0(PKc>CNMH=|2}cK=qw=?c`nV{B1%&eWHMM&BM_eh#e#J>0kJG8y>` zq1=9F4J51Wc-Vagf#fz2{w(2<;P#?)bfYBS{WSNvYETRI53WHa^UJ6qgo}oh4%_^V zp7pVjLeUdYQ`$i$EIhbpvef>1{>FEuLjTRKcTucJa}wY)JAwtiy(g)<#Qmmy!b0j(qx@Kf?_S7zb<`l(&(>1=cbx$Icl) zdeKhT>{93*JxTr9)R?!kr?tedw6%cx^Zqh$doJH@Hn2X%!N?WGEMUCm-p(%EZ=9!H zsjYfqWw}iBj}y7Sa&Mi4%=2w^a(X;YXIhHR>|f`hz$Ov?#setril>0k1Xi68ASu*2 zcR#o@&(#QOmHtUwe#^ipt|N~y_Iojz{Yzdp*0IZ~ijFdD?wl{z*hZchdb_qNY#!fd zIGT^RxH-S6TZ>(;Ux>~Ulbw@G@&jTT3K_wnC0X0wlVCJh&3k`N-i*oo%+mf|A%8i6 z*I0**n`mSN(lhp?wt)cBPKRUEB_2d7)IRWMVO%oaH8xyodg&2!ulEsV92`9A2kgb} z;fTpJ1}Ar5;WH63Q(JBjAGIQF5HESOQ~`TbqaS)T7PfpRNn|iQhKEj0qcCoeK0!0( zw7e(e^c@XR*RdTBx9^QGi0#uoSE=C>))Pjyzm=5I^3S_eKvb@LZ_c)%48tSwk?)TT z#=#nWB{AbE#P>1eAsB|gtx~C?xaH017#LpZ6@L-8mO@Zfzk@C5h}v~cIngKtG)xc* zBi0z^FG`3Vb_l@rKgmt-)H-uENzTe!!fp3qD$>T|o zFdMDXwLStQb=G^@wT!~-BSOUP(hQ-ud0j2Ie3}s8=h5n0`g3XV|PF zRMSa&9X=G1z>dql@zV;GAyN*LgBE?~Bic_{CtZS9uV}gvIU^^NOI(@}K$Ir67uXN( zAj64(_5UDek`ZF}yi@cy7nKzQV=!AXM>0;fd{Pivz@8@|7ek zUWV9N!9dt(W4ip8$;I9G#812RM%f=|%7uL7u;lTEBc=U2d9G*#I_$iiyk8{e)hP&k z6hTgWYM$#X+qmYnNHNMjp2Ay3t1lAJ&GY57-tHIUh2c_Y*nwM1#>`URC1Zpw>$ggj zi!Ua9q(0??H?LtK;>}q!9B3gx?8!f!i>I?$0zx-XRB`}20p)h`FTv0SY$+Vju^)^l za+M{be85q*F`RYCEksTI1OOuI8bYY(aX#hq3&&#;5FgP1hh+ymK4`c4dbQWO@NGGg z(+kdE+KB(TsoQ;z$+L9+p~2Cs;=1)ysXH^3oNkCreyU7nI9kfJ;-=Vl9J9PMWo6Z1 zPvi2hnqBI;2&Ny7@_It$sNz0-m$K3uz_udj-2WkApc<}=z5Ho|BRNTY;!`0iz8bUq zcl8dNY;n2p&5Ufhudu#omKLsqcMTTQdOQZ2>qwMp>TJn4IovLZ`F1m z9bcM%CAtzOW_+}>OPLj*F4LbHf&=Nn${o~NnrohXVba}dY#0+%5IUMCh2lZ3oKId; zjFi;FS)gIKVE`L%rtE94gC{Q$LKSiMrSF;K>^|hl{amqTU$N#i>!gI!=%{q*pIW^R zsaI|{p?rR_FW6W~j}!4$(;X_~A!3f(SVu3+0zw8>y&|#@)mg3)l4cJ6;0{M3K1cn4 zn0_4bJb4=n-y20-54AV1i*&;vh9NfO-pa>lz@9T?p%uHY8Fg!dgKaJ@5HOv<$7Sqr zuZZ;O)hqZj0q>Pgcrd92bmT}JJeLQ~sS1lBLSNufyxM*9_+d1+<*ja0;)1A9FX0pKqqGbYHfDcoY%$7Tc^G0mq0&lgpUMk2gZSJV6+m@e@ObGrl8kiPAtTg z3)`Kpk6iVMxMDANy4rrX&a~K-ljqzOcGa#``{;RMFpe9{z<_G@hN5d!2|*P;wp_~u z97A4%K{cz`dwN_$6Mm}#lWg{+?4PNt(x*Du4AC?NYJ#i<&i&uLcc}{H`b81yq8QNW z&Ee@B56QQ)6(tDeh=*(^tWpz`CzD^DUMth1oqgCe9$T@E)e$!~+WHhP2x@_nTls|+>}|>$xX(AQxgA|l$m-(y3W0)PRaiVUy+9WOwG z$MY`3#()gO=XWhwKaZOQWO>}@gDY6w5=~-3PfWc!d#K{~iOVML)29!}*!=EAAHfg< zb<5!}xhLd-r`7~U3rb4dh^ob=d*7{DIg(B#zIYRIs?V>kTqw`hkkMAKHbFI>N+3N$L^4?xJmgn4e zDS>+q3@abi&z|8p4|X@zh%mc9$=rTj-feg6nW7Y7BUQP8+h)SH$r^}mbX~cD*S>Mf zF_kF@A0N18q6`cKqOkp3Hj_tUX1>0Hi@v7{XZv$0S&!{-7|Z*0OFh7#hg>xA0VrtA zfX#-?-l)Qgnwe2U`Go;tV3&l57OF$t%=UAorKM0GDkc_IFc@!d_F{F^)I!#JV}ZOz z!NT&(Ms2RXo)@_0x~yg!-FAE6R&Ot`Ea7M3Q!JIA7(C5 zI1anT2WkL#uC}&y!CqQJ0~e_4fCG6~&pS+YISYKVnwno~Yw>b&a`3rr@qsQg#}0rw zJfsz)Xu|qOg=w!*jc$%+(KB4!KTbp)l4GJ{bNf8{A<`=v?r&yZ=Vb3v&CoLx=!e8k ze$zBJr&sR%n1fRymLiipG#Y^M>z?&Gtwf>TH^!A=G#h(|^QTHa-;TO+AXW;@yNnyY z8g7j9R0GHUy@t2c@Nla~VusSQUkl?Bl2J@`(Acj!Njkpv*YIT;1?Y#UnaVz6sTsuA z;-5-%hKLbJI_tA0Hz0V-`%cX*0Veprr(^X$K4oT`sSDj?0w&&kOL53;}yR*YGu-3>aWaY3al}u_>mq)rt>ew7nLk zLiU|YhSb7nxerc-IIlUA!89^PjLVRhSD>P+`JO%L8G~E6rPQdlY9Lmgag5L0&&k!- zLBG++R+0#8^bE1Gbe1sVPUa&0t~JVW5!>aj;qb|*dVvw?grLEu zw4ui|aRN{+dHMNkZys-+LqM4LcL4sCU%f4nR%x}LHftR&3plMHfq)$ZidiU-64$^Z z6w7eBQ-5HjNBS$7E)EtVX|sH>$o#J;5YSKj2C)I5JTjvEmk9&r_<8T$6742;W+psT zs3Upl{=nnz1c)DNRq;Ueu$}U+t*$2L;hCb3coGPtTwsIkr7wQ~M)HgsU4|q%=y6Ik zaq#d~q2>)hVLV$MYkmZufz>Wr&Cw3{T%k4$z^^}TTr$+kM4@gl8mVE8nT|Uty(5r( z=X2Z~&A)X6>tSb9C?#i20LUzeG54@`@RwPDGpm2G(g({Wtq58dS-Pl~YD+_OtyQV) zV)~F{3en7^q%rA!Mabo%SSv}y*G8foTjR=QA|N=UQRd0np*t&>(>V|9@J(W)m%v_+$-aa(Q$SY z1)~=9WbEe4c+L(pYk?U2*SZctdBK;a6`IFAr)QyX{4!DoWZ z@Z+7n+f9|{A~o?qX*bqSiHdv}N32S^n8NxFgvke7 z#v_pN*Yg)Z=vRJoh~K^Yy{Hs+xqe{)Set>k_HdP}Mt%*Rxi}f71#SxP@Q4v$jiF{e z$FnUJNl8f~!2Exi`(9cq1v=WI*Cq*I)scY58|o^D+UvnycUp3amuNyw`q~vH@DOsK z=9e{}ps1>&@+xU-+`0IaNc>4x&HCt7O1ozfZsw|AI1o1 zEh!G<+p~B5dR3ZAcMXrZB7S6HgI9zT8atwDNeMxGFTqUDU`d1~of*zoqLRSy0?uWX zr0&*ou%fU#J@U-; zwTDkxm>13)%yCf4TTDALc%N#QJd|K#t!hi>#1&&KM1c`p&@w-42P)C<<)EHxDecs8GW%DSd)v00{ zwp-H+eRja-(jF4C6bn9{oF1_ymd@25EsV@NjqS>oNrO!v6X5 z2Rx1SCCE-q4SOk|0w{ezE?MUI4so2bt2_Sl6!4t+ikY3zY6CPBAg_b;Z{23DllS?v zzJ8Q82e6C@klKCKOjzRPf$*7i?t9Wt8=tVsOTP!WOGEGN7p+$N0Lsk6_5&S%CG5H3 zGDi{sRMU-aj9{Ko(U}RFbT=p-uX{YAz1>pMQDxes51EO#t9fnnC>pCy-FapS_Yj}%+NCb`LnQM*>@ z*c;m*9NXJX#La|r5&Ep0j29^lJUb}FL=64~7_qN~lE;Gb42r!xOL=fI(l^bXKSQqU zct32`AjCh+55}`6WcKKbAk>>umb!y^L!_5IR=bh$qrvk`@~Lbc zCBsYLDS;IyJ>Vo zb*$vNteiFfhY8HG<>vt>l2_n?lU88t5(gvZ_wU~`7U3X3XAD(y(EfQd7b5?ekzeHR39jB~LS>;wS2W!lD{&?U# zKxxqHW^S(W;iEJXBwHF|TIx+?97&T=oA#m0x@MC+Lidjjz;0!aUyj)9_olW!NeWJv zI=M{F*jx;F=_mVj&7otfWczif>Ho*rS3p(Swc9EoA|Rzm2&kmeAfPmYbc1wvcgLnA zlh!h=kmPS%FX z6p(234dz`_Li@0AzR%PhS!aLuyeUD_nwEWpo9{}uAJU2Kd95!Z8;w+Y4?$JB1*t`* zml@hqHW=bohksy^;l?()J{t4d#kOc4ak0bMN+R)q=rKweqzJzCB7k7=`2(O|NXabK z*hmB3T`ap2vyZJ-JPjB{U|VrB5;4D_;dJX;+E9d-y-L{F*q8dSqkw?tQuJrl>QoA* z$HtGM851l_%-7D)fw_8@<9=~+Y#^*(Gc!n z@mY>^$IaQ{9Tfm{ci7iwyUPh5pXAED%V}_#qyI*7Gp7&G9(Qp!*fd}TbU^Ebr3!Qn z7jJ-lh91nUo@7n}kX){gACIPBS)yJoiA=bj0WbQePhRVE1HherIj#C2cu-`Tgqis{ z5W&~)gTH;_g{s%{dqaU^4`#T7m8$@Mlm|#*v;o+7-~ptmG+7!7x5d(*I01+>G&JT9 z4f*({UrGFWb!5%+_mGd97J5yW6Q1siga;44TimCR#Foc4SF+^meEOt`eto|)>u#ws z?sRZTM$8^TTks# znVUF$@j>_TfDch!^ra_;`^0w+v#DREv%hbXxo`LXVC!%SFuu~b^Dw(V+pjzC(cNuc zAtDghxhI&ZK<3p=ngK>rUqM1D#**Gnx|?5g#qRfzhU29DgR+#{z{ZP!#sw;k%O}9A z%yHB~0!tz|u6N3API9YEWB*20tZGFgdvE) zz1^+-?S7TxzEtIYU4_!ceSdRI8X*iLj)DoPW`3Ny?Yn4n+P{plwY9Z8-TDGK$slH6 zWsM;wWJxF-Eda>y7~qs6P~uloSJy+qRTBMbvn`0A4)_N=tmka573bcuSn?48Th^x; z>q-lQQ+VQqq<)BR%6-gz54#_CKYQax2eG%kL)HPn;tZLkmm6erUa=sp4W`!)X zPGmn?g!SVS%H|DV^Azn`^O{Y$-7&bdOWOWu-j{NJnX)dZuAra*W8yAD?xn&dZ?B;D zSGB=q&pZ7yVd`VgWJA)Z%idx=643(Z&!p@sNb)>IsZsk=vXZ{*d8n8{6wkt0xedj% z#Leq`?mLG3es}NeciTob@>OO!*EaV^;=7Id#=3j<`W4D}`1nhkIVo%P=W{yt_R*7* zO0%V~=AZ~5?t>~XuB*Y2qZZ=3P*8gwph@2WO2i!jq`b`1xXQXIpG*YR%HB}dRjNb| zr*KeH*8cLN^;aNsme{OIL`O$ooV(vUJeZoAI%?ihXgGS_a5V}ot*z}kIG}GlqH6pF zyV~Vy%<-^?`?-U=!|eJZAMq6i>^hfo=M6E$K{LQa!}}>6RB@fHU?bhm?cWj+Uo;`b zCMFgbZRJkyt_`Q$y}!Q*x$gi~#D~|nup-vX;mw=mM%df(_Nc9x!rjwgiZeYl_uDA@ zo@PZ&+_}A5?3ZqHd77V5jjXI?&h3O){BwJI^?th=+`_{;A^6Jc6CT{g&X=fg7T-)tj4jZaSyk5b)V3;b*Y=@)=MPg*Yu^2pcRmZ*T7z zAix71*ZcC)>F&(po`sknvS*V*r8r#;mgU_>$esVsy;>9x;+q8|YC5`O*unsHcc4dn zyI1pa=Ucy*l|^@tUHQ0+in&C^x_eX*Xfh2gnPQ&-WOZ_Uf12v~b_>aru`| zntuKCn(HJDeN^sVo}487%L)tU^G}bp0$t6Yygu54a8FC5c!lg}o%Sc|ozCB>RZZmS z&`tXy8C@~!ARDoK8a_*3IQ6@Sf4SY!raQ0|GR9qqy#TBXA7o`^VFg^UFW_L?Yq&P& zItmLp039C*b-&$KZE%efB9)j^E!yQ-?J|I}dpu1nRxLysXjG^g+{8MYjoE4b;Kvap3j|auG)w6qErbU1T zA%>Yfc_2>;@lx(ia*o~a7m&CWi`AvKK}Fdz^ll3Z`%vJ9TLzujTXo&7amUDgyD4cG zapk&%ozhVynP9j9!V|G1=jpTioBsPAhsJBQyWRP_pr88<2_YaVs>?}Gb=C=bhHq%|{iJE-s}HbxaJz^h&>f}iwSX-Y z-|cq+)AhO<2i1K#ja0`#%etsB)2%!fOz^Ix;gdqpvtE1JWD64d&ZqOcH*uj5b%{~ zxeinp5!{#9kfVr{0|&6SJs4+CK+cb5K3XUVCkzYn{wk5`*&X1ZLeBduknYV}7`w!? zadn>s_nU7qpk3dp$N$3ATPfzPOuFFfv^JFi&J~NhHH#x9qlXPAS#(+@iuexSF(swClV{9*jv`l$h3{p<~}7q#u$A4jCzeAT#V)mW*5 zY*$^ZP;gIf=+EN(+XrxlS1DYdhFfilt&>I-mJf(6p5NW@tzkE<%)2a%Pn?ZM_|Tcp zOAPN_FDP(LO`N8&G9>i20n6v90PAuksY3xQHjB8P|C}#W7czB9;Iuo99;^+>9#cCl z94<{D@7}u_d&>_m{OT?2{^3BB#ZhY^=g$DKq~NYq<5xdKK4uFRqNj;nA1cS^zrfKB z2n8TJFujm@pm=+wqJDN6mTrwIpulo7V8y+`rx$HC7B7ZXdh$Zv{ z*29mbd57!Ii>F59s;=Y{;un&CZp)`&1WDN$Z-de{)(pY~{qZ6;xV&P@+1xJMj!aVl!K8*!93gm$DtE$);;Y1r%G`!ZA(%e9UW+S$ofw zUR+$&M#ycpsY74y6y!3?`|lrIkxmBx{qECa*?&74gr%-W2;tC!3cvV`Z_(FIk;&QQ z@nDHaRsL-`xGq}RL(dg&j?2uDjq!#ys#@-ID|5T3(HP02)cu$F`T2SceT(_-%m1|N zQ^9a8e5YYZpP{zoGxd+1e9qAIx~nG~7fsISjSrUstCcsBa%D`jUyKXYtyDzkSrkCy z=5UmiQ6bOEY5M&0V=5H%H|&BiLP8dd2OApj+y;mwKi>P8LCK!!ERmfc#m>EkFnwq6dpE#>MYyYOq#AL$nU$(AwdErgR#KTj6fUPal^$ch0gB~1aX?ua2<$6ql!B2FBYoZatb;4=is zQ(x_=yU04eU5&ukf_wW@knMWGzauS8XO}poT+4D41?7}up>#cc{^8PkRnvxPBgFia zF@yCe3dMejB=9%8^il_&{*iklvaLk!!+4g*-SnfIO}wgTYiw~-J(@iXzvT=P<37+c z{dzpwXF&U4>`_a7PwMT@zvHEyF=9a6snF2Ihn}?ZoMvQ5aEaf8|MJ62 zKwTBsJW}YMvK^bTo$kvOyX&8MoYnI1@Iy~v-~#Sc;@iU3U7~pWU($>+Po4@&n=Fx3 zcj=l&c?$iF2rTlqaA4|W2h&4>kTlfwP6-YS(eM;C+&;UXcZx6KzF~Q$03V6@vP7}d zP$!3_X()JOGw8_7lZNso9|L2_uLn;2Nl)^Uu%_5E5KIm+U(|~+>(?)e(bXTm&VEU9 ziP;gS{(>oqZJRhh@Sj-snx(HcVwc}#M63`!d1ZC<%UByW=>1WODCS6U&IcThM|us- z8638yBE`67>B2Pk)|1k`LD>?=1@EcHKYk|9xP)ZKM91|NvStl2@KZ-$3n(EW*N`&H zeh^R<3Ei}O@YF8S&R1O_F-=^gvIR^{v9LHee+K5I^ei%UE-h(S1O={U>D)dVd*r{P zP#ra5LEIUW!q2*LoTQRac?E*m#Y(sDdD2YJE5?)py=*4#($SBy)m-~yCDDNf*;OyH z8N~)g1E?en)=}$8tjGuoTS`9i>T*2gEAeupRU@H)KayLpIg*h7j^yvA_vyWuTjhQA zx1efe+;8jQWzX&kY~Jzts(Qs=WSjeyNH3Alk_iRq`S(&z>)ZBK8-7C%>!iet&8YH; z#@tAZ&y!I}vX#J;^_~u^X4H-kK=kvK^6pmOc&RNEfnk*W%b%2qrhEo&{O_4^{)Io@ zMsyZ{-TesYJx4%hJOC#l*eti9!73M$-OiLiiE0<%G6-h-YO9@3-vP?W*p^A`CnygQ zpWI7KsJLY{`RVf~wkSe@I&lQfG_eM@`%;i9fU|!)0rH(_aATjYvVgje$^V^4Uoom! zkV*gk5yq$3H=ddQ&%MMfrs5QcmqF&A#LdU-*JlcL80YWq2&9us@{fwHqh65_ z7L{!kf?pN)ni&bewEAcLt8}3^+{=jXM-&wP`5F8t7WU7U4dMgvo{%mdeqdrEIXSDf ztfh6Mu{I zjr}{@ztXRsJt3X-4n(}IE=W)XPTfBZGJjpA@Tvw^3m^S94JFX$Q8$vuDeXTI6Qe40 znktl3n0mx-e!SgwNdaT3EzDmjrE|dcya4+_<3R~RTL=> zXYYl!HGKC!JK*o$eHMbSzo_xk;}Z3%P5(?Zg#!dNbAsp*xZyOeN4A1bx7GgBBuJIg zt6T)vTXTX<@atwS?c83<|1>Gs7cm^H@1iirW)qSk9D$KW2MN8{t%76TSxBv-W}R}A z!oKxC9cG1Mr1)wR_j?%L)QUH4Fk|tA$AA4QOqc!Ne*GT<@Glku3E=0yz!TP0*)#gn z?*1xCSq5GVDTNCaiW~IH;m`ga2Z=|T05aH{n0yCc$5V%~-dmUc0}bwb zwB$LH$=?~@gCe=c{pKAMFP{hqvDWhb{qPwtd|aV6EyM4M!LPuuODbolt>XEX&-sb?Gz}uSN6b2z1BI};JY9ja95sSw_l8KZk=1SIj-GvbФB=2) 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ⅇ3MRXZrYE%uAU!!o{% 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

(4#J*6jrI5L)^bB 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 literal 0 HcmV?d00001 diff --git a/docs/Mass_production/zh/sidebar.yaml b/docs/Mass_production/zh/sidebar.yaml index b9da97c..1731dbf 100755 --- a/docs/Mass_production/zh/sidebar.yaml +++ b/docs/Mass_production/zh/sidebar.yaml @@ -2,7 +2,9 @@ items: - label: 量产工具 file: README.md - - label: 加密保护 + - label: 代码加密保护 file: CodeEncryption.md + - label: 数据加密保护 + file: DataEncryption.md - label: 备份还原机制 file: QuecPythonBack.md \ No newline at end of file diff --git a/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md b/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md index b9b45f8..e9bee17 100644 --- a/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md +++ b/docs/little_demo/zh/QuecPythonTest/QuecPythonLED.md @@ -1,11 +1,3 @@ -# 平台说明 - -​ 本实验例程基于 EC600S_QuecPython_EVB_V1.1 开发板完成。 - - - -# QuecPython流水灯 - 1、 概述 流水灯:顾名思义,就是像水一样会流动的LED灯。 @@ -61,7 +53,7 @@ for x in [1, 2, 3]: print(x, end=" ,") ``` -输入结果:1,2,3 +输出结果:1,2,3 像这样把IOlist列表迭代,我们可以很方便的控制每一个LED灯的输出状态。 -- Gitee