diff --git a/screenshot32/DistributedTest/config/user_config.xml b/screenshot32/DistributedTest/config/user_config.xml
index defc72ddf38608a2003f1b303d05ee044914815b..d2a9f63abcb59405f3912326fe29e44730540356 100644
--- a/screenshot32/DistributedTest/config/user_config.xml
+++ b/screenshot32/DistributedTest/config/user_config.xml
@@ -63,4 +63,5 @@
DEBUG
+ ON
\ No newline at end of file
diff --git a/screenshot32/DistributedTest/testcases/DistributedTest.py b/screenshot32/DistributedTest/testcases/DistributedTest.py
index 890b0ed24d5877a32a3e6843cc66970272d4142f..41780ce980a864f7f74f091c0fdd3df9cde18226 100644
--- a/screenshot32/DistributedTest/testcases/DistributedTest.py
+++ b/screenshot32/DistributedTest/testcases/DistributedTest.py
@@ -4,6 +4,7 @@ import threading
import re
from devicetest.core.test_case import TestCase
from devicetest.aw.OpenHarmony import CommonOH
+from testcases.orc import Orc
class DistributedTest(TestCase):
@@ -38,17 +39,26 @@ class DistributedTest(TestCase):
# 授权
CommonOH.click(self.Phone1, 500, 706)
CommonOH.click(self.Phone1, 500, 706)
- CommonOH.touchByType(self.Phone1, "image", index=1)
- time.sleep(1)
- CommonOH.touchByText(self.Phone1, "取消")
- CommonOH.touchByType(self.Phone1, "image", index=1)
- time.sleep(1)
- CommonOH.touchByType(self.Phone1, "input", index=1)
+ CommonOH.hdc_std(self.Phone1, "shell snapshot_display -f /data/distributedcalc_step1.png")
+ CommonOH.hdc_std(self.Phone1, "file recv /data/distributedcalc_step1.png testcases\\distributedcalc_step1.png")
+ CommonOH.click(self.Phone1, 610, 110)
+ time.sleep(3)
+ CommonOH.click(self.Phone1, 380, 1150)
+ CommonOH.click(self.Phone1, 610, 110)
+ time.sleep(3)
+ CommonOH.hdc_std(self.Phone1, "shell snapshot_display -f /data/distributedcalc_step2.png")
+ CommonOH.hdc_std(self.Phone1, "file recv /data/distributedcalc_step2.png testcases\\distributedcalc_step2.png")
+ CommonOH.click(self.Phone1, 580, 1090)
time.sleep(1)
+ CommonOH.hdc_std(self.Phone2, "shell snapshot_display -f /data/distributedcalc_step3.png")
+ CommonOH.hdc_std(self.Phone2, "file recv /data/distributedcalc_step3.png testcases\\distributedcalc_step3.png")
#确定
CommonOH.click(self.Phone2, 520, 520)
CommonOH.click(self.Phone2, 520, 520)
- code = CommonOH.getTextByCondition(self.Phone2, "请在设备端输入链接码进行验证", relativePath="AFTER")
+ CommonOH.hdc_std(self.Phone2, "shell snapshot_display -f /data/distributedcalc_step4.png")
+ CommonOH.hdc_std(self.Phone2, "file recv /data/distributedcalc_step4.png testcases\\distributedcalc_step4.png")
+ time.sleep(1)
+ code = Orc("testcases\\distributedcalc_step4.png")
self.code = re.findall("[0-9]{6}", code)[0]
#输pin码
CommonOH.click(self.Phone1, 300, 535, downtime=500)
@@ -63,6 +73,7 @@ class DistributedTest(TestCase):
j = int(i) - 1
CommonOH.click(self.Phone1, 46 + j * 70, 778)
time.sleep(1)
+ CommonOH.click(self.Phone1, 60, 1145)
# 确定
CommonOH.click(self.Phone1, 500, 600)
@@ -74,8 +85,10 @@ class DistributedTest(TestCase):
CommonOH.startAbility(self.Phone1, "ohos.samples.distributedcalc.MainAbility", "ohos.samples.distributedcalc")
time.sleep(2)
# 拉起远端设备
- CommonOH.touchByType(self.Phone1, "image", index=1)
+ CommonOH.click(self.Phone1, 610, 110)
time.sleep(3)
+ CommonOH.hdc_std(self.Phone1, "shell snapshot_display -f /data/distributedcalc_step5.png")
+ CommonOH.hdc_std(self.Phone1, "file recv /data/distributedcalc_step5.png testcases\\distributedcalc_step5.png")
CommonOH.click(self.Phone1, 580, 1090)
CommonOH.click(self.Phone1, 580, 1090)
# 设备二授权
@@ -83,7 +96,12 @@ class DistributedTest(TestCase):
CommonOH.click(self.Phone2, 500, 706)
CommonOH.click(self.Phone2, 500, 706)
# 校验远端计算器是否被拉起
- CommonOH.checkIfTextExist(self.Phone2, "计算器", pattern="EQUALS", expect=True)
+ CommonOH.hdc_std(self.Phone2, "shell snapshot_display -f /data/distributedcalc_step6.png")
+ CommonOH.hdc_std(self.Phone2, "file recv /data/distributedcalc_step6.png testcases\\distributedcalc_step6.png")
+ CommonOH.hdc_std(self.Phone2, 'shell "aa dump -a | grep distributedcalc > /data/report.txt"')
+ CommonOH.hdc_std(self.Phone2, "file recv /data/report.txt testcases\\report.txt")
+ time.sleep(1)
+ CommonOH.hdc_std(self.Phone1, "file send testcases\\report.txt /data/report.txt")
def net_connect1(self):
# 点亮屏幕
@@ -99,7 +117,5 @@ class DistributedTest(TestCase):
def teardown(self):
# 切入后台,结束进程
- CommonOH.click(self.Phone1, 512, 1246)
- CommonOH.click(self.Phone2, 512, 1246)
- CommonOH.click(self.Phone1, 360, 1168)
- CommonOH.click(self.Phone2, 360, 1168)
\ No newline at end of file
+ CommonOH.hdc_std(self.Phone1, "shell killall ohos.samples.distributedcalc")
+ CommonOH.hdc_std(self.Phone2, "shell killall ohos.samples.distributedcalc")
\ No newline at end of file
diff --git a/screenshot32/DistributedTest/testcases/orc.py b/screenshot32/DistributedTest/testcases/orc.py
new file mode 100644
index 0000000000000000000000000000000000000000..54ab14b87e9dba3ec819d9900c37ac33110a5cc1
--- /dev/null
+++ b/screenshot32/DistributedTest/testcases/orc.py
@@ -0,0 +1,10 @@
+import pytesseract
+from PIL import Image
+
+
+def Orc(path):
+ pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'
+ tessdata_dir_config = '--tessdata-dir "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"'
+ image = Image.open(path)
+ code = pytesseract.image_to_string(image, config=tessdata_dir_config)
+ return code
diff --git a/screenshot32/resource/app_capture_screen_test_config.json b/screenshot32/resource/app_capture_screen_test_config.json
index 5e3ac0d8f89bcfe629e15ad98ac8a2e62d391bff..10868e0d083109f4c90f3e53f3ec26590b525118 100644
--- a/screenshot32/resource/app_capture_screen_test_config.json
+++ b/screenshot32/resource/app_capture_screen_test_config.json
@@ -1,7 +1,7 @@
[
{
- "DEVICE_1":[2, 3, 8, 9, 10, 12],
- "DEVICE_2":[1, 4, 5, 6, 7, 11],
+ "DEVICE_1":[1, 2, 3, 8, 10, 12],
+ "DEVICE_2":[4, 5, 6, 7, 9, 11],
"return-x-y":[210, 1240],
"recent-x-y":[515, 1240],
"home-x-y":[360, 1240],
@@ -10,8 +10,7 @@
"take_photos-x-y":[360, 1095],
"convert_to_video-x-y":[430, 980],
"convert_to_photos-x-y":[200, 1095],
- "last_photos-x-y":[100, 200],
- "album_click-x-y":[530, 1150],
+ "last_photos-x-y":[100, 220],
"stop_video-x-y":[320, 1095],
"phone-x-y":[565, 1045],
"shot_cmd":[""],
@@ -25,7 +24,6 @@
"app_name": "crash_check",
"entry": "",
"compress_file_recv":["cd /data/log/faultlog/temp && tar -cf crash_log.tar cppcrash*"],
- "crash_check":["ls /data/log/faultlog/temp/ -al | wc -l", ""],
"all_actions": [
[1, "remount"], [1, "process_crash_check", "foundation"], [1, "process_crash_check", "render_service"], [1, "process_crash_check", "appspawn"], [1, "compress_file_recv"],
[1, "get_file_from_dev", "/data/log/faultlog/temp/crash_log.tar"]
@@ -48,18 +46,6 @@
[2, "connect_wifi"], [1, "check_ping_baidu"]
]
},
- {
- "app_name": "photos",
- "entry": "",
- "start_screenshot": ["aa start -a com.ohos.screenshot.ServiceExtAbility -b com.ohos.screenshot"],
- "start_photos": ["aa start -a com.ohos.photos.MainAbility -b com.ohos.photos"],
- "cp_db": ["cp /data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/rdb/media_library.db /data/photo.db"],
- "kill_photos": ["killall com.ohos.photos"],
- "all_actions": [
- [8, "start_screenshot"], [8, "start_screenshot"], [5, "start_photos"], [2, "album_click-x-y"], [2, "last_photos-x-y"], [2, "last_photos-x-y"], [2, "shot_cmd"], [1, "cmp_cmd-level"],
- [1, "cp_db"], [1, "get_file_from_dev", "/data/photo.db"], [2, "photo_check"], [1, "process_check", "com.ohos.medialibrary.medialibrarydata"], [1, "kill_photos"]
- ]
- },
{
"app_name": "video_test",
"entry": "",
@@ -69,9 +55,25 @@
"compress_log":["cd /data/log/hilog && tar -cf video_log.tar *"],
"kill_video": ["killall ohos.acts.multimedia.video.videoplayer"],
"all_actions": [
- [1,"start_video_log"], [2, "install_hap", "vediotest/ActsVideoPlayerJsTest.hap"], [1, "mk_test_dir"], [1, "remount"],
+ [1,"start_video_log"], [2, "install_hap", "vediotest/ActsVideoPlayerJsTest.hap"], [1, "mk_test_dir"], [1, "remount"],
[1, "send_file_to_dev", "vediotest/H264_AAC.mp4", "/data/app/el2/100/base/ohos.acts.multimedia.video.videoplayer/haps/entry/files/"],
- [15, "start_test"], [1, "stop_hilog"], [1, "compress_log"], [1, "get_file_from_dev", "/data/log/hilog/video_log.tar"], [1, "kill_video"]
+ [5, "start_test"], [1, "stop_hilog"], [1, "compress_log"], [1, "get_file_from_dev", "/data/log/hilog/video_log.tar"], [1, "kill_video"]
+ ]
+ },
+ {
+ "app_name": "camera",
+ "entry": "",
+ "check_result":["cd /data/log/hilog && grep -nr PreviewOutputCallback", "OnFrameStarted"],
+ "compress_log":["cd /data/log/hilog && tar -cf camera_log.tar *"],
+ "open_camera_log":["rm /data/log/hilog/* && hilog -b X;hilog -b D -T CAMERA;hilog -r"],
+ "start_camera":["aa start -a com.ohos.camera.MainAbility -b com.ohos.camera"],
+ "recover_log":["cd data/log/hilog/;hilog -x > camera_log.txt;hilog -b D"],
+ "kill_camera": ["killall com.ohos.camera"],
+ "kill_photos": ["killall com.ohos.photos"],
+ "all_actions": [
+ [1, "open_camera_log"], [5, "start_camera"], [3, "take_photos-x-y"], [2, "convert_to_video-x-y"], [3, "take_photos-x-y"], [2, "stop_video-x-y"], [6, "convert_to_photos-x-y"],
+ [2, 670, 40], [1, "recover_log"], [1, "check_result"], [1, "shot_cmd", "camera_to_photos"], [1, "cmp_cmd-level", 1400000], [1, "compress_log"],
+ [1, "get_file_from_dev", "/data/log/hilog/camera_log.tar"], [1, "kill_camera"], [1, "kill_photos"]
]
},
{
@@ -86,19 +88,15 @@
]
},
{
- "app_name": "camera",
+ "app_name": "photos",
"entry": "",
- "check_result":["cd /data/log/hilog && grep -nr PreviewOutputCallback", "OnFrameStarted"],
- "compress_log":["cd /data/log/hilog && tar -cf camera_log.tar *"],
- "open_camera_log":["rm /data/log/hilog/* && hilog -b X;hilog -b D -T CAMERA;hilog -r"],
- "start_camera":["aa start -a com.ohos.camera.MainAbility -b com.ohos.camera"],
- "recover_log":["cd data/log/hilog/;hilog -x > camera_log.txt;hilog -b D"],
- "cp_db": ["cp /data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/rdb/media_library.db /data/camera_photo.db"],
- "kill_camera": ["killall com.ohos.camera"],
+ "start_screenshot": ["aa start -a com.ohos.screenshot.ServiceExtAbility -b com.ohos.screenshot"],
+ "start_photos": ["aa start -a com.ohos.photos.MainAbility -b com.ohos.photos"],
+ "cp_db": ["cp /data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/rdb/media_library.db /data/photo.db"],
+ "kill_photos": ["killall com.ohos.photos"],
"all_actions": [
- [1, "open_camera_log"], [5, "start_camera"], [2, "take_photos-x-y"], [3, "take_photos-x-y"], [2, "convert_to_video-x-y"], [5, "take_photos-x-y"], [2, "stop_video-x-y"],
- [6, "convert_to_photos-x-y"], [2, 670, 40], [1, "recover_log"], [1, "check_result"], [1, "shot_cmd", "camera_to_photos"], [1, "cmp_cmd-level", 1900000], [1, "cp_db"],
- [1, "get_file_from_dev", "/data/camera_photo.db"], [2, "camera_photo_check"], [1, "compress_log"], [1, "get_file_from_dev", "/data/log/hilog/camera_log.tar"], [1, "kill_camera"]
+ [8, "start_screenshot"], [5, "start_photos"], [2, "last_photos-x-y"], [2, "shot_cmd"], [1, "cmp_cmd-level"], [1, "cp_db"], [1, "get_file_from_dev", "/data/photo.db"],
+ [2, "photo_check"], [1, "process_check", "com.ohos.medialibrary.medialibrarydata"], [2, "sandbox_path_check"], [1, "kill_photos"]
]
},
{
@@ -114,7 +112,7 @@
"entry": "aa start -a MainAbility -b com.ohos.note",
"kill_note": ["killall com.ohos.note"],
"all_actions": [
- [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "shot_cmd"], [1, "cmp_cmd-level"], [2, "recent-x-y"], [1, "recent_del-x-y"]
+ [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [5, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "permisson_ok-x-y"], [2, "shot_cmd"], [1, "cmp_cmd-level"], [2, "recent-x-y"], [1, "recent_del-x-y"]
]
},
{
diff --git a/screenshot32/resource/capturescreentest.py b/screenshot32/resource/capturescreentest.py
index fd9befc8408dc9697066609616c847c2e7d5d29b..85a7f6c63d54fdcda6cd6e974108d0507595e5fe 100644
--- a/screenshot32/resource/capturescreentest.py
+++ b/screenshot32/resource/capturescreentest.py
@@ -26,6 +26,7 @@ import datetime
import sqlite3
import shutil
+
def PrintToLog(str):
time = datetime.datetime.now()
str = "[{}] {}".format(time, str)
@@ -38,6 +39,7 @@ def PrintToLog(str):
sys.stdout = console
log_file.close()
+
def EnterCmd(mycmd, waittime=0, printresult=1):
if mycmd == "":
return
@@ -76,30 +78,35 @@ def EnterCmd(mycmd, waittime=0, printresult=1):
cmd_f.close()
return result
+
def EnterShellCmd(shellcmd, waittime=0, printresult=1):
if shellcmd == "":
return
cmd = "hdc_std -t {} shell \"{}\"".format(args.device_num, shellcmd)
return EnterCmd(cmd, waittime, printresult)
+
def SysExit():
- EnterShellCmd("cd /data/log/faultlog/temp && tar -cf after_test_crash_log_{}.tar cppcrash*".format(args.device_num))
- GetFileFromDev("/data/log/faultlog/temp/after_test_crash_log_{}.tar".format(args.device_num), \
+ EnterShellCmd("cd /data/log/faultlog/temp && tar -cf after_test_cppcrash{}.tar cppcrash*".format(args.device_num))
+ GetFileFromDev("/data/log/faultlog/temp/after_test_cppcrash{}.tar".format(args.device_num), \
+ os.path.normpath(args.save_path))
+ EnterShellCmd("cd /data/log/faultlog/faultlogger && tar -cf after_test_jscrash{}.tar jscrash*".format(args.device_num))
+ GetFileFromDev("/data/log/faultlog/faultlogger/after_test_jscrash{}.tar".format(args.device_num), \
os.path.normpath(args.save_path))
PrintToLog("SmokeTest:: SmokeTest find some key problems!")
PrintToLog("SmokeTest:: End of check, test failed!")
sys.exit(98)
+
def SendFileToDev(src, dst):
cmd = "hdc_std -t {} file send \"{}\" \"{}\"".format(args.device_num, src, dst)
return EnterCmd(cmd, 1, 1)
+
def GetFileFromDev(src, dst):
cmd = "hdc_std -t {} file recv \"{}\" \"{}\"".format(args.device_num, src, dst)
return EnterCmd(cmd, 1, 1)
-def is_image_file(filename):
- return any(filename.endswith(extension) for extension in IMG_EXTENSIONS)
def ImageCheck(str, testnum=1):
conn = sqlite3.connect(str)
@@ -135,6 +142,7 @@ def ImageCheck(str, testnum=1):
PrintToLog("SmokeTest:: error: There are no photos or videos in the album!!")
return -1
+
def ConnectionJudgment():
connection_status = EnterCmd("hdc_std list targets", 2)
connection_cnt = 0
@@ -146,6 +154,33 @@ def ConnectionJudgment():
PrintToLog("SmokeTest:: End of check, test failed!")
sys.exit(101)
+
+def sandbox_check(process):
+ PrintToLog("SmokeTest:: start to check sandbox path")
+ medialibrarydata_pidnum = EnterShellCmd("pgrep -f {}".format(process), 1)
+ medialibrarydata_pidnum = medialibrarydata_pidnum.strip()
+ sandboxf = EnterShellCmd("echo \"ls /storage/media/local/\"|nsenter -t {} -m sh".format(medialibrarydata_pidnum), 1)
+ if "files" not in sandboxf:
+ PrintToLog("SmokeTest:: error: can not find sandbox path : /storage/media/local/files")
+ return -1
+ else:
+ PrintToLog("SmokeTest:: success: find sandbox path : /storage/media/local/files")
+ return 1
+
+
+def is_image_file(filename):
+ IMG_EXTENSIONS = ['.png', '.PNG']
+ return any(filename.endswith(extension) for extension in IMG_EXTENSIONS)
+
+def picture_save(pic_path):
+ for root, dirs, files in os.walk(pic_path):
+ for file in files:
+ file_path = os.path.join(root, file)
+ if is_image_file(file_path):
+ shutil.copy2(file_path, args.save_path)
+ PrintToLog("SmokeTest:: send {} to save_path Successfully".format(file_path))
+
+
def ConnectToWifi(tools_path):
EnterShellCmd("mkdir /data/l2tool", 1)
SendFileToDev(os.path.normpath(os.path.join(tools_path, "l2tool/busybox")), "/data/l2tool/")
@@ -186,6 +221,7 @@ def ConnectToWifi(tools_path):
cnt -= 1
time.sleep(5)
+
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('--config', type=str, default = './app_capture_screen_test_config.json')
@@ -201,17 +237,11 @@ if __name__ == "__main__":
result = EnterCmd("hdc_std list targets", 1, 0)
print(result)
args.device_num = result.split()[0]
-
with open(args.config) as f:
all_app = json.load(f)
-
cmp_status = 0
global_pos = all_app[0]
- IMG_EXTENSIONS = [
- '.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG',
- ]
-
rebootcnt = 2
while rebootcnt:
rebootcnt -= 1
@@ -224,7 +254,6 @@ if __name__ == "__main__":
EnterShellCmd("uinput -T -m 425 1000 425 400;power-shell wakeup;uinput -T -m 425 400 425 1000;\
power-shell setmode 602;uinput -T -m 425 1000 425 400;", 1)
rmlockcnt -= 1
-
EnterShellCmd("hilog -w stop", 1)
EnterShellCmd("cd /data/log/hilog && tar -cf system_start_log_{}.tar *".format(args.device_num), 1)
GetFileFromDev("/data/log/hilog/system_start_log_{}.tar".format(args.device_num), args.save_path)
@@ -281,6 +310,57 @@ if __name__ == "__main__":
else:
PrintToLog("SmokeTest:: first processes check is ok")
+ if "1/2" in args.test_num or "2/2" in args.test_num:
+ EnterShellCmd("param set persist.ace.testmode.enabled 1", 1)
+ EnterShellCmd("rm /data/log/hilog/*;hilog -r;hilog -Q pidoff;hilog -Q domainoff;hilog -G 512M;hilog -b D", 1)
+ picture_path = os.path.normpath(os.path.join(args.tools_path, "DistributedTest\\testcases"))
+ report_path = os.path.normpath(os.path.join(args.tools_path, "DistributedTest\\testcases\\report.txt"))
+ if args.test_num == "2/2":
+ EnterShellCmd("ifconfig eth0 192.168.0.1", 1)
+ ping_result = EnterShellCmd("ping 192.168.0.2 -i 1 -c 2", 3)
+ file_is_exist = EnterShellCmd("cd /data; find . -name report.txt")
+ ping_cnt = 0
+ wait_cnt = 0
+ while "2 packets transmitted, 2 received" not in ping_result and ping_cnt < 60:
+ ping_result = EnterShellCmd("ping 192.168.0.2 -i 1 -c 2", 3)
+ ping_cnt += 1
+ if ping_cnt == 60:
+ PrintToLog("SmokeTest:: Ping failed, timeout of 3 minutes")
+ SysExit()
+ while "report.txt" not in file_is_exist and wait_cnt < 60:
+ PrintToLog("SmokeTest:: waiting for the distributed test to end ")
+ file_is_exist = EnterShellCmd("cd /data; find . -name report.txt", 3)
+ wait_cnt += 1
+ elif args.test_num == "1/2":
+ EnterShellCmd("ifconfig eth0 192.168.0.2", 1)
+ ping_result = EnterShellCmd("ping 192.168.0.1 -i 1 -c 2", 3)
+ ping_cnt = 0
+ while "2 packets transmitted, 2 received" not in ping_result and ping_cnt < 60:
+ ping_result = EnterShellCmd("ping 192.168.0.1 -i 1 -c 2", 3)
+ ping_cnt += 1
+ if ping_cnt == 60:
+ PrintToLog("SmokeTest:: Ping failed, timeout of 3 minutes")
+ PrintToLog("SmokeTest:: ##### case 0 : distributed test start #####")
+ execute_path = os.path.normpath(os.path.join(args.tools_path, "DistributedTest"))
+ PrintToLog("SmokeTest:: execute_path {}".format(execute_path))
+ os.system("cd {} && python main.py run -l DistributedTest".format(execute_path))
+ distributed_result = ""
+ try:
+ with open(report_path, mode='r', encoding='utf-8', errors='ignore') as f:
+ f.seek(0)
+ distributed_result = f.read()
+ f.close()
+ except Exception as reason:
+ PrintToLog("SmokeTest:: report.txt is not exist!")
+ if "distributedcalc" in distributed_result:
+ picture_save(picture_path)
+ PrintToLog("SmokeTest:: testcase 0, distributed is ok!")
+ else:
+ picture_save(picture_path)
+ PrintToLog("SmokeTest:: error:testcase 0, distributed failed!")
+ SysExit()
+ EnterShellCmd("ifconfig eth0 down", 1)
+
try:
args.test_num.index('/')
idx_total = args.test_num.split('/')
@@ -314,7 +394,6 @@ if __name__ == "__main__":
testcnt = 3
while testcnt:
testok = 0
- checkok = 1
if testcnt != 3:
PrintToLog("SmokeTest:: this testcase try again >>>>>>:\n")
with open(os.path.join(args.save_path, 'test_{}.bat'.format(args.device_num)),\
@@ -388,10 +467,9 @@ if __name__ == "__main__":
elif type(single_action[1]) == str and single_action[1] == 'connect_wifi':
next_cmd = ""
ConnectToWifi(args.tools_path)
- elif type(single_action[1]) == str and single_action[1] == 'camera_photo_check':
+ elif type(single_action[1]) == str and single_action[1] == 'sandbox_path_check':
next_cmd = ""
- if ImageCheck("{}\\camera_photo.db".format(os.path.normpath(args.save_path)),\
- 1) == 1 and testok == 1:
+ if sandbox_check("com.ohos.medialibrary.medialibrarydata") == 1 and testok == 1:
testok = 1
else:
testok = -1
@@ -407,12 +485,12 @@ if __name__ == "__main__":
p = EnterShellCmd("ps -elf", single_action[0])
result = "".join(p)
findsome = result.find(single_action[2], 0, len(result))
- if findsome != -1:
- checkok = 1
+ if findsome != -1 and testok == 1:
+ testok = 1
PrintToLog("SmokeTest:: \"{}\" is ok, find process \"{}\"!".format(single_action[1],\
single_action[2]))
else:
- checkok = -1
+ testok = -1
PrintToLog("SmokeTest:: \"{}\" failed, not find process \"{}\"!".format(single_action[1],\
single_action[2]))
sys.stdout.flush()
@@ -459,16 +537,9 @@ if __name__ == "__main__":
next_cmd = "uinput -M -m {} {} -c 0".format(single_action[1], single_action[2])
EnterShellCmd(next_cmd, single_action[0])
- if testok == 1 and checkok == 1:
+ if testok == 1:
PrintToLog("SmokeTest:: testcase {}, {} is ok!".format(idx, single_app['app_name']))
testcnt = 0
- elif testok == 1 and checkok == -1:
- if testcnt == 1:
- fail_idx_list.append(idx)
- fail_name_list.append(single_app['app_name'])
- smoke_first_failed = single_app['app_name']
- PrintToLog("SmokeTest:: error:testcase {}, {} is failed!".format(idx, single_app['app_name']))
- testcnt -= 1
elif testok == -1 and smoke_first_failed == '':
if testcnt == 1:
fail_idx_list.append(idx)
@@ -485,16 +556,6 @@ if __name__ == "__main__":
testcnt = 0
ConnectionJudgment()
- PrintToLog("SmokeTest:: start to check sandbox path")
- medialibrarydata_pidnum = EnterShellCmd("pgrep -f com.ohos.medialibrary.medialibrarydata", 1)
- medialibrarydata_pidnum = medialibrarydata_pidnum.strip()
- sandboxf = EnterShellCmd("echo \"ls /storage/media/local/\"|nsenter -t {} -m sh".format(medialibrarydata_pidnum), 1)
- if "files" not in sandboxf:
- PrintToLog("SmokeTest:: error: can not find sandbox path : /storage/media/local/files")
- SysExit()
- else:
- PrintToLog("SmokeTest:: success: find sandbox path : /storage/media/local/files")
-
PrintToLog("\nSmokeTest:: ########## Second check key processes start ##############")
second_check_lose_process = []
for pname in two_check_process_list:
@@ -522,98 +583,8 @@ if __name__ == "__main__":
else:
PrintToLog("SmokeTest:: second processes check is ok")
- pr_analysis = args.pr_url
- PrintToLog("SmokeTest:: get pr: {}".format(args.pr_url))
- if "openharmony" in pr_analysis:
- EnterShellCmd("param set persist.ace.testmode.enabled 1", 1)
- PrintToLog("SmokeTest:: close selinux")
- EnterShellCmd("mount -o rw,remount /", 1)
- EnterShellCmd("sed -i 's/enforcing/permissive/g' /system/etc/selinux/config", 1)
- EnterShellCmd("cat /system/etc/selinux/config | grep SELINUX=", 1)
- EnterShellCmd("reboot")
- hdc_list = EnterCmd("hdc_std list targets", 3)
- waitcnt = 0
- while args.device_num not in hdc_list and waitcnt < 15:
- hdc_list = EnterCmd("hdc_std list targets", 3)
- waitcnt += 1
- PrintToLog("SmokeTest:: start remove lock")
- unlockcnt = 3
- while unlockcnt:
- EnterShellCmd("uinput -T -m 425 1000 425 400;power-shell wakeup;\
- uinput -T -m 425 400 425 1000;power-shell setmode 602;uinput -T -m 425 1000 425 400;", 1)
- unlockcnt -= 1
- if args.test_num == "2/2":
- EnterShellCmd("ifconfig eth0 192.168.0.1", 1)
- ping_result = EnterShellCmd("ping 192.168.0.2 -i 1 -c 2", 3)
- ping_cnt = 0
- while "2 packets transmitted, 2 received" not in ping_result and ping_cnt < 60:
- ping_result = EnterShellCmd("ping 192.168.0.2 -i 1 -c 2", 5)
- ping_cnt += 1
- if len(fail_idx_list) != 0:
- PrintToLog("SmokeTest:: error: name {}, index {}, these testcase is failed".format(fail_name_list,\
- fail_idx_list))
- SysExit()
- if ping_cnt == 60:
- PrintToLog("SmokeTest:: Ping failed, timeout of 5 minutes")
- PrintToLog("SmokeTest:: please check the testcase {}".format(fail_name_list))
- SysExit()
- elif args.test_num == "1/2":
- EnterShellCmd("ifconfig eth0 192.168.0.2", 1)
- ping_result = EnterShellCmd("ping 192.168.0.1 -i 1 -c 2", 3)
- ping_cnt = 0
- while "2 packets transmitted, 2 received" not in ping_result and ping_cnt < 60:
- ping_result = EnterShellCmd("ping 192.168.0.1 -i 1 -c 2", 5)
- ping_cnt += 1
- if ping_cnt == 60:
- PrintToLog("SmokeTest:: Ping failed, timeout of 5 minutes")
- PrintToLog("SmokeTest:: please check the testcase {}".format(fail_name_list))
- SysExit()
- PrintToLog("SmokeTest:: ##### case 13 : distributed test start #####")
- execute_path = os.path.normpath(os.path.join(args.tools_path, "DistributedTest"))
- PrintToLog("SmokeTest:: execute_path {}".format(execute_path))
- EnterShellCmd("rm /data/log/hilog/*;hilog -r;hilog -w start -l 400000000 -m none", 1)
- os.system("cd {} && python main.py run -l DistributedTest".format(execute_path))
- report_path = os.path.normpath(os.path.join(args.tools_path, "DistributedTest\\reports"))
- PrintToLog("SmokeTest:: report_path {}".format(report_path))
- task_file = "task_log.log"
- file_name = ''
- distributed_result = 0
- for root, dirs, files in os.walk(report_path):
- for file in files:
- file_path = os.path.join(root, file)
- if is_image_file(file_path):
- shutil.copy2(file_path, args.save_path)
- PrintToLog("SmokeTest:: send {} to save_path Successfully".format(file_path))
- for root, dirs, files in os.walk(report_path):
- if task_file in files:
- file_name = os.path.join(root, task_file)
- PrintToLog("SmokeTest:: file_name {}".format(file_name))
- try:
- with open(file_name, mode='r', encoding='utf-8', errors='ignore') as fs:
- report_lines = fs.readlines()
- for content in report_lines:
- if "total: 1, passed: 1" in content:
- distributed_result = 1
- break
- fs.close()
- except Exception as reason:
- PrintToLog("SmokeTest:: task_log.log is not exist!")
- if distributed_result == 1:
- PrintToLog("SmokeTest:: testcase 13, distributed is ok!")
- else:
- PrintToLog("SmokeTest:: error:testcase 13, distributed failed!")
- if len(fail_idx_list) != 0:
- PrintToLog("SmokeTest:: error: name {}, index {}, these testcase is failed".format(fail_name_list,\
- fail_idx_list))
- EnterShellCmd("hilog -w stop", 1)
- EnterShellCmd("cd /data/log/hilog && tar -cf distributed_log.tar *", 1)
- GetFileFromDev("/data/log/hilog/distributed_log.tar", args.save_path)
-
- EnterShellCmd("cd /data/log/faultlog/temp && tar -cf after_test_crash_log_{}.tar cppcrash*".format(args.device_num))
- GetFileFromDev("/data/log/faultlog/temp/after_test_crash_log_{}.tar".format(args.device_num), \
- os.path.normpath(args.save_path))
- EnterShellCmd("cd /data/log/faultlog/temp && find . -name cppcrash*", 2)
- EnterShellCmd("cd /data/log/faultlog/temp && grep \"Process name\" -rnw ./", 2)
+ EnterShellCmd("cd /data/log/faultlog/temp && grep \"Process name\" -rnw ./", 1)
+ EnterShellCmd("cd /data/log/faultlog/faultlogger && grep \"Process name\" -rnw ./", 1)
fail_str_list = [str(x) for x in fail_idx_list]
reboot_test_num = " ".join(fail_str_list)
diff --git a/screenshot32/resource/photos.png b/screenshot32/resource/photos.png
index 757ac11e0437d87f1d3a7e88b98800065d97cfcd..2ca9a62e2acf085e67401ece69ba2ef5919106c5 100644
Binary files a/screenshot32/resource/photos.png and b/screenshot32/resource/photos.png differ
diff --git a/screenshot32/resource/photos.pngraw b/screenshot32/resource/photos.pngraw
index 6e327a4507cdf3141c35e9a10a349c0544c98b47..eb623947bf7e2da497c97efe73241f79c0a475be 100644
--- a/screenshot32/resource/photos.pngraw
+++ b/screenshot32/resource/photos.pngraw
@@ -1,4 +1,4 @@
-JV`#.;0;Gmx#.;#.;#.;kv#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;mxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxyHS^#.;#.;#.;v#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW}NYd1=I=ITZenWbl:EP8COU`j4@L#.;#.;jt}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;zS_i;FR6AMP[ew#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;JU`#.;#.;#.;Ydn7CO6AMS_i#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWit|#.;#.;#.;#.;#.;#.;#.;.9F0;G#.;#.;#.;#.;#.;#.;-8DGR]#.;#.;#.;#.;jt}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6B#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;zfqz#.;#.;#.;#.;#.;#.;#.;#.;^is#.;#.;#.;#.;#.;#.;`ku#.;#.;#.;#.;#.;&2?#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;)4A*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C#.;#.;#.;@LWJV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;_js#.;#.;#.;#.;#.;#.;jt}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;KVa#.;#.;#.;4@L7CN7CO7CO7CO7CO7CO#.;#.;#.;)4A7CO7CO7CO7CO7CO7CO7CO7COR]g#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g#.;#.;#.;#.;#.;#.;z#.;#.;#.;#.;#.;#.;#.;p{#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;z#.;#.;#.;Ydn#.;#.;@LWny#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;G1=I#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;.9Fz#.;#.;#.;#.;#.;#.;#.;#.;jt}YdnYdnYdnYdnYdnYdnYdnYdnYdn@KV#.;#.;#.;3>Jq|#.;#.;#.;cnw7CO#.;#.;Ydn#.;#.;#.;#.;1=Iozs~J7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO3>J#.;#.;#.;#.;#.;#.;DO[#.;#.;#.;#.;CNZ#.;#.;BMYP[f#.;#.;#.;KVb#.;#.;#.;Ydn#.;#.;@LWx#.;HS^#.;#.;#.;q|#.;#.;#.;#.;#.;#.;#.;#.;#.;GS]}#.;#.;#.;jt}#.;#.;#.;S_i#.;#.;#.;4@L#.;#.;Q\gMXc#.;#.;#.;x#.;#.;#.;Zeo#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;3>J#.;#.;#.;#.;1=I#.;#.;#.;3>J#.;#.;#.;Ydn#.;#.;@LW8CO#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;}#.;#.;#.;jt}1=I#.;#.;#.;{#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g#.;#.;#.;#.;6AM#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;s~#.;#.;#.;P\g#.;#.;#.;Ydn#.;#.;@LW#.;#.;#.;#.;#.;#.;#.;)4A0;G#.;#.;#.;}#.;#.;#.;ju}#.;#.;#.;.9F#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g]hr#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;_jt#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;6AM#.;#.;#.;|#.;#.;#.;alvvvvvvvvvvvvvv:EQ#.;#.;@LWYcm#.;#.;#.;8CO~#.;#.;#.;@LWJU_#.;#.;#.;w}#.;#.;#.;ju}R]g#.;#.;#.;z#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g~#.;#.;#.;#.;#.;#.;#.;#.;u#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWGKL"$$"$$"$$"$$"$$"$$"$$"$$GKL#.;#.;#.;#.;u#.;#.;#.;JV`Q\f#.;#.;#.;my}#.;#.;#.;jt}#.;#.;#.;#.;#.;#.;#.;4@L#.;#.;Q\gCNY#.;#.;#.;#.;#.;#.;#.;#.;:EQ#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;p{#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWlrs"$$"$$"$$"$$"$$.01RWXSWX.01"$$"$$"$$"$$"$$lrs#.;#.;#.;#.;ku~u#.;#.;#.;KV`R]g#.;#.;#.;lw}#.;#.;#.;jt}y#.;#.;#.;NYc#.;#.;#.;7CO#.;#.;Ydn&2?#.;#.;#.;*6CXcm_is1=I#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;-8E#.;#.;#.;CNZ#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW#$$#$$#$%:=>w~x~;=>#$%"$$/12"$$"$$#.;#.;#.;#.;NYc~#.;#.;#.;BMXKV`#.;#.;#.;v~#.;#.;#.;jt}+6C#.;#.;#.;#.;#.;#.;8CO#.;#.;Zen4@L#.;#.;#.;Vakcnw#.;#.;#.;0;G#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;6AM#.;#.;#.;.9F#.;#.;#.;Wbm#.;#.;@LWlrs#$%#$%;>>;=>"$$"$$lrs"#$"$$GIJ'2?#.;#.;#.;>IT#.;#.;#.;)4A1=I#.;#.;#.;~#.;#.;#.;ju~#.;#.;#.;)4A#.;#.;#.;8CO#.;#.;Zeo#.;#.;#.;#.;&2?#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;>IU#.;#.;#.;&2?#.;#.;#.;Ydn#.;#.;@LWHKL#$%#$%mqslqs"$$"$$GKL#$$"#$GII.:F#.;#.;#.;4@K#.;#.;#.;#.;#.;#.;#.;#.;~#.;#.;#.;ju~IT_#.;#.;#.;s}#.;#.;#.;8CO#.;#.;Zeo~#.;#.;#.;9DOMXc#.;#.;#.;x#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;JU`#.;#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LWlrs"$%#$%"$$"$$krs#$$#$$GII7BN#.;#.;#.;-8D#.;#.;#.;#.;#.;#.;#.;#.;~#.;#.;#.;ju~#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hqoy#.;#.;#.;8COKVa#.;#.;#.;gr{gr{#.;#.;#.;7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO3>J#.;#.;#.;#.;#.;#.;#.;U`k#.;#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LW"$$"$$"$$"$$#$$#$$HJJ@KW#.;#.;#.;'2?9DP#.;#.;#.;gqzq{#.;#.;#.;5@L~#.;#.;#.;jt}py#.;#.;#.;FQ\#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hq#.;#.;#.;#.;#.;#.;#.;#.;~4@L#.;#.;]hq#.;#.;#.;#.;#.;#.;#.;alv#.;#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LW"$$"$$kqr/12/12kqr"$$.12"$$"$$GJJKV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;~~#.;#.;#.;jt}'2?#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hq#.;#.;#.;#.;KV`T_j#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;oz#.;#.;#.;#.;x#.;#.;#.;Ydn#.;#.;@LWkqr"$$:=>GKL"$$"$$SWX:=>"$$kqs"$$"$$FIIVak#.;#.;#.;#.;-8EZdnZen[en[eo[eoZenZdnYdn0;G#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;-8E~#.;#.;#.;ju}#.;#.;#.;'2?0;G#.;#.;FR]CNY#.;#.;#.;#.;#.;2=I8CO#.;#.;#.;#.;#.;>IUit}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;}#.;#.;#.;#.;#.;S_iYdnYdnYdnYdnYdnYdnYdnp{#.;#.;#.;Wbm#.;#.;@LW"$$"$$^df"$$"$$_de"$%"$%"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;~#.;#.;#.;ju}@KV#.;#.;#.;lv7CN#.;#.;Ydn0;H#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6B#.;#.;#.;@LW#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;MXd#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW"$$:=>kqskqs:=>"$%"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;G#.;#.;#.;#.;#.;#.;-8D~#.;#.;#.;ju}#.;#.;#.;#.;7CO#.;#.;YdnT^h#.;#.;#.;#.;#.;#.;#.;#.;JU`EP[#.;#.;#.;R]h#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;MXd#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWGKL"$$w~w~"$%GKL"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Xbl9DP8COU`i~#.;#.;#.;ju}dnw#.;#.;#.;?JU7CO#.;#.;YdnzU_i;FQ6AMP[es}lw#.;#.;#.;FR]x#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;MXd#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW"$%"$$"$%"$%"$$"$$FII7CO#.;#.;Ydn>IU#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;it}#.;#.;#.;alvvvvvvvvvvvvvv:EQ#.;#.;@LW"$%"$$"$$#$%"$%"$%"$$"$$FII7CO#.;#.;Ydnr}#.;MXc@LW3>J*6B:EQWbl#.;#.;#.;Ydn#.;#.;@LW"$%.01"$$#$%.01"$%RVV"$$"$$"$$"$$"#$"$$#$$#$$#$$#$$"#$"#$"#$"$$"$$#$$#$$#$$#$$#$$#$$#$$#$$"$$"$$"$$"$$"$$7CO#.;#.;Ydn"$$RWX"$$#$%RWX"$%"$$"$$"$$"$$"#$"$$#$$#$$#$$#$$"#$"#$"$$#$$#$$#$$#$$#$$#$$#$$#$$#$$#$$#$$"$$"$$"$$"$$"$$RWX"$$"$$RWX"$%"$$.12"$$"$$.12"$%"$$"$$"$$"$$"$%"$%"$$"$$GJJ"$$"$$"$$"$$"$%"$%"$$"$$GJJFJK"$$w~"$$"$%w~"$%FJK"$$"$$GJJ"$$;>?"$%"$%;>?"$%"$$"$$GJJ"$$"$$"$%"$%"$%"$%"$$"$$GJJkqr"$$;>?"$%"$%;>?"$%kqs"$$"$$GJJ"$$"$$kqsFJKFJKkrs"$%.01"$$"$$GJJr{"$$"$$"$%"$%"$$"$$GJJq{q{q{q{q{r{r{r{r{r{r{r{r{r{r{r{r{r{kqr"$$"$$"$%"$%kqs"$$"$$GJJt}r{r{~~~~~~~~~~~r{wFJK"$%"$%krskrs"$%"$%FJK"$$"$$vr{~r{r{r{r{wr{t~r{kqs"$%"$%;>?;>?"$%"$%kqsvr{r{t~r{}wr{{v.01"$%"$%;>?xx;>?"$%"$%.01vv}r{r{t~t~wr{kqs"$%"$%"$%"$%"$%.12SXYSXY.12"$$"$$"$$"$%"$%kqsr{r{r{~wr{FJK"$%"$%"$$"$$"$$"$$"$$"$$FJKr{ur{r{r{wr{vr{xr{|r{wr{r{r{vr{}r{r{r{wr{u~vr{r{~~~~~~~~t~r{~~~~~~~u~r{wr{vr{r{r{wr{vr{r{r{r{r{r{r{r{r{r{r{wr{vr{r{r{r{wr{wr{r{xr{s{wr{r{xr{{s{wr{r{xwr{wr{dddeg
+JV`#.;0;Gmx#.;#.;#.;kv#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;mxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxyHS^#.;#.;#.;v#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LX}NYd1=I=ITZenWbl:EP8COU`j}NYd1=I=ITZen}NYd1=I=ITZen#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;z4@L#.;#.;jt~cnwBMY1=IMXc|#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;JU`#.;#.;#.;#.;#.;#.;)4A#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LXit|#.;#.;#.;#.;#.;#.;#.;.9F0;G#.;#.;#.;#.;#.;#.;-8Dit|#.;#.;#.;#.;#.;#.;#.;.9Fit|#.;#.;#.;#.;#.;#.;#.;.9F*6B#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;zGR]#.;#.;#.;#.;jt~FR]#.;#.;#.;#.;#.;#.;#.;z#.;#.;#.;#.;#.;#.;`ku#.;#.;#.;#.;#.;KVb#.;#.;#.;#.;#.;#.;)4A*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C*6C#.;#.;#.;@LXJV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;JV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;JV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;KVa#.;#.;#.;4@L7CN7CO7CO7CO7CO7CO#.;#.;#.;)4A7CO7CO7CO7CO7CO7CO7CO7CO_jt#.;#.;#.;#.;#.;#.;jt~6AM#.;#.;#.;#.;#.;#.;#.;#.;#.;t#.;#.;#.;#.;#.;#.;z#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;-8E#.;#.;#.;Ydn#.;#.;@LWny#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;G1=I#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;.9Fny#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;Gny#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;Gq|#.;#.;#.;cnw7CO#.;#.;Ydnz#.;#.;#.;#.;#.;#.;#.;#.;jt~Wbm#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;1=I#.;#.;#.;#.;#.;#.;#.;#.;GR^#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LW#.;#.;#.;#.;kv[fp#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;~#.;#.;#.;#.;kv[fp#.;#.;#.;#.;#.;#.;#.;#.;kv[fp#.;#.;#.;#.;#.;#.;#.;=IT7CO#.;#.;Ydn#.;#.;#.;#.;#.;4@L#.;#.;#.;jt~#.;#.;#.;#.;hs|1=I#.;#.;#.;JVa#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;4@L#.;#.;#.;#.;#.;#.;#.;0;H#.;#.;#.;Ydn#.;#.;@LW0;G#.;#.;grz#.;#.;#.;#.;;FR#.;#.;#.;dpxkv#.;#.;#.;6AM0;G#.;#.;grz#.;#.;#.;#.;0;G#.;#.;grz#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;Ydn#.;#.;#.;]hq}#.;#.;#.;jt~p{#.;#.;#.;:EQ#.;#.;#.;#.;#.;#.;#.;3>J7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO3>J#.;#.;#.;#.;#.;#.;DO[#.;#.;#.;#.;CNZ#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LWx#.;HS^#.;#.;#.;q|#.;#.;#.;#.;#.;#.;#.;#.;x#.;HS^#.;#.;#.;q|x#.;HS^#.;#.;#.;q|#.;#.;#.;4@L#.;#.;Q\g#.;GR]}#.;#.;#.;jt~-8D#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;3>J#.;#.;#.;#.;#.;#.;#.;4@L#.;#.;#.;Ydn#.;#.;@LW8CO#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;8DO#.;#.;#.;8CO#.;#.;#.;{#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g}#.;#.;#.;jt~#.;#.;#.;#.;P[f#.;#.;#.;q|#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@KW#.;#.;#.;#.;#.;#.;Ydn#.;#.;@LW#.;#.;#.;#.;#.;#.;#.;)4A0;G#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g}#.;#.;#.;jt~#.;#.;#.;#.;oz#.;#.;#.;NYd#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;:EQ#.;#.;#.;alvvvvvvvvvvvvvv:EQ#.;#.;@LWYcm#.;#.;#.;8CO~#.;#.;#.;@LWJU_#.;#.;#.;wWbl#.;#.;#.;8DOXcl#.;#.;#.;8DO#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Q\g}#.;#.;#.;jt~#.;#.;#.;#.;#.;#.;#.;=IT#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;;FR#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWGKL"$$"$$"$%"$%"$$"$$"$$"$$GKL#.;#.;#.;#.;u#.;#.;#.;JV`Q\f#.;#.;#.;my}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;4@L#.;#.;Q\g~#.;#.;#.;jt~#.;#.;#.;#.;#.;#.;#.;*6B#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;>IU#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LWlrs"$$"$$"$$"$$"$$.01RWXRWX.01"$$"$$"$$"$$"$%lrs#.;#.;#.;#.;ku~u#.;#.;#.;KV`R]g#.;#.;#.;lw#.;#.;#.;#.;it|#.;#.;#.;#.;ku~#.;#.;#.;7CO#.;#.;Ydn~#.;#.;#.;jt~#.;#.;#.;#.;#.;#.;#.;*6B#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW#$%#$%#$%;=>x~x~:=>"$%"$$/12"$$"$$#.;#.;#.;#.;NYc~#.;#.;#.;BMXKV`#.;#.;#.;v#.;#.;#.;#.;MXb#.;#.;#.;#.;MXc#.;#.;#.;8CO#.;#.;Zen#.;#.;#.;jt~#.;#.;#.;#.;#.;#.;#.;:=>"$$"$$krs"#$"$$GIJ'2?#.;#.;#.;>IT#.;#.;#.;)4A1=I#.;#.;#.;'2?#.;#.;#.;>IT'2?#.;#.;#.;>IT#.;#.;#.;8CO#.;#.;Zeo#.;#.;#.;jt~#.;#.;#.;#.;p{#.;#.;#.;MXc#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;4@L#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;Ydn#.;#.;@LWHKL#$%#$%lqrkqr"$$"$$GKL#$$"#$GII.:F#.;#.;#.;4@K#.;#.;#.;#.;#.;#.;#.;#.;.:F#.;#.;#.;4@L/:F#.;#.;#.;4?L#.;#.;#.;8CO#.;#.;Zeo#.;#.;#.;jt~#.;#.;#.;#.;R]g#.;#.;#.;p{#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;#.;Ydn#.;#.;@LWlqs#$$#$%"$$"$%krs#$$#$$GII7BN#.;#.;#.;-8D#.;#.;#.;#.;#.;#.;#.;#.;6AM#.;#.;#.;-8D6AM#.;#.;#.;-8E#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hq#.;#.;#.;jt~-8D#.;#.;#.;&2?#.;#.;#.;gr|#.;#.;#.;7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO7CO3>J#.;#.;#.;#.;#.;#.;#.;s~#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;#.;Ydn#.;#.;@LW"$$#$$"$$"$%#$$#$$HJJ@KW#.;#.;#.;'2?9DP#.;#.;#.;gqzq{#.;#.;#.;5@LAKW#.;#.;#.;'2?AKW#.;#.;#.;'2?#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hq#.;#.;#.;jt~ny#.;#.;#.;;FR#.;#.;#.;#.;4@L#.;#.;]hr#.;#.;#.;#.;#.;#.;#.;s~#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;#.;Ydn#.;#.;@LW"$$"$$lqs/12/12kqr"$%.12"$$"$$GJJKV`#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;~LVa#.;#.;#.;#.;LVa#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;]hq#.;#.;#.;jt~#.;#.;#.;#.;it}3>J#.;#.;#.;HS^#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;mxmxmxmxmxmxmxmx]hs#.;#.;#.;&2?mxmyt#.;#.;#.;Ydn#.;#.;@LXkqr"$$:=>GKL"$$"$$TWX:=>"$%kqs"$$"$$FIIVak#.;#.;#.;#.;-8EZdnZen[en[eo[eoZenZdnYdn0;G#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;-8EWak#.;#.;#.;#.;-8DYdnYdnYdnYdnYdnYdnYdnZdnWak#.;#.;#.;#.;-8E[eo[dnZdnZdnZdnZdnZdnZdn0;G#.;#.;FR]#.;#.;#.;jt~T_j#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;it}#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;Wbm#.;#.;@LX"$$"$$_ce"$$#$%aef"$%"$%"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CN#.;#.;Ydn#.;#.;#.;jt~4@L#.;#.;#.;#.;#.;#.;#.;#.;#.;r}#.;#.;#.;@LW#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LX"$$:=>lqrmrs:=>"$%"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;0;G#.;#.;#.;#.;#.;#.;-8D#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;Ydn#.;#.;#.;jt~DO[#.;#.;#.;#.;#.;#.;#.;wEP\#.;#.;#.;R]h#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LXGKL"$$w~w~"$%GKL"$$"$$FII#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;Xbl9DP8COU`i#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;7CO#.;#.;Ydn#.;#.;#.;jt~alv@LW1=IMXczlw#.;#.;#.;FR]x#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;*6C#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;@LW"$%"$$"$%"$%"$$"$$FII7CO#.;#.;Ydn>IU#.;#.;#.;#.;#.;#.;#.;#.;#.;#.;it}#.;#.;#.;amwvvvvvvvvvvvvv:EQ#.;#.;@LW"$%"$$#$$#$%"$%"$%"$$"$$FII7CO#.;#.;Ydnr}#.;MXc@LW3>J*6B:EQWbm#.;#.;#.;Ydo#.;#.;@LW"$$.00#$$#$%.01"$%RVV"$$"$$"$$"$$"#$"$$#$$#$$#$$#$$"#$"#$"#$"$$"$$#$$#$$#$$#$$#$$#$$#$$#$$"$$"$$"$$"$$"$$7CO#.;#.;Ydn"$$SWX"$$#$%RWX"$%"$$"$$"$$"$$"#$"$$#$$#$$#$$#$$"#$"#$"$$#$$#$$#$$#$$#$$#$$#$$#$$#$$#$$#$$"$$"$$"$$"$$"$$SWX"$$"$$RWX"$%"$$.12"$$"$$.12"$%"$$"$$"$$"$$"$%"$%"$$"$$GJJ"$$"$$"$$"$$"$%"$%"$$"$$GJJFJK"$$w~"$$"$%w~"$%FJK"$$"$$GJJ"$$;>?"$%"$%;>?"$%"$$"$$GJJ"$$"$$"$%"$%"$%"$%"$$"$$GJJkqr"$$;>?"$%"$%;>?"$%kqs"$$"$$GJJ"$$"$$krsFJKFJKkrs"$%.01"$$"$$GJJr{"$$"$$"$%"$%"$$"$$GJJq{q{q{q{q{r{r{r{r{r{r{r{r{r{r{r{r{r{kqr"$$"$$"$%"$%kqs"$$"$$GJJt}r{r{~~~~~~~~~~~r{r{r{r{r{r{r{r{r{FJK"$$"$$krskrs"$%"$%FJK"$$"$$vr{~r{r{r{r{kqr"$$"$$;>?;>?"$$"$$kqrvr{r{r{.01"$$"$$;>?xx;>?"$%"$$.01vv}r{r{t~t~r{r{kqr"$$"$%"$%"$%"$$.12SXYSXY.12"$$"$$"$$"$$"$$kqrr{r{r{r{xr{FJK"$%"$%"$$"$$"$$"$$"$$"$$FJKr{ur{r{r{r{vr{xr{r{r{r{r{r{u~r{r{wr{r{r{r{r{r{u~vr{}r{|vr{zv|vr{vr{r{~~~~~~~~t~r{~~~~~~~r{r{r{r{r{vr{r{wr{r{r{wr{vr{r{~r{r{r{~r{vr{r{r{r{r{r{r{r{wr{r{r{r{{r{s{wr{r{xr{r{wxr{xs{wr{wr{wr{dddeg
i hfcbddefgfeeeijih
hhgh
i hhikkkjjjionlklnonm%s/z2{6|:~<>??@AAA@@@ACDFGEDFJLLKKRTTUUWXWVZ\ZZZ]_`accegfdcbdfgfb]Y|WzWyXyX{W{V{UzUzVzWyWyVxVxVvZy]{]z]z^{_{a}c~ddffggffe~fhijkkkmnpppqqqrsttuuuvxz{{zxwvy{{{yxwvwy|~|zwsstvutuvtq|ŀ|wrqstrpqrssqonoqrsuvusrsuxyywu|s{q{s~wzzyvtqrpwu~~Â{}rujrivg}^QD<95.("
@@ -517,483 +517,799 @@ z
-$()&'*..*'(/4654=58?B?CJBACA~@{@yD{IKJ}HxLzHtHsKtNwQxRuVwZy^z`x]s[p]naperhsisiqinmnonpmrmunxn{n}m~kkklmkkjikujgggefigcaaba__abaY]`bbaaaa\Z[ZVUXZZ[ba`^]]\[ZTOOPLMïYʵ_įYMRQRTUSQSūWTPPRM§UST¦TSéURQQRQPQ¦SRRæSǨVʫYˬZˬZʫYʫXʬYɫXƨU¥QOOPQRROQUVSRSUVWX\¦_ç`§a§b©dŬiɯlêgddfdëigëjŭmĬnnooono¯rŴvɸzpllnonnnnpqnnqw{|zwy}~{xyvrsvz{~xwuphd~fb^a\TQLIILMIB;>@AAABCFHNÑRÒLRYXVZ`]K|G{D|@{=|?:4}2}3417+%}
- ǰ ù Ż Ⱦ ɾ ɽ zzzzz{|||}
+$()&'*..*'(/4654=58?B?CJBACA~@{@yD{IKJ}HxLzHtHsKtNwQxRuVwZy^z`x]s[p]naperhsisiqinmnonpmrmunxn{n}m~kkklmkkjikujgggefigcaaba__abaY]`bbaaaa\Z[ZVUXZZ[ba`^]]\[ZTOOPLMïYʵ_įYMRQRTUSQSūWTPPRM§UST¦TSéURQQRQPQ¦SRRæSǨVʫYˬZˬZʫYʫXʬYɫXƨU¥QOOPQRROQUVSRSUVWX\¦_ç`§a§b©dŬiɯlêgddfdëigëjŭmĬnnooono¯rŴvɸzpllnonnnnpqnnqw{|zwy}~{xyvrsvz{~xwuphd~fb^a\TQLIILMIB;>@AAABCFHNÒRÓLSYXVZ`]K}G{D|@{<|=92}/}02/5*$}
DZ ÷ ƺ Ƚ Ⱦ Ⱦ zzzzz{|||}
y{~||}
-}"#$#%+..,./27=?;>8=FJKPKBBC?|B~BzG~MOOQN}NzNyMwMuOuRwZ{^~a~az]t[p\n`pdsguitjrhkljmioitlyo|o}mmlkloqnkhhjogfefgchgecegdaaaa_X\^`ab`\\ZZ[[XWWXXY`^^^^]_`]UQRQMNWı\XPSRTUUTRUǭZĩXTSUSĩZWWWVīWéVSS¨U©UQ§Tβ_ƫXçTçSŧTΰ]ѳ`ΰ]ͯ\̮[ȫW¦SRQOMNOQQRTUTSSUWXXZ^_```aëfƮjëgbabaưl¬iʳqɲqijmnnnmortqponnppprsnkqtw|}xxuwyxwwvuvx{~}ypjhc__[SMIGHKLJC<:9899<>BEIÐKÐBFPUY\a`ULF~A}=~=90z-y/~239,#}{}
}
ƫ õ ŷ Ʒ ǹ zy y y{|~~}}||~}z|y{&!
~! !$*+),5638BFAA?CFIPWHAB@;xCC|GNOOWO~RTQ{MuMtRw\cb^x\s\q]paqdsesdqenhilhmfpgwl~pn~komkmrupjggid`fefjcklhfhjgdca_][^]^ad_XXYZZ[[ZWWXZ\Y[\\]bŴfaZXXTPUVSRRRTWYXVSUūZĪZ§XVXū\ū^é\[ZYWŬZ¨WVĪXŬY¨UƫXڿkʯ[éTĨT¥RͰ\ϲ^ȫWʭY̰\ƫWQSROMNPQOT§V¥U¤T¤TĦWŨXŨYĦYYZ]^__^^bìfcba`aîiƱlҽyʶrcilnppononorromqqqtuom{{y{{quuwxyxvuwy|}wy}xphc_[UPLHEEGIHÖC<8410048;=>?=CNVZ[aiřaTKF>:8/z.|0.0/({{|~
-
- ³±ƴƵ ó̾ w xy{|~~}|xv|w ry
-{ ~!&&$)/2249;<}