From 1e0dbf852d20f71be8795ff09e7c31c1ce83684a Mon Sep 17 00:00:00 2001 From: dingyao Date: Fri, 5 Aug 2022 16:02:18 +0800 Subject: [PATCH] commit free install xts Signed-off-by: dingyao --- ability/ability_runtime/BUILD.gn | 1 + .../ability_runtime/freeinstalltest/BUILD.gn | 71 + .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectdifferentapplication/BUILD.gn | 41 + .../connectdifferentapplication/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 57 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 49 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication1/BUILD.gn | 34 + .../connectfamyapplication1/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication10/BUILD.gn | 34 + .../connectfamyapplication10/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication11/BUILD.gn | 34 + .../connectfamyapplication11/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication2/BUILD.gn | 34 + .../connectfamyapplication2/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 32 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication4/BUILD.gn | 34 + .../connectfamyapplication4/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication5/BUILD.gn | 34 + .../connectfamyapplication5/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication6/BUILD.gn | 34 + .../connectfamyapplication6/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication7/BUILD.gn | 34 + .../connectfamyapplication7/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication8/BUILD.gn | 34 + .../connectfamyapplication8/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../connectfamyapplication9/BUILD.gn | 34 + .../connectfamyapplication9/Test.json | 3 + .../entry/src/main/config.json | 81 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 53 + .../main/resources/base/element/string.json | 20 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../freeinstallconnectabilityfatest/BUILD.gn | 34 + .../freeinstallconnectabilityfatest/Test.json | 43 + .../entry/src/main/config.json | 187 +++ .../entry/src/main/ets/MainAbility/app.ets | 28 + .../src/main/ets/MainAbility/pages/index.ets | 63 + .../MainAbility/test/ConnectAbilityTest.ets | 628 +++++++++ .../MainAbility/test/ConnectAbilityTest1.ets | 202 +++ .../main/ets/MainAbility/test/List.test.ets | 24 + .../test/connectAbilityTest_PA.ets | 442 ++++++ .../entry/src/main/ets/MainAbility2/app.ets | 32 + .../src/main/ets/MainAbility2/pages/index.ets | 32 + .../src/main/ets/ServiceAbility/service.ts | 94 ++ .../src/main/ets/ServiceAbility10/service.ts | 93 ++ .../src/main/ets/ServiceAbility11/service.ts | 96 ++ .../src/main/ets/ServiceAbility2/service.ts | 94 ++ .../src/main/ets/ServiceAbility3/service.ts | 93 ++ .../src/main/ets/ServiceAbility4/service.ts | 91 ++ .../src/main/ets/ServiceAbility5/service.ts | 91 ++ .../src/main/ets/ServiceAbility6/service.ts | 94 ++ .../src/main/ets/ServiceAbility7/service.ts | 93 ++ .../src/main/ets/ServiceAbility8/service.ts | 93 ++ .../src/main/ets/ServiceAbility9/service.ts | 93 ++ .../ets/TestRunner/OpenHarmonyTestRunner.ts | 80 ++ .../main/resources/base/element/string.json | 68 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication0/BUILD.gn | 41 + .../connectstagemyapplication0/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication1/BUILD.gn | 41 + .../connectstagemyapplication1/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../ServiceAbility_feature.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication2/BUILD.gn | 41 + .../connectstagemyapplication2/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 57 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication3/BUILD.gn | 41 + .../connectstagemyapplication3/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../ServiceAbility_feature.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication4/BUILD.gn | 41 + .../connectstagemyapplication4/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication5/BUILD.gn | 41 + .../connectstagemyapplication5/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/SeriveAbility/SeriveAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication6/BUILD.gn | 41 + .../connectstagemyapplication6/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication7/BUILD.gn | 41 + .../connectstagemyapplication7/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../connectstagemyapplication8/BUILD.gn | 41 + .../connectstagemyapplication8/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 61 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 47 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../BUILD.gn | 41 + .../Test.json | 42 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 64 + .../src/main/ets/MainAbility2/MainAbility2.ts | 58 + .../main/ets/ServiceAbility/ServiceAbility.ts | 87 ++ .../ets/ServiceAbility2/ServiceAbility2.ts | 86 ++ .../ets/ServiceAbility3/ServiceAbility3.ts | 84 ++ .../ets/ServiceAbility4/ServiceAbility4.ts | 87 ++ .../ets/ServiceAbility5/ServiceAbility5.ts | 86 ++ .../ets/ServiceAbility6/ServiceAbility6.ts | 86 ++ .../ets/ServiceAbility7/ServiceAbility7.ts | 89 ++ .../ets/ServiceAbility8/ServiceAbility8.ts | 86 ++ .../ets/ServiceAbility9/ServiceAbility9.ts | 86 ++ .../ets/TestRunner/OpenHarmonyTestRunner.ts | 74 + .../entry/src/main/ets/pages/index.ets | 53 + .../entry/src/main/ets/pages/index2.ets | 31 + .../src/main/ets/test/ConnectAbilityTest.ets | 748 ++++++++++ .../main/ets/test/ConnectAbilityTest_Ext.ets | 433 ++++++ .../entry/src/main/ets/test/ListTest.ets | 24 + .../entry/src/main/module.json | 133 ++ .../main/resources/base/element/string.json | 96 ++ .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 6 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../mockservice/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../freeinstalltest/mockservice/BUILD.gn | 41 + .../freeinstalltest/mockservice/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 490 +++++++ .../entry/src/main/ets/pages/index.ets | 32 + .../mockservice/entry/src/main/module.json | 48 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../mockservice/signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../mockservicetimeout/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../mockservicetimeout/BUILD.gn | 41 + .../mockservicetimeout/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 450 ++++++ .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 48 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationfaentry/BUILD.gn | 34 + .../atomizationfaentry/Test.json | 3 + .../entry/src/main/config.json | 96 ++ .../entry/src/main/ets/MainAbility/app.ets | 46 + .../model/getRemoteDeviceModel.ets | 67 + .../src/main/ets/MainAbility/pages/index.ets | 102 ++ .../src/main/ets/MainAbility/pages/second.ets | 43 + .../src/main/ets/MainAbility/pages/third.ets | 386 +++++ .../src/main/ets/ServiceAbility/service.ts | 26 + .../main/resources/base/element/float.json | 124 ++ .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationfahm2/BUILD.gn | 32 + .../atomizationfahm2/Test.json | 3 + .../entry/src/main/config.json | 63 + .../entry/src/main/ets/MainAbility/app.ets | 31 + .../src/main/ets/MainAbility/pages/index.ets | 145 ++ .../src/main/ets/MainAbility/pages/second.ets | 43 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationfahm4/BUILD.gn | 32 + .../atomizationfahm4/Test.json | 3 + .../entry/src/main/config.json | 63 + .../entry/src/main/ets/MainAbility/app.ets | 31 + .../src/main/ets/MainAbility/pages/index.ets | 53 + .../src/main/ets/MainAbility/pages/second.ets | 44 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../famyapplication1/BUILD.gn | 32 + .../famyapplication1/Test.json | 3 + .../entry/src/main/config.json | 72 + .../entry/src/main/ets/MainAbility/app.ets | 38 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../freeinstallstartabilityfatest/BUILD.gn | 34 + .../freeinstallstartabilityfatest/Test.json | 36 + .../entry/src/main/config.json | 139 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 85 ++ .../main/ets/MainAbility/test/List.test.ets | 22 + .../MainAbility/test/StartAbility.test.ets | 1126 +++++++++++++++ .../MainAbility/test/StartAbility.test2.ets | 236 ++++ .../src/main/ets/MainAbility/test/Utils.ets | 130 ++ .../entry/src/main/ets/PageAbility/app.ets | 34 + .../src/main/ets/PageAbility/pages/index.ets | 33 + .../src/main/ets/ServiceAbility/service.ts | 64 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 ++ .../main/resources/base/element/string.json | 28 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../BUILD.gn | 32 + .../Test.json | 34 + .../entry/src/main/config.json | 116 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 85 ++ .../main/ets/MainAbility/test/List.test.ets | 21 + .../MainAbility/test/StartAbility.test.ets | 210 +++ .../src/main/ets/MainAbility/test/Utils.ets | 130 ++ .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 ++ .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationresulta/BUILD.gn | 32 + .../atomizationresulta/Test.json | 3 + .../entry/src/main/config.json | 73 + .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 53 + .../src/main/ets/MainAbility/pages/second.ets | 44 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/a1.jpg | Bin 0 -> 157973 bytes .../src/main/resources/base/media/a2.jpg | Bin 0 -> 157973 bytes .../src/main/resources/base/media/a3.jpg | Bin 0 -> 157973 bytes .../src/main/resources/base/media/a4.jpg | Bin 0 -> 157973 bytes .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationresultfaentry/BUILD.gn | 32 + .../atomizationresultfaentry/Test.json | 3 + .../entry/src/main/config.json | 83 ++ .../entry/src/main/ets/MainAbility/app.ets | 59 + .../model/getRemoteDeviceModel.ets | 67 + .../src/main/ets/MainAbility/pages/index.ets | 102 ++ .../src/main/ets/MainAbility/pages/second.ets | 43 + .../src/main/ets/MainAbility/pages/third.ets | 343 +++++ .../src/main/ets/ServiceAbility/service.ts | 25 + .../main/resources/base/element/float.json | 124 ++ .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationresultfahm1/BUILD.gn | 32 + .../atomizationresultfahm1/Test.json | 3 + .../entry/src/main/config.json | 63 + .../entry/src/main/ets/MainAbility/app.ets | 44 + .../src/main/ets/MainAbility/pages/index.ets | 88 ++ .../src/main/ets/MainAbility/pages/second.ets | 43 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationresultfahm2/BUILD.gn | 32 + .../atomizationresultfahm2/Test.json | 3 + .../entry/src/main/config.json | 63 + .../entry/src/main/ets/MainAbility/app.ets | 44 + .../src/main/ets/MainAbility/pages/index.ets | 145 ++ .../src/main/ets/MainAbility/pages/second.ets | 43 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../faresultmyapplication1/BUILD.gn | 32 + .../faresultmyapplication1/Test.json | 3 + .../entry/src/main/config.json | 73 + .../entry/src/main/ets/MainAbility/app.ets | 45 + .../src/main/ets/MainAbility/pages/index.ets | 32 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../BUILD.gn | 32 + .../Test.json | 37 + .../entry/src/main/config.json | 131 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 85 ++ .../main/ets/MainAbility/test/List.test.ets | 22 + .../test/StartAbilityForResult.test.ets | 973 +++++++++++++ .../test/StartAbilityForResult2.test.ets | 227 +++ .../src/main/ets/MainAbility/test/Utils.ets | 130 ++ .../entry/src/main/ets/PageAbility/app.ets | 34 + .../src/main/ets/PageAbility/pages/index.ets | 32 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 ++ .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../BUILD.gn | 32 + .../Test.json | 34 + .../entry/src/main/config.json | 116 ++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 85 ++ .../main/ets/MainAbility/test/List.test.ets | 21 + .../test/StartAbilityForResult.test.ets | 184 +++ .../src/main/ets/MainAbility/test/Utils.ets | 130 ++ .../ets/TestRunner/OpenHarmonyTestRunner.ts | 78 ++ .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationresultstageentry/BUILD.gn | 41 + .../atomizationresultstageentry/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 64 + .../entry/src/main/ets/pages/index.ets | 87 ++ .../entry/src/main/module.json | 37 + .../main/resources/base/element/float.json | 128 ++ .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationresultstagehm2/BUILD.gn | 41 + .../atomizationresultstagehm2/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 64 + .../entry/src/main/ets/pages/index.ets | 155 +++ .../entry/src/main/ets/pages/second.ets | 32 + .../entry/src/main/module.json | 37 + .../main/resources/base/element/float.json | 128 ++ .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationresultstagehnm2/BUILD.gn | 41 + .../atomizationresultstagehnm2/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 64 + .../entry/src/main/ets/pages/index.ets | 155 +++ .../entry/src/main/ets/pages/second.ets | 32 + .../entry/src/main/module.json | 37 + .../main/resources/base/element/float.json | 128 ++ .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../BUILD.gn | 41 + .../Test.json | 36 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 51 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 74 + .../entry/src/main/ets/pages/index.ets | 74 + .../entry/src/main/ets/test/ListTest.ets | 21 + .../main/ets/test/StartAbilityForResult.ets | 529 +++++++ .../entry/src/main/ets/test/Utils.ets | 47 + .../entry/src/main/module.json | 51 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../stageresultmyapplication1/BUILD.gn | 41 + .../stageresultmyapplication1/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility1/MainAbility1.ts | 64 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 37 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 17 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../BUILD.gn | 41 + .../Test.json | 33 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 51 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 74 + .../entry/src/main/ets/pages/index.ets | 74 + .../entry/src/main/ets/test/ListTest.ets | 21 + .../main/ets/test/StartAbilityForResult.ets | 135 ++ .../entry/src/main/ets/test/Utils.ets | 47 + .../entry/src/main/module.json | 51 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationstageentry/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationstageentry/BUILD.gn | 41 + .../atomizationstageentry/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../main/ets/ServiceAbility/ServiceAbility.ts | 33 + .../entry/src/main/ets/pages/index.ets | 39 + .../js/ServiceAbility/pages/index/index.css | 19 + .../js/ServiceAbility/pages/index/index.hml | 7 + .../js/ServiceAbility/pages/index/index.json | 6 + .../entry/src/main/module.json | 66 + .../main/resources/base/element/string.json | 24 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/form_config.json | 42 + .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationstagehm2/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationstagehm2/BUILD.gn | 41 + .../atomizationstagehm2/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 51 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../atomizationstagehm4/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../atomizationstagehm4/BUILD.gn | 41 + .../atomizationstagehm4/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 37 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 19 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../freeinstallstartabilitystagetest/BUILD.gn | 41 + .../Test.json | 36 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/FormAbility/FormAbility.ts | 52 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../src/main/ets/MainAbility1/MainAbility1.ts | 50 + .../main/ets/ServiceAbility/ServiceAbility.ts | 63 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 75 + .../entry/src/main/ets/pages/index.ets | 56 + .../entry/src/main/ets/pages/second.ets | 33 + .../entry/src/main/ets/test/ListTest.ets | 20 + .../src/main/ets/test/StartAbilityTest.ets | 1240 +++++++++++++++++ .../js/ServiceAbility/pages/index/index.css | 34 + .../js/ServiceAbility/pages/index/index.hml | 7 + .../js/ServiceAbility/pages/index/index.json | 6 + .../entry/src/main/module.json | 73 + .../main/resources/base/element/string.json | 40 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/form_config.json | 42 + .../resources/base/profile/main_pages.json | 6 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../stagemyapplication1/AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../stagemyapplication1/BUILD.gn | 41 + .../stagemyapplication1/Test.json | 3 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../entry/src/main/ets/pages/index.ets | 32 + .../entry/src/main/module.json | 37 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes .../AppScope/app.json | 20 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes .../BUILD.gn | 41 + .../Test.json | 34 + .../src/main/ets/Application/AbilityStage.ts | 22 + .../src/main/ets/MainAbility/MainAbility.ts | 49 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 75 + .../entry/src/main/ets/pages/index.ets | 57 + .../entry/src/main/ets/test/ListTest.ets | 20 + .../src/main/ets/test/StartAbilityTest.ets | 205 +++ .../entry/src/main/module.json | 37 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 + .../signature/openharmony_sx.p7b | Bin 0 -> 3443 bytes 648 files changed, 28674 insertions(+) create mode 100644 ability/ability_runtime/freeinstalltest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication10/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication11/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication4/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication5/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication6/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication7/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication8/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication9/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest1.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/connectAbilityTest_PA.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility10/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility11/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility2/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility3/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility4/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility5/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility6/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility7/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility8/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility9/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication0/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/ets/ServiceAbility_feature/ServiceAbility_feature.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/ets/ServiceAbility_feature/ServiceAbility_feature.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication3/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication4/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/ets/SeriveAbility/SeriveAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication5/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication6/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication7/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication8/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility2/MainAbility2.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility2/ServiceAbility2.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility3/ServiceAbility3.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility4/ServiceAbility4.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility5/ServiceAbility5.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility6/ServiceAbility6.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility7/ServiceAbility7.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility8/ServiceAbility8.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility9/ServiceAbility9.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index2.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest_Ext.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ListTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservice/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/mockservicetimeout/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/model/getRemoteDeviceModel.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/third.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/float.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test2.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a1.jpg create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a2.jpg create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a3.jpg create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a4.jpg create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/model/getRemoteDeviceModel.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/third.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/ServiceAbility/service.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/float.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/faresultmyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult2.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/app.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/float.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/float.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/float.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/ListTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/StartAbilityForResult.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/ets/MainAbility1/MainAbility1.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/stageresultmyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityForResult.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/Utils.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.css create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.hml create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/profile/form_config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm2/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstagehm4/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/FormAbility/FormAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility1/MainAbility1.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/second.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/ListTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/StartAbilityTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.css create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.hml create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/profile/form_config.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/stagemyapplication1/signature/openharmony_sx.p7b create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/AppScope/app.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/AppScope/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/AppScope/resources/base/media/app_icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/BUILD.gn create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/Test.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/pages/index.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityTest.ets create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/module.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/element/string.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/signature/openharmony_sx.p7b diff --git a/ability/ability_runtime/BUILD.gn b/ability/ability_runtime/BUILD.gn index 22edec3e9..1dc531055 100644 --- a/ability/ability_runtime/BUILD.gn +++ b/ability/ability_runtime/BUILD.gn @@ -43,6 +43,7 @@ group("ability_runtime") { "faapicover:faapicover", "featureability:featureability", "formmanager:formmanager", + "freeinstalltest:freeinstalltest", "killprocesswithaccountstage:killprocesswithaccountstage", "newwant:newwant", "non_concurrent:non_concurrent", diff --git a/ability/ability_runtime/freeinstalltest/BUILD.gn b/ability/ability_runtime/freeinstalltest/BUILD.gn new file mode 100644 index 000000000..2553b8661 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/BUILD.gn @@ -0,0 +1,71 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//test/xts/tools/build/suite.gni") + +group("freeinstalltest") { + testonly = true + if (is_standard_system) { + deps = [ + "connectabilityfatest/connectdifferentapplication:ConnectDifferentApplication", + "connectabilityfatest/connectfamyapplication1:ConnectFaMyApplication1", + "connectabilityfatest/connectfamyapplication10:ConnectFaMyApplication10", + "connectabilityfatest/connectfamyapplication11:ConnectFaMyApplication11", + "connectabilityfatest/connectfamyapplication2:ConnectFaMyApplication2", + "connectabilityfatest/connectfamyapplication4:ConnectFaMyApplication4", + "connectabilityfatest/connectfamyapplication5:ConnectFaMyApplication5", + "connectabilityfatest/connectfamyapplication6:ConnectFaMyApplication6", + "connectabilityfatest/connectfamyapplication7:ConnectFaMyApplication7", + "connectabilityfatest/connectfamyapplication8:ConnectFaMyApplication8", + "connectabilityfatest/connectfamyapplication9:ConnectFaMyApplication9", + "connectabilityfatest/freeinstallconnectabilityfatest:FreeInstallConnectAbilityFaTest", + "connectabilitystagetest/connectstagemyapplication0:ConnectStageMyApplication0", + "connectabilitystagetest/connectstagemyapplication1:ConnectStageMyApplication1", + "connectabilitystagetest/connectstagemyapplication2:ConnectStageMyApplication2", + "connectabilitystagetest/connectstagemyapplication3:ConnectStageMyApplication3", + "connectabilitystagetest/connectstagemyapplication4:ConnectStageMyApplication4", + "connectabilitystagetest/connectstagemyapplication5:ConnectStageMyApplication5", + "connectabilitystagetest/connectstagemyapplication6:ConnectStageMyApplication6", + "connectabilitystagetest/connectstagemyapplication7:ConnectStageMyApplication7", + "connectabilitystagetest/connectstagemyapplication8:ConnectStageMyApplication8", + "connectabilitystagetest/freeinstallconnectabilitystagetest:FreeInstallConnectAbilityStageTest", + "mockservice:MockService", + "mockservicetimeout:MockServiceTimeout", + "startabilityfatest/atomizationfaentry:AtomizationFaEntry", + "startabilityfatest/atomizationfahm2:AtomizationFaHm2", + "startabilityfatest/atomizationfahm4:AtomizationFaHm4", + "startabilityfatest/famyapplication1:FaMyApplication1", + "startabilityfatest/freeinstallstartabilityfatest:FreeInstallStartAbilityFaTest", + "startabilityfatest/startabilitynotargetbundlelistfatest:StartAbilityNoTargetBundleListFaTest", + "startabilityforresultfatest/atomizationresulta:AtomizationResultA", + "startabilityforresultfatest/atomizationresultfaentry:AtomizationResultFaEntry", + "startabilityforresultfatest/atomizationresultfahm1:AtomizationResultFaHm1", + "startabilityforresultfatest/atomizationresultfahm2:AtomizationResultFaHm2", + "startabilityforresultfatest/faresultmyapplication1:FaResultMyApplication1", + "startabilityforresultfatest/freeinstallstartabilityforresultfatest:FreeInstallStartAbilityForResultFaTest", + "startabilityforresultfatest/startabilityforresultnotargetfatest:StartAbilityForResultNoTargetFaTest", + "startabilityforresultstagetest/atomizationresultstageentry:AtomizationResultStageEntry", + "startabilityforresultstagetest/atomizationresultstagehm2:AtomizationResultStageHm2", + "startabilityforresultstagetest/atomizationresultstagehnm2:AtomizationResultStageHnm2", + "startabilityforresultstagetest/freeinstallstartabilityforresultstagetest:FreeInstallStartAbilityForResultStageTest", + "startabilityforresultstagetest/stageresultmyapplication1:StageResultMyApplication1", + "startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest:StartAbilityForResultNoTargetBundleListStageTest", + "startabilitystagetest/atomizationstageentry:AtomizationStageEntry", + "startabilitystagetest/atomizationstagehm2:AtomizationStageHm2", + "startabilitystagetest/atomizationstagehm4:AtomizationStageHm4", + "startabilitystagetest/freeinstallstartabilitystagetest:FreeInstallStartAbilityStageTest", + "startabilitystagetest/stagemyapplication1:StageMyApplication1", + "startabilitystagetest/startabilitynotargetbundleliststagetest:StartAbilityNoTargetBundleListStageTest", + ] + } +} diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/app.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/app.json new file mode 100644 index 000000000..e9ff23fb9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/app.json @@ -0,0 +1,20 @@ +{ + "app": { + "bundleName": "com.example.different.hmservice", + "vendor": "huawei", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "description": "description_application", + "distributedNotificationEnabled": true, + "keepAlive": true, + "singleUser": true, + "minAPIVersion": 9, + "targetAPIVersion": 9, + "car": { + "apiCompatibleVersion": 9, + "singleUser": false + } + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..ca7865286 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "different" + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/media/app_icon.png b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('[Demo] myapp2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('[Demo] myapp2 terminateself failed. Cause: ' + error); + }) + }, 3200); + } + + onBackground() { + // Ability has back to background + console.log("[Demo] diffentry MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/ServiceAbility/ServiceAbility.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/ServiceAbility/ServiceAbility.ts new file mode 100644 index 000000000..9cd0c5abe --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/ServiceAbility/ServiceAbility.ts @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from "@ohos.application.ServiceExtensionAbility" +import rpc from '@ohos.rpc'; + +class StubTest extends rpc.RemoteObject { + constructor(des) { + super(des) + } + + onRemoteRequest(code, data, reply, option) { + console.info('ServiceAbility feature onRemoteRequest'); + if (code === 1) { + let op1 = data.readInt(); + let op2 = data.readInt(); + reply.writeInt(op1 + op2); + console.info('ServiceAbility feature op1:' + op1 + ' op2:' + op2); + } + return true; + } +} +export default class ServiceAbility extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ServiceAbility different onCreate'); + } + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ServiceAbility different onRequest'); + } + onConnect(want) { + console.info('onConnect, want:' + want.abilityName); + console.info('ServiceAbility different onConnect'); + console.info('stage_connectAbility connect different success'); + return new StubTest("test"); + } + onDisconnect(want) { + console.info('onDisconnect, want:' + want.abilityName); + console.info('ServiceAbility different onDisconnect'); + } + onReconnect(want) { + console.info('onReconnect, want:' + want.abilityName); + console.info('ServiceAbility different onReconnect'); + } + onDestroy() { + console.info('ServiceAbility different onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..977d8dd2a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/ets/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World different' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/module.json new file mode 100644 index 000000000..8f91deeb5 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/module.json @@ -0,0 +1,49 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "orientation": "portrait", + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "com.example.different.ServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_FormAbility_label", + "description": "$string:form_FormAbility_desc", + "type": "service", + "visible": true, + "icon": "$media:icon" + + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..b8416b237 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "form_FormAbility_desc", + "value": "form_description" + }, + { + "name": "form_FormAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectdifferentapplication/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('[Demo] myapp2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('[Demo] myapp2 terminateself failed. Cause: ' + error); + }) + }, 3200); + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..7f010fbe8 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello myapp2' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/ServiceAbility/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/ServiceAbility/service.ts new file mode 100644 index 000000000..716e96e3b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/ets/ServiceAbility/service.ts @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import rpc from '@ohos.rpc'; + +class StubTest extends rpc.RemoteObject { + constructor(des) { + super(des) + } + + onRemoteRequest(code, data, reply, option) { + console.info('ServiceAbility myapp2 onRemoteRequest'); + if (code === 1) { + let op1 = data.readInt(); + let op2 = data.readInt(); + reply.writeInt(op1 + op2); + console.info('ServiceAbility myapp2 op1:' + op1 + ' op2:' + op2); + } + return true; + } +} + +export default { + onStart() { + console.info('ServiceAbility myapp2 onStart'); + }, + onStop() { + console.info('ServiceAbility myapp2 onStop'); + }, + onCommand(want, startId) { + console.info('ServiceAbility myapp2 onCommand'); + }, + onConnect(want) { + console.info('ServiceAbility myapp2 onConnect'); + console.info('featureAbility_connectAbility connect myapp2 Servcie_feature success'); + return new StubTest("1"); + }, + onDisConnect(want) { + console.info('ServiceAbility myapp2 onDisConnect'); + }, +}; diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..6fee75492 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "myapplication2_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "ServiceAbility_desc", + "value": "hap sample empty service" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/connectabilityfatest/connectfamyapplication2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/MockService.hap", + "ConnectFaMyApplication1.hap -> /data/test/ConnectFaMyApplication1.hap", + "ConnectFaMyApplication2.hap -> /data/test/ConnectFaMyApplication2.hap", + "ConnectFaMyApplication4.hap -> /data/test/ConnectFaMyApplication4.hap", + "ConnectFaMyApplication5.hap -> /data/test/ConnectFaMyApplication5.hap", + "ConnectFaMyApplication6.hap -> /data/test/ConnectFaMyApplication6.hap", + "ConnectFaMyApplication7.hap -> /data/test/ConnectFaMyApplication7.hap", + "ConnectFaMyApplication8.hap -> /data/test/ConnectFaMyApplication8.hap", + "ConnectFaMyApplication9.hap -> /data/test/ConnectFaMyApplication9.hap", + "ConnectFaMyApplication10.hap -> /data/test/ConnectFaMyApplication10.hap", + "ConnectFaMyApplication11.hap -> /data/test/ConnectFaMyApplication11.hap", + "ConnectDifferentApplication.hap -> /data/test/ConnectDifferentApplication.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/config.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/config.json new file mode 100644 index 000000000..02cfb86b4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/config.json @@ -0,0 +1,187 @@ +{ + "app": { + "vendor": "example", + "bundleName": "com.example.myapplication.hmservice", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 8, + "releaseType": "Release", + "target": 8 + } + }, + "deviceConfig": {}, + "module": { + "mainAbility": ".MainAbility", + "deviceType": [ + "phone", + "tablet" + ], + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "formsEnabled": false, + "label": "$string:MainAbility_label", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "srcPath": "MainAbility2", + "name": ".MainAbility2", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility2_desc", + "formsEnabled": false, + "label": "$string:MainAbility2_label", + "type": "page", + "launchType": "standard" + }, + { + "srcPath": "ServiceAbility", + "name": ".ServiceAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility2", + "name": ".ServiceAbility2", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility2_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility3", + "name": ".ServiceAbility3", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility3_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility4", + "name": ".ServiceAbility4", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility4_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility5", + "name": ".ServiceAbility5", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility5_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility6", + "name": ".ServiceAbility6", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility6_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility7", + "name": ".ServiceAbility7", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility7_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility8", + "name": ".ServiceAbility8", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility8_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility9", + "name": ".ServiceAbility9", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility9_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility10", + "name": ".ServiceAbility10", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility10_desc", + "type": "service" + }, + { + "srcPath": "ServiceAbility11", + "name": ".ServiceAbility11", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility11_desc", + "type": "service" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "package": "com.example.myapplication", + "srcPath": "", + "name": ".entry", + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility2", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/app.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..b8268c790 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import commonEvent from '@ohos.commonEvent' + +export default { + onCreate() { + console.info('Application onCreate') + commonEvent.publish("test_data", () => { + console.log("freeInstall commonEvent.publish success!") + }); + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..3efa07583 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,63 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import file from '@system.file'; +import {Core, ExpectExtend, ReportExtend} from "deccjsunit/index.ets"; +import testsuite from "../test/List.test"; +import featureAbility from "@ohos.ability.featureAbility"; +@Entry +@Component +struct Index { + @State message: string = 'Hello World' + + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + console.info('parameters---->' + JSON.stringify(Want.parameters)); + Want.parameters.timeout = 10000; + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest.ets new file mode 100644 index 000000000..9e6e844df --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest.ets @@ -0,0 +1,628 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import rpc from '@ohos.rpc'; +import featureAbility from '@ohos.ability.featureAbility'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import abilityManager from '@ohos.application.abilityManager'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + + +export default function ConnectAbilityTest() { + var TAG = ""; + var Tempassert = ""; + var abilityDelegator = undefined + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + describe('FreeInstall_FA_ConnectAbility', function () { + beforeAll(async function (done) { + console.info("FreeInstall_FA_ConnectAbility before all called"); + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + console.info(TAG + " abilityDelegator : " + JSON.stringify(abilityDelegator)); + abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + abilityDelegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + abilityDelegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("FreeInstall_FA_ConnectAbility after each called"); + Tempassert = "" + await sleep(1000); + done(); + }); + + function tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } + + async function connectabillity(msg, request) { + console.info(msg + "START"); + let options = { + onConnect: function (element, proxy) { + console.info("FreeInstall_FA_ConnectAbility onConnect success!!!") + console.info(msg + " onConnect success!!! "); + console.info(msg + " onConnect: " + JSON.stringify(element)); + console.info(msg + " onConnect: " + JSON.stringify(proxy)); + if (proxy == null) { + console.error("FreeInstall_FA_ConnectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + Tempassert = "onConnect"; + tips("连接成功"); + }, + onDisconnect: function (element) { + console.info("FreeInstall_FA_ConnectAbility onDisconnect success!!!") + console.info(msg + " onDisconnect success!!!"); + console.info(msg + " onDisconnect: " + JSON.stringify(element)); + Tempassert = "onDisconnect"; + tips("连接断开"); + }, + onFailed: function (code) { + console.info("FreeInstall_FA_ConnectAbility onFailed!!!") + console.info(msg + " onFailed!!! "); + console.info(msg + " onFailed: " + JSON.stringify(code)); + Tempassert = "onFailed"; + tips("连接失败"); + } + } + let connection = await featureAbility.connectAbility(request, options); + console.info(msg + "request:" + JSON.stringify(request)); + console.info(msg + "options:" + JSON.stringify(options)); + console.info(msg + "connection=" + JSON.stringify(connection)); + console.info(msg + "END"); + } + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0100 + * @tc.name Pass in the local deviceid,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_0100", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0100-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0100"; + var cmd4 = "cp data/test/ConnectFaMyApplication6.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps" + + "/entry/files"; + abilityDelegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info(TAG + " executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var deviceid = "0"; + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceid:' + JSON.stringify(data.ability.deviceId)); + deviceid = data.ability.deviceId; + }) + await sleep(500); + var request1 = { + "deviceId": deviceid, + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication6.ServiceAbility", + "moduleName": "myapplication6", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request1); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_0100-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0200 + * @tc.name Pass in the local deviceid,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_0200", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0200-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0200"; + var cmdapp10 = "bm install -p data/test/ConnectFaMyApplication10.hap"; + abilityDelegator.executeShellCommand(cmdapp10, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var deviceid = "0"; + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceid:' + JSON.stringify(data.ability.deviceId)); + deviceid = data.ability.deviceId; + }) + await sleep(500); + var request2 = { + "deviceId": deviceid, + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication10.ServiceAbility", + "moduleName": "myapplication10", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request2); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_0200-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0300 + * @tc.name Deviceid is empty,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_0300", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0300-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0300"; + var cmd3 = "cp data/test/ConnectFaMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + abilityDelegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var request3 = { + "deviceId": "", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request3); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_0300-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0400 + * @tc.name Deviceid is empty,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_0400", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0400-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0400"; + var cmdapp11 = "bm install -p data/test/ConnectFaMyApplication11.hap"; + abilityDelegator.executeShellCommand(cmdapp11, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var request4 = { + "deviceId": "", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication11.ServiceAbility", + "moduleName": "myapplication11", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request4); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_0400-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0500 + * @tc.name The bundleName passed in is different from the local + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_0500", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0500-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0500"; + var request5 = { + "bundleName": "com.example.different.hmservice", + "abilityName": "com.example.different.ServiceAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request5); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_0500-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0600 + * @tc.name Pass in an empty bundleName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_0600", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0600-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0600"; + var request6 = { + "bundleName": "", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request6); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_0600-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0700 + * @tc.name Pass in an empty abilityName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_0700", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0700-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0700"; + var request7 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request7); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_0700-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0800 + * @tc.name Incorrect deviceid passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_0800", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0800-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0800"; + var request8 = { + "deviceId": "xxxxxx", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication2.ServiceAbility", + "moduleName": "myapplication2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request8); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_0800-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_0900 + * @tc.name Incorrect bundleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_0900", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_0900-------------"); + TAG = "FreeInstall_FA_ConnectAbility_0900"; + var request9 = { + "bundleName": "com.example.xxx.hmservice", + "abilityName": "com.example.myapplication2.ServiceAbility", + "moduleName": "myapplication2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request9); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_0900-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1000 + * @tc.name Incorrect flags passed in,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1000", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1000-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1000"; + var request10 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication2.ServiceAbility", + "moduleName": "myapplication2", + "flags": 1111111, + } + connectabillity(TAG, request10); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1000-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1100 + * @tc.name Incorrect flags passed in,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_1100", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1100-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1100"; + var cmdapp2 = "bm install -p data/test/ConnectFaMyApplication2.hap"; + abilityDelegator.executeShellCommand(cmdapp2, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request11 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication2.ServiceAbility", + "moduleName": "myapplication2", + "flags": "11", + } + connectabillity(TAG, request11); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_1000-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1200 + * @tc.name No atomic service under path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1200", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1200-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1200"; + var cmdrm = "rm -r /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/*"; + abilityDelegator.executeShellCommand(cmdrm, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var request12 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request12); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1200-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1300 + * @tc.name The application is not in the foreground [start MainAbility2 first, then connect] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1300", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1300-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1300"; + var str = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.MainAbility2", + } + } + console.info(TAG + " startmainability2 str: " + JSON.stringify(str)); + featureAbility.startAbility(str) + .then((data) => { + console.info(TAG + " startmainability2 successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startmainability2 failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request13 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request13); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1300-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1400 + * @tc.name The application is not in the foreground [start myapp2 first, then connect] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1400", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1400-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1400"; + var str = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication2.MainAbility", + } + } + console.info(TAG + " startmyapp2 str: " + JSON.stringify(str)); + featureAbility.startAbility(str) + .then((data) => { + console.info(TAG + " startmyapp2 successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startmyapp2 failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request14 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request14); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1400-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1700 + * @tc.name Do not pass flags, connect to the service of another project + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_1700", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1700-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1700"; + var cmddif = "bm install -p data/test/ConnectDifferentApplication.hap"; + abilityDelegator.executeShellCommand(cmddif, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request17 = { + "bundleName": "com.example.different.hmservice", + "abilityName": "com.example.different.ServiceAbility", + "moduleName": "entry", + } + connectabillity(TAG, request17); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_1700-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1800 + * @tc.name Incorrect moduleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1800", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1800-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1800"; + var request18 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "xxxxx", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request18); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1800-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1900 + * @tc.name The target is atomized as hapA, and hapB is placed under the path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1900", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1900-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1900"; + var cmdmyapp5 = "cp data/test/ConnectFaMyApplication5.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + abilityDelegator.executeShellCommand(cmdmyapp5, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request19 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication1.ServiceAbility_feature", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request19); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1900-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_2000 + * @tc.name Pass in parameters + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_2000", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_2000-------------"); + TAG = "FreeInstall_FA_ConnectAbility_2000"; + var cmdmyapp5 = "cp data/test/ConnectFaMyApplication5.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + abilityDelegator.executeShellCommand(cmdmyapp5, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request20 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication5.ServiceAbility5", + "moduleName": "myapplication5", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + "parameters": { + "name": 1111, "key1": "value1", "site": "nice to meet you!" + }, + } + connectabillity(TAG, request20); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_2000-------------"); + done(); + }, 2000); + }); + } + ) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest1.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest1.ets new file mode 100644 index 000000000..d3232ec90 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/ConnectAbilityTest1.ets @@ -0,0 +1,202 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import rpc from '@ohos.rpc'; +import featureAbility from '@ohos.ability.featureAbility'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + + +export default function ConnectAbilityTest1() { + var TAG = ""; + var Tempassert = ""; + var abilityDelegator = undefined + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + describe('FreeInstall_FA_ConnectAbility', function () { + beforeAll(async function (done) { + console.info("FreeInstall_FA_ConnectAbility before all called"); + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + console.info(TAG + " abilityDelegator : " + JSON.stringify(abilityDelegator)); + abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + abilityDelegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + abilityDelegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("FreeInstall_FA_ConnectAbility after each called"); + Tempassert = "" + await sleep(1000); + done(); + }); + + function tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } + + async function connectabillity(msg, request) { + console.info(msg + "START"); + let options = { + onConnect: function (element, proxy) { + console.info("FreeInstall_FA_ConnectAbility onConnect success!!!") + console.info(msg + " onConnect success!!! "); + console.info(msg + " onConnect: " + JSON.stringify(element)); + console.info(msg + " onConnect: " + JSON.stringify(proxy)); + if (proxy == null) { + console.error("FreeInstall_FA_ConnectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + Tempassert = "onConnect"; + tips("连接成功"); + }, + onDisconnect: function (element) { + console.info("FreeInstall_FA_ConnectAbility onDisconnect success!!!") + console.info(msg + " onDisconnect success!!!"); + console.info(msg + " onDisconnect: " + JSON.stringify(element)); + Tempassert = "onDisconnect"; + tips("连接断开"); + }, + onFailed: function (code) { + console.info("FreeInstall_FA_ConnectAbility onFailed!!!") + console.info(msg + " onFailed!!! "); + console.info(msg + " onFailed: " + JSON.stringify(code)); + Tempassert = "onFailed"; + tips("连接失败"); + } + } + let connection = await featureAbility.connectAbility(request, options); + console.info(msg + "request:" + JSON.stringify(request)); + console.info(msg + "options:" + JSON.stringify(options)); + console.info(msg + "connection=" + JSON.stringify(connection)); + console.info(msg + "END"); + } + + + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1500 + * @tc.name The application is not in the foreground, + [start another project first, then connect,atomic service does not exist locally] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1500", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1500-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1500"; + var cmddif = "bm install -p data/test/ConnectDifferentApplication.hap"; + abilityDelegator.executeShellCommand(cmddif, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str = { + "want": { + "bundleName": "com.example.different.hmservice", + "abilityName": "MainAbility", + } + }; + featureAbility.startAbility(str) + .then((data) => { + console.info(TAG + " startother successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startother failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request15 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication5.ServiceAbility5", + "moduleName": "myapplication5", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request15); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_1500-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_1600 + * @tc.name The application is not in the foreground, + [start another project first, then connect,atomic service exists locally] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_1600", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_1600-------------"); + TAG = "FreeInstall_FA_ConnectAbility_1600"; + var cmdmyapp4 = "bm install -p data/test/ConnectFaMyApplication4.hap"; + abilityDelegator.executeShellCommand(cmdmyapp4, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str = { + "want": { + "bundleName": "com.example.different.hmservice", + "abilityName": "MainAbility", + } + }; + featureAbility.startAbility(str) + .then((data) => { + console.info(TAG + " startother successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startother failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request16 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication4.ServiceAbility4", + "moduleName": "myapplication4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request16); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_1600-------------"); + done(); + }, 1500); + }); + } + ) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..f2b84b579 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ConnectAbilityTest1 from './ConnectAbilityTest1' +import ConnectAbilityTest from './ConnectAbilityTest' +import connectAbilityTest_PA from './connectAbilityTest_PA' + +export default function testsuite() { + ConnectAbilityTest1(); + ConnectAbilityTest(); + connectAbilityTest_PA(); + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/connectAbilityTest_PA.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/connectAbilityTest_PA.ets new file mode 100644 index 000000000..54120ab10 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility/test/connectAbilityTest_PA.ets @@ -0,0 +1,442 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import featureAbility from '@ohos.ability.featureAbility'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import commonEvent from '@ohos.commonEvent'; + +export default function connectAbilityTest_PA() { + var TAG = ""; + var dataAssert = ""; + var abilityDelegator = undefined + var subscriber; + var subscribeInfo = { + events: ["service_event", "service2_event", "service3_event", "service4_event", "service5_event", + "service6_event", "service7_event", "service8_event", "service9_event", "service10_event", "service11_event"] + }; + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + async function startService(msg, str) { + console.info(msg + ' startService successful. str: ' + JSON.stringify(str)); + featureAbility.startAbility(str) + .then((data) => { + console.info(msg + ' startService successful. Data: ' + JSON.stringify(data)); + }).catch((error) => { + console.error(msg + ' startService failed. Cause: ' + JSON.stringify(error)); + }) + } + + function checkParameters(msg1, data) { + for (var key in data.parameters) { + console.info(msg1 + " data.parameters is : " + data.parameters[key]) + if (data.parameters[key] === "onFailed") { + dataAssert = "onFailed"; + } else if (data.parameters[key] === "onDisconnect") { + dataAssert = "onDisconnect"; + } else if (data.parameters[key] === "onConnect") { + dataAssert = "onConnect"; + } + } + } + + function SubscribeCallBack(err, data) { + if (err.code) { + console.error("commonEvent subscribe failed " + JSON.stringify(err)); + } else { + if (data.event === "service_event") { + console.info("commonEvent subscribe service " + JSON.stringify(data)); + checkParameters("commonEvent service", data) + } else if (data.event === "service2_event") { + console.info("commonEvent subscribe service2 " + JSON.stringify(data)); + checkParameters("commonEvent service2", data) + } else if (data.event === "service3_event") { + console.info("commonEvent subscribe service3 " + JSON.stringify(data)); + checkParameters("commonEvent service3", data) + } else if (data.event === "service4_event") { + console.info("commonEvent subscribe service4 " + JSON.stringify(data)); + checkParameters("commonEvent service4", data) + } else if (data.event === "service5_event") { + console.info("commonEvent subscribe service5 " + JSON.stringify(data)); + checkParameters("commonEvent service5", data) + } else if (data.event === "service6_event") { + console.info("commonEvent subscribe service6 " + JSON.stringify(data)); + checkParameters("commonEvent service6", data) + } else if (data.event === "service7_event") { + console.info("commonEvent subscribe service7 " + JSON.stringify(data)); + checkParameters("commonEvent service7", data) + } else if (data.event === "service8_event") { + console.info("commonEvent subscribe service8 " + JSON.stringify(data)); + checkParameters("commonEvent service8", data) + } else if (data.event === "service9_event") { + console.info("commonEvent subscribe service9 " + JSON.stringify(data)); + checkParameters("commonEvent service9", data) + } else if (data.event === "service10_event") { + console.info("commonEvent subscribe service10 " + JSON.stringify(data)); + checkParameters("commonEvent service10", data) + } else if (data.event === "service11_event") { + console.info("commonEvent subscribe service11 " + JSON.stringify(data)); + checkParameters("commonEvent service11", data) + } + } + } + + + function CreateSubscriberCallBack(err, commonEventSubscriber) { + if (err.code) { + console.error("commonEvent createSubscriber failed " + JSON.stringify(err)); + } else { + console.info("----commonEvent createSubscriber------"); + subscriber = commonEventSubscriber; + commonEvent.subscribe(subscriber, SubscribeCallBack); + } + } + + describe('FreeInstall_FA_ConnectAbility_PA', function () { + beforeAll(async function (done) { + console.info("FreeInstall_FA_ConnectAbility_PA before all called"); + console.info("FreeInstall_FA_ConnectAbility_PA commonEvent.createSubscriber start!!!"); + commonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); + await sleep(2000); + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + abilityDelegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + abilityDelegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + abilityDelegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + + }) + await sleep(500); + var cmdum = "bm uninstall -n com.example.different.hmservice"; + abilityDelegator.executeShellCommand(cmdum, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("FreeInstall_FA_ConnectAbility_PA after each called"); + dataAssert = "" + await sleep(1000); + done(); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0100 + * @tc.name Deviceid is empty,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_PA_0100", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0100-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0100"; + var cmdmyapp7 = "cp data/test/ConnectFaMyApplication7.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + abilityDelegator.executeShellCommand(cmdmyapp7, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str1 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility", + } + }; + startService(TAG, str1); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0100-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0200 + * @tc.name Deviceid is empty,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_PA_0200", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0200-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0200"; + var cmdapp9 = "bm install -p data/test/ConnectFaMyApplication9.hap"; + abilityDelegator.executeShellCommand(cmdapp9, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str2 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility2", + } + }; + startService(TAG, str2); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0200-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0300 + * @tc.name The bundleName passed in is different from the local + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0300", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0300-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0300"; + var str3 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility3", + } + }; + startService(TAG, str3); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0300-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0400 + * @tc.name Do not pass flags, atomic service does not exist locally + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0400", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0400-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0400"; + var str4 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility4", + } + }; + startService(TAG, str4); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0400-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0500 + * @tc.name Do not pass flags, atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_PA_0500", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0500-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0500"; + var cmdin = "bm install -p data/test/ConnectDifferentApplication.hap"; + abilityDelegator.executeShellCommand(cmdin, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str5 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility5", + } + }; + startService(TAG, str5); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0500-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0600 + * @tc.name Incorrect deviceid passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0600", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0600-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0600"; + var str6 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility6", + } + }; + startService(TAG, str6); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0600-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0700 + * @tc.name Incorrect bundleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0700", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0700-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0700"; + var str7 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility7", + } + }; + startService(TAG, str7); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0700-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0800 + * @tc.name Pass in an empty abilityName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0800", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0800-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0800"; + var str8 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility8", + } + }; + startService(TAG, str8); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0800-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_0900 + * @tc.name No atomic service under path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_0900", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_0900-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_0900"; + var cmdrm = "rm -r /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/*"; + abilityDelegator.executeShellCommand(cmdrm, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str9 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility9", + } + }; + startService(TAG, str9); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_0900-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_1000 + * @tc.name Incorrect moduleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_FA_ConnectAbility_PA_1000", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_1000-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_1000"; + var str10 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility10", + } + }; + startService(TAG, str10); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_1000-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_ConnectAbility_PA_1100 + * @tc.name Pass in parameters + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_ConnectAbility_PA_1100", 0, async function (done) { + console.log("------------start FreeInstall_FA_ConnectAbility_PA_1100-------------"); + TAG = "FreeInstall_FA_ConnectAbility_PA_1100"; + var cmdmyapp8 = "cp data/test/ConnectFaMyApplication8.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + abilityDelegator.executeShellCommand(cmdmyapp8, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str11 = { + "want": { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility11", + } + }; + startService(TAG, str11); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_FA_ConnectAbility_PA_1100-------------"); + done(); + }, 4000); + }); + } + ) +} + diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/app.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/app.ets new file mode 100644 index 000000000..aa1409851 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/app.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import featureAbility from '@ohos.ability.featureAbility'; +export default { + onCreate() { + console.info('Application onCreate') + setTimeout(function () { + featureAbility.terminateSelf() + .then((data) => { + console.info('[Demo] MainAbility2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('[Demo] MainAbility2 terminateself failed. Cause: ' + error); + }) + }, 3200); + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/pages/index.ets new file mode 100644 index 000000000..7c961fe38 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/MainAbility2/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello Mainability2' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility/service.ts new file mode 100644 index 000000000..1a1db9afd --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility/service.ts @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service onCommand'); + let request = { + 'deviceId': '', + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication7.ServiceAbility', + 'moduleName': 'myapplication7', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service onConnect success!!!") + commonEvent.publish("service_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service onDisconnect success!!!") + commonEvent.publish("service_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service onFailed!!!") + commonEvent.publish("service_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility10/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility10/service.ts new file mode 100644 index 000000000..8395c7823 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility10/service.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service10 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service10 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service10 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service10 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service10 onCommand'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication8.ServiceAbility', + 'moduleName': 'xxxxx', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service10 onConnect success!!!") + commonEvent.publish("service10_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service10 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service10 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service10 onDisconnect success!!!") + commonEvent.publish("service10_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service10 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service10 onFailed!!!") + commonEvent.publish("service10_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service10 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service10 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service10 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service10 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service10 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility11/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility11/service.ts new file mode 100644 index 000000000..aa6876d1d --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility11/service.ts @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service11 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service11 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service11 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service11 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service11 onCommand'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication8.ServiceAbility', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + 'parameters': { + "key1": "value1", "key2": "nice to meet you", "key3": "Every ending is a new beginning!" + } + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service11 onConnect success!!!") + commonEvent.publish("service11_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service11 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service11 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service11 onDisconnect success!!!") + commonEvent.publish("service11_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service11 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service11 onFailed!!!") + commonEvent.publish("service11_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service11 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service11 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service11 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service11 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service11 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility2/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility2/service.ts new file mode 100644 index 000000000..4a4e9290b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility2/service.ts @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service2 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service2 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service2 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service2 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service2 onCommand'); + let request = { + 'deviceId': '', + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication9.ServiceAbility', + 'moduleName': 'myapplication9', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service2 onConnect success!!!") + commonEvent.publish("service2_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service2 onDisconnect success!!!") + commonEvent.publish("service2_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service2 onFailed!!!") + commonEvent.publish("service2_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA sevice onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service2 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service2 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service2 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service2 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility3/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility3/service.ts new file mode 100644 index 000000000..162a94ff2 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility3/service.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service3 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service3 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service3 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service3 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service3 onCommand'); + let request = { + 'bundleName': 'com.example.different.hmservice', + 'abilityName': 'com.example.different.ServiceAbility', + 'moduleName': 'entry', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service3 onConnect success!!!") + commonEvent.publish("service3_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service3 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service3 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service3 onDisconnect success!!!") + commonEvent.publish("service3_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service3 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service3 onFailed!!!") + commonEvent.publish("service3_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service3 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service3 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service3 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service3 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service3 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility4/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility4/service.ts new file mode 100644 index 000000000..494284b14 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility4/service.ts @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service4 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service4 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service4 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service4 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service4 onCommand'); + let request = { + 'bundleName': 'com.example.different.hmservice', + 'abilityName': 'com.example.different.ServiceAbility', + 'moduleName': 'entry', + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service4 onConnect success!!!") + commonEvent.publish("service4_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service4 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service4 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service4 onDisconnect success!!!") + commonEvent.publish("service4_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service4 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service4 onFailed!!!") + commonEvent.publish("service4_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service4 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service4 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service4 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service4 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service4 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility5/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility5/service.ts new file mode 100644 index 000000000..476e6341c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility5/service.ts @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service5 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service5 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service5 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service5 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service5 onCommand'); + let request = { + 'bundleName': 'com.example.different.hmservice', + 'abilityName': 'com.example.different.ServiceAbility', + 'moduleName': 'entry', + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service5 onConnect success!!!") + commonEvent.publish("service5_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service5 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service5 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service5 onDisconnect success!!!") + commonEvent.publish("service5_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service5 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service5 onFailed!!!") + commonEvent.publish("service5_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service5 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service5 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service5 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service5 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service5 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility6/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility6/service.ts new file mode 100644 index 000000000..df7b529b9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility6/service.ts @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service6 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service6 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service6 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service6 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service6 onCommand'); + let request = { + 'deviceId': 'XXXXX', + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication8.ServiceAbility', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service6 onConnect success!!!") + commonEvent.publish("service6_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service6 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service6 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service6 onDisconnect success!!!") + commonEvent.publish("service6_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service6 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service6 onFailed!!!") + commonEvent.publish("service6_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service6 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service6 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service6 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service6 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service6 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility7/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility7/service.ts new file mode 100644 index 000000000..fae073901 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility7/service.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service7 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service7 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service7 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service7 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service7 onCommand'); + let request = { + 'bundleName': 'com.example.xxx.hmservice', + 'abilityName': 'com.example.myapplication8.ServiceAbility', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service7 onConnect success!!!") + commonEvent.publish("service7_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service7 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service7 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service7 onDisconnect success!!!") + commonEvent.publish("service7_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service7 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service7 onFailed!!!") + commonEvent.publish("service7_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service7 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service7 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service7 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service7 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service7 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility8/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility8/service.ts new file mode 100644 index 000000000..a9cc5ca2b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility8/service.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service8 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service8 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service8 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service8 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service8 onCommand'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': '', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service8 onConnect success!!!") + commonEvent.publish("service8_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service8 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service8 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service8 onDisconnect success!!!") + commonEvent.publish("service8_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service8 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service8 onFailed!!!") + commonEvent.publish("service8_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service8 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service8 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service8 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service8 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service8 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility9/service.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility9/service.ts new file mode 100644 index 000000000..7980cd495 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/ServiceAbility9/service.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import wantConstant from '@ohos.ability.wantConstant'; +import particleAbility from '@ohos.ability.particleAbility'; +import rpc from '@ohos.rpc'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("FreeInstall_FA_ConnectAbility_PA service9 publish failed " + JSON.stringify(err)); + } else { + console.info("FreeInstall_FA_ConnectAbility_PA service9 publish success!!!"); + } +} + +export default { + onStart() { + console.info('FreeInstall_FA_ConnectAbility_PA service9 onStart'); + }, + onStop() { + console.info('FreeInstall_FA_ConnectAbility_PA service9 onStop'); + }, + onCommand(want, startId) { + console.info('FreeInstall_FA_ConnectAbility_PA service9 onCommand'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'com.example.myapplication8.ServiceAbility', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service9 onConnect success!!!") + commonEvent.publish("service9_event", publishConnectOptions, PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service9 onConnect element : ' + JSON.stringify(element)); + console.info('FreeInstall_FA_ConnectAbility_PA service9 onConnect proxy : ' + JSON.stringify(proxy)); + if (proxy == null) { + console.error("freeInstall_featureAbility_connectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + }, + onDisconnect: async function (element1: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service9 onDisconnect success!!!") + commonEvent.publish("service9_event",publishDisconnectOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service9 onDisconnect ele : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info("FreeInstall_FA_ConnectAbility_PA service9 onFailed!!!") + commonEvent.publish("service9_event",publishFailedOptions,PublishCallBack); + console.info('FreeInstall_FA_ConnectAbility_PA service9 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('FreeInstall_FA_ConnectAbility_PA service9 connect start '); + var connection = particleAbility.connectAbility(request, options); + console.info('FreeInstall_FA_ConnectAbility_PA service9 request is:' + JSON.stringify(request)); + console.info('FreeInstall_FA_ConnectAbility_PA service9 options is:' + JSON.stringify(options)); + console.info('FreeInstall_FA_ConnectAbility_PA service9 connection=: ' + connection); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..3134bf3ac --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; +// var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.TestAbility' + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) +// var cmd = 'aa start -a com.example.myapplication.MainAbility' + ' -b ' + abilityDelegatorArguments.bundleName + var cmd = 'aa start -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..0b3b77bdd --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,68 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "MainAbility2_desc", + "value": "description" + }, + { + "name": "MainAbility2_label", + "value": "label" + }, + { + "name": "ServiceAbility_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility2_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility3_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility4_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility5_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility6_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility7_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility8_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility9_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility10_desc", + "value": "hap sample empty service" + }, + { + "name": "ServiceAbility11_desc", + "value": "hap sample empty service" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/connectabilityfatest/freeinstallconnectabilityfatest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y-grhpq>=4Bu;(DE|wG>}Juk_0FTWjZM)HPlI=G?d~bG!)vE?SRd|k4|RL z5AA&4J@@X}@1F16xgaj0Q_^NE(=Gc(#7pJ3#zhN2Tx93-c#sGTPf1&_OvfVyLOu_~ zlSe%S@>=7`Ny51BKMTc;WGL*TDT$MIk>XNl)`J8^1h|A4DgXsQJWCvj_*`5l2htLU zQb|hWZthQ3EO$wia-fh9N)kXtGPj$A6damq3MM9pNIyx0NiIPIgA$i7%!GW72$Oi< z0D=zJ`Y49^Lr|^Wn5#m~7QIHVf-PuY)=pu1y$Xw|RIr2ez^opDJ$jTdsS0Ci7(+as25)_x zsT{}EFl&V|Ef!V9U<2YYRwA&?0@oW&+zMu#MLjlkC63QUS*F~nt&CJ?HBF8xWrVb# zH5lU5!jKhJMKRn`g!moxUavC%H9DwzPo=ifYo{C*v<_3DeJD7J5s#wqYJ_!Y{dKl# zbI>7`d2oQTI#itWjMb#pQF0&==*tju`)aL$UCE23tZj*onZ@#D%qMUx!zW7U>s7pT(2?vZB-yTR}BaHF_^_p z>A)i>RKq&8(V$JL0R&eIy~f~oaNp~cTG=WKY(YHEf$Hj!M5XOif2}bDVT~#nwm57i z6^;k1BfkI#2a7>4e42{8g?g`>nbo*tA?vQh{fRzIem6Y!&u8`Yow^C zqOv67Mm26i&zNJdsSk}S5ZJ9i5g1b;GMLpRDryEM1hJu-awZyzc>Q+DX-4p{!Nodj z8p@BoYeJz0+)sJZt zuEPepall8Mbf92R2NrOKP{5F3h655oKi75PrZ7VWYMqI0@AnHgNidN_?~A>hO$>~4 z^Tb@Mb6p+qg%i#dPPBT6TPfsoGNel~WMtla4$I*p39k?b>wSH06QT&ecu{LS5j7WKgGt{%Qg#tlx5^zGpL0XEyDon}XtBlYX@N6O&mN9(L z$3WvjRw6q*BYjXd*Fq8jXbPB|7!qV;4<3SpL4U$-IR3dR7);6%Ng*HwQb@`@>Ox+;D8{>7P%3W3Q%Usi-A~_qV+>e)rntOWl*O-6dZMKE8F5;?K0akaPU^t@xU> z%=cfHofS|kPL6wHyBU;&9FES!DZ+6ebIF)LFY6Fz{&D!$xgA|o7k1uCUbIc31tSxH zQ9Ry%g+c*8bqSc5h(`)Dg=0P>uD!i0X1s82?ZKCCB;WhGR>U(8-7|qN3Ap)CQv0fX zX>mu>K3(2u5yPDS2i~g-k`cK-?+g}k~KDu+;-P*Btr{$~&b>;qGA|AHs7nh`J|G6Cj zFM?4Cp=2b4lMDphW2lmNDT9=hRhqu_t?@tZNiwycZ^=K%z>ov)XaXk~tj_oQ`@1 zbTo;4XZBDgPjUAKnGqx}k`C5UB78cI_yh?}-u&gMP5ZOtdzXK(qxOqy@YH| zKVg=t_U%sjdhgBr><=%#F8a;Uk{yeK)y=0CKNmdE*mmS2GpIWB>H6u#<%c`=zqcWK z9HF5KQ#7Oa~pEP2)s#v~d&wROM>gVs@EXK<+yLWhcgU&n0TfndfCpllJ0~-G1 zq|eQ>U0Y7f|Lt@0PSR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y-grhpq>=4Bu;(DE|wG>}Juk_0FTWjZM)HPlI=G?d~bG!)vE?SRd|k4|RL z5AA&4J@@X}@1F16xgaj0Q_^NE(=Gc(#7pJ3#zhN2Tx93-c#sGTPf1&_OvfVyLOu_~ zlSe%S@>=7`Ny51BKMTc;WGL*TDT$MIk>XNl)`J8^1h|A4DgXsQJWCvj_*`5l2htLU zQb|hWZthQ3EO$wia-fh9N)kXtGPj$A6damq3MM9pNIyx0NiIPIgA$i7%!GW72$Oi< z0D=zJ`Y49^Lr|^Wn5#m~7QIHVf-PuY)=pu1y$Xw|RIr2ez^opDJ$jTdsS0Ci7(+as25)_x zsT{}EFl&V|Ef!V9U<2YYRwA&?0@oW&+zMu#MLjlkC63QUS*F~nt&CJ?HBF8xWrVb# zH5lU5!jKhJMKRn`g!moxUavC%H9DwzPo=ifYo{C*v<_3DeJD7J5s#wqYJ_!Y{dKl# zbI>7`d2oQTI#itWjMb#pQF0&==*tju`)aL$UCE23tZj*onZ@#D%qMUx!zW7U>s7pT(2?vZB-yTR}BaHF_^_p z>A)i>RKq&8(V$JL0R&eIy~f~oaNp~cTG=WKY(YHEf$Hj!M5XOif2}bDVT~#nwm57i z6^;k1BfkI#2a7>4e42{8g?g`>nbo*tA?vQh{fRzIem6Y!&u8`Yow^C zqOv67Mm26i&zNJdsSk}S5ZJ9i5g1b;GMLpRDryEM1hJu-awZyzc>Q+DX-4p{!Nodj z8p@BoYeJz0+)sJZt zuEPepall8Mbf92R2NrOKP{5F3h655oKi75PrZ7VWYMqI0@AnHgNidN_?~A>hO$>~4 z^Tb@Mb6p+qg%i#dPPBT6TPfsoGNel~WMtla4$I*p39k?b>wSH06QT&ecu{LS5j7WKgGt{%Qg#tlx5^zGpL0XEyDon}XtBlYX@N6O&mN9(L z$3WvjRw6q*BYjXd*Fq8jXbPB|7!qV;4<3SpL4U$-IR3dR7);6%Ng*HwQb@`@>Ox+;D8{>7P%3W3Q%Usi-A~_qV+>e)rntOWl*O-6dZMKE8F5;?K0akaPU^t@xU> z%=cfHofS|kPL6wHyBU;&9FES!DZ+6ebIF)LFY6Fz{&D!$xgA|o7k1uCUbIc31tSxH zQ9Ry%g+c*8bqSc5h(`)Dg=0P>uD!i0X1s82?ZKCCB;WhGR>U(8-7|qN3Ap)CQv0fX zX>mu>K3(2u5yPDS2i~g-k`cK-?+g}k~KDu+;-P*Btr{$~&b>;qGA|AHs7nh`J|G6Cj zFM?4Cp=2b4lMDphW2lmNDT9=hRhqu_t?@tZNiwycZ^=K%z>ov)XaXk~tj_oQ`@1 zbTo;4XZBDgPjUAKnGqx}k`C5UB78cI_yh?}-u&gMP5ZOtdzXK(qxOqy@YH| zKVg=t_U%sjdhgBr><=%#F8a;Uk{yeK)y=0CKNmdE*mmS2GpIWB>H6u#<%c`=zqcWK z9HF5KQ#7Oa~pEP2)s#v~d&wROM>gVs@EXK<+yLWhcgU&n0TfndfCpllJ0~-G1 zq|eQ>U0Y7f|Lt@0PSR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}yR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y-grhpq>=4Bu;(DE|wG>}Juk_0FTWjZM)HPlI=G?d~bG!)vE?SRd|k4|RL z5AA&4J@@X}@1F16xgaj0Q_^NE(=Gc(#7pJ3#zhN2Tx93-c#sGTPf1&_OvfVyLOu_~ zlSe%S@>=7`Ny51BKMTc;WGL*TDT$MIk>XNl)`J8^1h|A4DgXsQJWCvj_*`5l2htLU zQb|hWZthQ3EO$wia-fh9N)kXtGPj$A6damq3MM9pNIyx0NiIPIgA$i7%!GW72$Oi< z0D=zJ`Y49^Lr|^Wn5#m~7QIHVf-PuY)=pu1y$Xw|RIr2ez^opDJ$jTdsS0Ci7(+as25)_x zsT{}EFl&V|Ef!V9U<2YYRwA&?0@oW&+zMu#MLjlkC63QUS*F~nt&CJ?HBF8xWrVb# zH5lU5!jKhJMKRn`g!moxUavC%H9DwzPo=ifYo{C*v<_3DeJD7J5s#wqYJ_!Y{dKl# zbI>7`d2oQTI#itWjMb#pQF0&==*tju`)aL$UCE23tZj*onZ@#D%qMUx!zW7U>s7pT(2?vZB-yTR}BaHF_^_p z>A)i>RKq&8(V$JL0R&eIy~f~oaNp~cTG=WKY(YHEf$Hj!M5XOif2}bDVT~#nwm57i z6^;k1BfkI#2a7>4e42{8g?g`>nbo*tA?vQh{fRzIem6Y!&u8`Yow^C zqOv67Mm26i&zNJdsSk}S5ZJ9i5g1b;GMLpRDryEM1hJu-awZyzc>Q+DX-4p{!Nodj z8p@BoYeJz0+)sJZt zuEPepall8Mbf92R2NrOKP{5F3h655oKi75PrZ7VWYMqI0@AnHgNidN_?~A>hO$>~4 z^Tb@Mb6p+qg%i#dPPBT6TPfsoGNel~WMtla4$I*p39k?b>wSH06QT&ecu{LS5j7WKgGt{%Qg#tlx5^zGpL0XEyDon}XtBlYX@N6O&mN9(L z$3WvjRw6q*BYjXd*Fq8jXbPB|7!qV;4<3SpL4U$-IR3dR7);6%Ng*HwQb@`@>Ox+;D8{>7P%3W3Q%Usi-A~_qV+>e)rntOWl*O-6dZMKE8F5;?K0akaPU^t@xU> z%=cfHofS|kPL6wHyBU;&9FES!DZ+6ebIF)LFY6Fz{&D!$xgA|o7k1uCUbIc31tSxH zQ9Ry%g+c*8bqSc5h(`)Dg=0P>uD!i0X1s82?ZKCCB;WhGR>U(8-7|qN3Ap)CQv0fX zX>mu>K3(2u5yPDS2i~g-k`cK-?+g}k~KDu+;-P*Btr{$~&b>;qGA|AHs7nh`J|G6Cj zFM?4Cp=2b4lMDphW2lmNDT9=hRhqu_t?@tZNiwycZ^=K%z>ov)XaXk~tj_oQ`@1 zbTo;4XZBDgPjUAKnGqx}k`C5UB78cI_yh?}-u&gMP5ZOtdzXK(qxOqy@YH| zKVg=t_U%sjdhgBr><=%#F8a;Uk{yeK)y=0CKNmdE*mmS2GpIWB>H6u#<%c`=zqcWK z9HF5KQ#7Oa~pEP2)s#v~d&wROM>gVs@EXK<+yLWhcgU&n0TfndfCpllJ0~-G1 zq|eQ>U0Y7f|Lt@0PSR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y { + console.info('[Demo] myapp2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('[Demo] myapp2 terminateself failed. Cause: ' + error); + }) + }, 3200); + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/ServiceAbility/ServiceAbility.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/ServiceAbility/ServiceAbility.ts new file mode 100644 index 000000000..9e3d97fad --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/ServiceAbility/ServiceAbility.ts @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from "@ohos.application.ServiceExtensionAbility" +import rpc from '@ohos.rpc'; + +class StubTest extends rpc.RemoteObject { + constructor(des) { + super(des) + } + + onRemoteRequest(code, data, reply, option) { + console.info('ServiceAbility myapp2 onRemoteRequest'); + if (code === 1) { + let op1 = data.readInt(); + let op2 = data.readInt(); + reply.writeInt(op1 + op2); + console.info('ServiceAbility myapp2 op1:' + op1 + ' op2:' + op2); + } + return true; + } +} +export default class ServiceAbility extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ServiceAbility myapp2 onCreate'); + } + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ServiceAbility myapp2 onRequest'); + } + onConnect(want) { + console.info('onConnect, want:' + want.abilityName); + console.info('ServiceAbility myapp2 onConnect'); + console.info('ConnectAbilityTest connect myapp2 Servcie success'); + return new StubTest("test"); + } + onDisconnect(want) { + console.info('onDisconnect, want:' + want.abilityName); + console.info('ServiceAbility myapp2 onDisconnect'); + } + onReconnect(want) { + console.info('onReconnect, want:' + want.abilityName); + console.info('ServiceAbility myapp2 onReconnect'); + } + onDestroy() { + console.info('ServiceAbility myapp2 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..7f010fbe8 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/ets/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello myapp2' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/module.json new file mode 100644 index 000000000..fce091ee5 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/module.json @@ -0,0 +1,47 @@ +{ + "module": { + "name": "myapplication2", + "type": "feature", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:myapplication2_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility_myapp2", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "orientation": "portrait", + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "ServiceAbility2", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..ef79324a9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "myapplication2_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "form_ServiceAbility_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/connectstagemyapplication2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/MockService.hap", + "ConnectStageMyApplication0.hap -> /data/test/ConnectStageMyApplication0.hap", + "ConnectStageMyApplication1.hap -> /data/test/ConnectStageMyApplication1.hap", + "ConnectStageMyApplication2.hap -> /data/test/ConnectStageMyApplication2.hap", + "ConnectStageMyApplication3.hap -> /data/test/ConnectStageMyApplication3.hap", + "ConnectStageMyApplication4.hap -> /data/test/ConnectStageMyApplication4.hap", + "ConnectStageMyApplication5.hap -> /data/test/ConnectStageMyApplication5.hap", + "ConnectStageMyApplication6.hap -> /data/test/ConnectStageMyApplication6.hap", + "ConnectStageMyApplication7.hap -> /data/test/ConnectStageMyApplication7.hap", + "ConnectStageMyApplication8.hap -> /data/test/ConnectStageMyApplication8.hap", + "ConnectDifferentApplication.hap -> /data/test/ConnectDifferentApplication.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b3f3c3060 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AbilityStage from "@ohos.application.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..ed2f65212 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' +import commonEvent from '@ohos.commonEvent'; + +let publishOptions = { + parameters: { + "assertData": "onconnect" + } +}; +function PublishCallBack(err) { + if (err.code) { + console.error("Testevent service publish failed " + JSON.stringify(err)); + } else { + console.info("Testevent service publish success!!!"); + } +} + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + globalThis.abilityContext = this.context; + windowStage.setUIContent(this.context, "pages/index", null) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") +// commonEvent.publish("test_event",publishOptions,PublishCallBack); + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility2/MainAbility2.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility2/MainAbility2.ts new file mode 100644 index 000000000..a7a9b4346 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/MainAbility2/MainAbility2.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' + +export default class MainAbility2 extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + globalThis.ability2 = this.context; + windowStage.setUIContent(this.context, "pages/index2", null) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + setTimeout(function () { + globalThis.ability2.terminateSelf() + .then((data) => { + console.info('[Demo] MainAbility2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('[Demo] MainAbility2 terminateself failed. Cause: ' + error); + }) + }, 3200); + + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts new file mode 100644 index 000000000..e88f22b31 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service publish success!!!"); + } +} + +export default class ServiceAbility extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service onRequest'); + let request = { + 'deviceId': '', + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'ServiceAbility6', + 'moduleName': 'myapplication6', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service onConnect success!!!'); + commonEvent.publish("service_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service onDisconnect success!!!'); + commonEvent.publish("service_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service onFailed!!!'); + commonEvent.publish("service_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility2/ServiceAbility2.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility2/ServiceAbility2.ts new file mode 100644 index 000000000..7c72d5a05 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility2/ServiceAbility2.ts @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service2 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service2 publish success!!!"); + } +} + +export default class ServiceAbility2 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service2 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service2 onRequest'); + let request = { + 'bundleName': 'com.example.different.hmservice', + 'abilityName': 'com.example.different.ServiceAbility', + 'moduleName': 'entry', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service2 onConnect success!!!'); + commonEvent.publish("service2_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service2 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service2 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service2 onDisconnect success!!!'); + commonEvent.publish("service2_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service2 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service2 onFailed!!!'); + commonEvent.publish("service2_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service2 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service2 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service2 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service2 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service2 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility3/ServiceAbility3.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility3/ServiceAbility3.ts new file mode 100644 index 000000000..018516a05 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility3/ServiceAbility3.ts @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service3 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service3 publish success!!!"); + } +} + +export default class ServiceAbility3 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service3 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service3 onRequest'); + let request = { + 'bundleName': 'com.example.different.hmservice', + 'abilityName': 'com.example.different.ServiceAbility', + 'moduleName': 'entry', + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service3 onConnect success!!!'); + commonEvent.publish("service3_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service3 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service3 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service3 onDisconnect success!!!'); + commonEvent.publish("service3_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service3 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service3 onFailed!!!'); + commonEvent.publish("service3_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service3 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service3 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service3 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service3 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service3 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility4/ServiceAbility4.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility4/ServiceAbility4.ts new file mode 100644 index 000000000..6ab25ab7a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility4/ServiceAbility4.ts @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service4 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service4 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service4 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service4 onRequest'); + let request = { + 'deviceId': 'XXXXX', + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'ServiceAbility7', + 'moduleName': 'myapplication7', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service4 onConnect success!!!'); + commonEvent.publish("service4_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service4 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service4 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service4 onDisconnect success!!!'); + commonEvent.publish("service4_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service4 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service4 onFailed!!!'); + commonEvent.publish("service4_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service4 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service4 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service4 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service4 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service4 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility5/ServiceAbility5.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility5/ServiceAbility5.ts new file mode 100644 index 000000000..78e1001a0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility5/ServiceAbility5.ts @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service5 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service5 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service5 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service5 onRequest'); + let request = { + 'bundleName': 'com.example.xxx.hmservice', + 'abilityName': 'ServiceAbility7', + 'moduleName': 'myapplication7', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service5 onConnect success!!!'); + commonEvent.publish("service5_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service5 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service5 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service5 onDisconnect success!!!'); + commonEvent.publish("service5_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service5 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service5 onFailed!!!'); + commonEvent.publish("service5_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service5 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service5 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service5 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service5 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service5 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility6/ServiceAbility6.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility6/ServiceAbility6.ts new file mode 100644 index 000000000..328007605 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility6/ServiceAbility6.ts @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service6 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service6 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service6 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service6 onRequest'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': '', + 'moduleName': 'myapplication7', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service6 onConnect success!!!'); + commonEvent.publish("service6_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service6 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service6 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service6 onDisconnect success!!!'); + commonEvent.publish("service6_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service6 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service6 onFailed!!!'); + commonEvent.publish("service6_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service6 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service6 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service6 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service6 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service6 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility7/ServiceAbility7.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility7/ServiceAbility7.ts new file mode 100644 index 000000000..88229fa85 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility7/ServiceAbility7.ts @@ -0,0 +1,89 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service7 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service7 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service7 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service7 onRequest'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'ServiceAbility7', + 'moduleName': 'myapplication7', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + 'parameters': { + "key1": "value1", "key2": "let your heart guide you", "tag": "Every ending is a new beginning!" + } + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service7 onConnect success!!!'); + commonEvent.publish("service7_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service7 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service7 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service7 onDisconnect success!!!'); + commonEvent.publish("service7_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service7 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service7 onFailed!!!'); + commonEvent.publish("service7_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service7 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service7 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service7 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service7 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service7 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility8/ServiceAbility8.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility8/ServiceAbility8.ts new file mode 100644 index 000000000..ee6427eab --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility8/ServiceAbility8.ts @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service8 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service8 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service8 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service8 onRequest'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'ServiceAbility7', + 'moduleName': 'xxxxx', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service8 onConnect success!!!'); + commonEvent.publish("service8_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service8 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service8 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service8 onDisconnect success!!!'); + commonEvent.publish("service8_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service8 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service8 onFailed!!!'); + commonEvent.publish("service8_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service8 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service8 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service8 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service8 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service8 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility9/ServiceAbility9.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility9/ServiceAbility9.ts new file mode 100644 index 000000000..83d01c29c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/ServiceAbility9/ServiceAbility9.ts @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishConnectOptions = { + parameters: { + "assertData": "onConnect" + } +}; +var publishDisconnectOptions = { + parameters: { + "assertData": "onDisconnect" + } +}; +var publishFailedOptions = { + parameters: { + "assertData": "onFailed" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service9 publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service9 publish success!!!"); + } +} + +export default class ServiceAbility4 extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ConnectAbilityTest_Ext service9 onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ConnectAbilityTest_Ext service9 onRequest'); + let request = { + 'bundleName': 'com.example.myapplication.hmservice', + 'abilityName': 'ServiceAbility6', + 'moduleName': 'myapplication8', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + let options = { + onConnect: async function (element: any, proxy: any) { + console.info('ConnectAbilityTest_Ext service9 onConnect success!!!'); + commonEvent.publish("service9_event",publishConnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service9 onConnect element : ' + JSON.stringify(element)); + console.info('ConnectAbilityTest_Ext service9 onConnect proxy : ' + JSON.stringify(proxy)); + }, + onDisconnect: async function (element1: any) { + console.info('ConnectAbilityTest_Ext service9 onDisconnect success!!!'); + commonEvent.publish("service9_event",publishDisconnectOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service9 onDisconnect element : ' + JSON.stringify(element1)); + }, + onFailed: async function (code: any) { + console.info('ConnectAbilityTest_Ext service9 onFailed!!!'); + commonEvent.publish("service9_event",publishFailedOptions,PublishCallBack); + console.info('ConnectAbilityTest_Ext service9 onFailed errCode : ' + JSON.stringify(code)); + }, + } + console.info('ConnectAbilityTest_Ext sevice connect start '); + var connection = this.context.connectAbility(request, options); + console.info('ConnectAbilityTest_Ext service9 request is:' + JSON.stringify(request)); + console.info('ConnectAbilityTest_Ext service9 options is:' + JSON.stringify(options)); + console.info('ConnectAbilityTest_Ext service9 connection=: ' + connection); + } + onDestroy() { + console.info('ConnectAbilityTest_Ext service9 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..ec20fc082 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + globalThis.delegator = abilityDelegator; + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..1c3a4da0e --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index.ets @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// @ts-nocheck +import file from '@system.file'; +import {Core, ExpectExtend, InstrumentLog, ReportExtend} from "deccjsunit/index.ets" +import List from '../test/ListTest' +@Entry +@Component +struct Index { + @State message: string = 'Hello World' + aboutToAppear() { + console.info("start run testcase!!!!") + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + globalThis.abilityWant.parameters.timeout = 60000; + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + configService.setConfig(globalThis.abilityWant.parameters); + List(globalThis.abilityContext); + core.execute(); + } + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index2.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index2.ets new file mode 100644 index 000000000..0f7c38d7b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/pages/index2.ets @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index2 { + @State message: string = 'Hello MainAbility2' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest.ets new file mode 100644 index 000000000..0f7d45a2d --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest.ets @@ -0,0 +1,748 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import rpc from '@ohos.rpc'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import abilityManager from '@ohos.application.abilityManager'; + + +export default function ConnectAbilityTest(abilityContext) { + var TAG = ""; + var Tempassert = ""; + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + describe('ConnectAbilityTest', function () { + beforeAll(async function (done) { + console.info("ConnectAbilityTest before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("ConnectAbilityTest after each called"); + Tempassert = "" + await sleep(1000); + done(); + }); + + function tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } + + async function connectabillity(msg, request) { + console.info(msg + "START"); + let options = { + onConnect: function (element, proxy) { + console.info("FreeInstall_Stage_ConnectAbility onConnect success!!!") + console.info(msg + " onConnect success!!! "); + console.info(msg + " onConnect: " + JSON.stringify(element)); + console.info(msg + " onConnect: " + JSON.stringify(proxy)); + if (proxy == null) { + console.error("FreeInstall_Stage_ConnectAbility proxy null"); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInterfaceToken("ohos.appexecfwk.IApplicationStateObserver"); + proxy.sendRequest(0, data, reply, option); + Tempassert = "onConnect"; + tips("连接成功"); + }, + onDisconnect: function (element) { + console.info("FreeInstall_Stage_ConnectAbility onDisconnect success!!!") + console.info(msg + " onDisconnect success!!!"); + console.info(msg + " onDisconnect: " + JSON.stringify(element)); + Tempassert = "onDisconnect"; + tips("连接断开"); + }, + onFailed: function (code) { + console.info("FreeInstall_Stage_ConnectAbility onFailed!!!") + console.info(msg + " onFailed!!! "); + console.info(msg + " onFailed: " + JSON.stringify(code)); + Tempassert = "onFailed"; + tips("连接失败"); + } + } + let connection = await globalThis.abilityContext.connectAbility(request, options); + console.info(msg + "request:" + JSON.stringify(request)); + console.info(msg + "options:" + JSON.stringify(options)); + console.info(msg + "connection=" + JSON.stringify(connection)); + console.info(msg + "END"); + } + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0100 + * @tc.name Pass in the local deviceid,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_0100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0100-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0100"; + var cmd4 = "cp data/test/ConnectStageMyApplication0.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var deviceid = "0"; + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceid:' + JSON.stringify(data.ability.deviceId)); + deviceid = data.ability.deviceId; + }) + await sleep(500); + var request1 = { + "deviceId": deviceid, + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility", + "moduleName": "myapplication", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request1); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0100-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0200 + * @tc.name Pass in the local deviceid,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_0200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0200-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0200"; + var deviceid = "0"; + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceid:' + JSON.stringify(data.ability.deviceId)); + deviceid = data.ability.deviceId; + }) + await sleep(500); + var request2 = { + "deviceId": deviceid, + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility", + "moduleName": "myapplication", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request2); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0200-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0300 + * @tc.name Deviceid is empty,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_0300", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0300-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0300"; + var cmd3 = "cp data/test/ConnectStageMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var request3 = { + "deviceId": "", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility_feature", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request3); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0300-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0400 + * @tc.name Deviceid is empty,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_0400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0400-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0400"; + var request4 = { + "deviceId": "", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility_feature", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request4); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0400-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0500 + * @tc.name The bundleName passed in is different from the local + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_0500", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0500-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0500"; + var request5 = { + "bundleName": "com.example.different.hmservice", + "abilityName": "com.example.different.ServiceAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request5); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0500-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0600 + * @tc.name Pass in an empty bundleName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_0600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0600-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0600"; + var request6 = { + "bundleName": "", + "abilityName": "ServiceAbility_feature", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request6); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0600-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0700 + * @tc.name Pass in an empty abilityName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_0700", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0700-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0700"; + var request7 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request7); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0700-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0800 + * @tc.name Incorrect deviceid passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_0800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0800-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0800"; + var request8 = { + "deviceId": "xxxxxx", + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility2", + "moduleName": "myapplication2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request8); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0800-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_0900 + * @tc.name Incorrect bundleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_0900", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_0900-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_0900"; + var request9 = { + "bundleName": "com.example.xxx.hmservice", + "abilityName": "ServiceAbility2", + "moduleName": "myapplication2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request9); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_0900-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1000 + * @tc.name Incorrect flags passed in,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1000", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1000-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1000"; + var request10 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility2", + "moduleName": "myapplication2", + "flags": 1111111, + } + connectabillity(TAG, request10); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1000-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1100 + * @tc.name Incorrect flags passed in,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_1100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1100-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1100"; + var cmdapp2 = "bm install -p data/test/ConnectStageMyApplication2.hap"; + globalThis.delegator.executeShellCommand(cmdapp2, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request11 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility2", + "moduleName": "myapplication2", + "flags": "11", + } + connectabillity(TAG, request11); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1000-------------"); + done(); + }, 3000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1200 + * @tc.name No atomic service under path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1200-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1200"; + var cmdrm = "rm -r /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/*"; + globalThis.delegator.executeShellCommand(cmdrm, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var request12 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility3", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request12); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1200-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1300 + * @tc.name The application is not in the foreground [start MainAbility2 first, then connect] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1300", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1300-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1300"; + var str = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.MainAbility2", + } + console.info(TAG + " startmainability2 str: " + JSON.stringify(str)); + globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(TAG + " startmainability2 successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startmainability2 failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request13 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility3", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request13); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1300-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1400 + * @tc.name The application is not in the foreground [start myapp2 first, then connect] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1400-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1400"; + var str = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "MainAbility_myapp2", + } + console.info(TAG + " startmyapp2 str: " + JSON.stringify(str)); + globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(TAG + " startmyapp2 successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startmyapp2 failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request14 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility3", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request14); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1400-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1500 + * @tc.name The application is not in the foreground, + [start another project first, then connect,atomic service does not exist locally] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1500", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1500-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1500"; + var cmddif = "bm install -p data/test/ConnectDifferentApplication.hap"; + globalThis.delegator.executeShellCommand(cmddif, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str = { + "bundleName": "com.example.different.hmservice", + "abilityName": "MainAbility", + }; + globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(TAG + " startother successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startother failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request15 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility4", + "moduleName": "myapplication4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request15); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1500-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1600 + * @tc.name The application is not in the foreground, + [start another project first, then connect,atomic service exists locally] + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1600-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1600"; + var cmdmyapp4 = "bm install -p data/test/ConnectStageMyApplication4.hap"; + globalThis.delegator.executeShellCommand(cmdmyapp4, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str = { + "bundleName": "com.example.different.hmservice", + "abilityName": "MainAbility", + }; + globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(TAG + " startother successful. Data: " + JSON.stringify(data)) + }).catch((error) => { + console.error(TAG + " startother failed. Cause: " + JSON.stringify(error)); + }) + await sleep(1500); + var request16 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility4", + "moduleName": "myapplication4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request16); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1600-------------"); + done(); + }, 1500); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1700 + * @tc.name Do not pass flags, connect to the service of another project + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_1700", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1700-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1700"; + var request17 = { + "bundleName": "com.example.different.hmservice", + "abilityName": "com.example.different.ServiceAbility", + "moduleName": "entry", + } + connectabillity(TAG, request17); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1700-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1800 + * @tc.name Incorrect moduleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1800-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1800"; + var request18 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility3", + "moduleName": "xxxxx", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request18); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1800-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_1900 + * @tc.name The target is atomized as hapA, and hapB is placed under the path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_1900", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_1900-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_1900"; + var cmdmyapp5 = "cp data/test/ConnectStageMyApplication5.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp5, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request19 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility3", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request19); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_1900-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_2000 + * @tc.name Pass in parameters + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_2000", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_2000-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_2000"; + var cmdmyapp5 = "cp data/test/ConnectStageMyApplication5.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp5, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request20 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility5", + "moduleName": "myapplication5", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + "parameters": { "name": 1111, "key1": "value1", "site": "nice to meet you!" }, + } + connectabillity(TAG, request20); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_2000-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_2100 + * @tc.name The atomic service of the target differs only by moduleName + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_2100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_2100-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_2100"; + var cmdmyapp5 = "cp data/test/ConnectStageMyApplication3.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp5, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var request21 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility_feature", + "moduleName": "myapplication3", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request21); + setTimeout(function () { + expect(Tempassert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_2100-------------"); + done(); + }, 2000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_2200 + * @tc.name The application is not in the foreground, + [the current application is in the background first,then connect] + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_2200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_2200-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_2200"; + var ability; + globalThis.delegator.getCurrentTopAbility((err : any, data : any) => { + console.info(TAG + " getCurrentTopAbility data: " + JSON.stringify(data) + " ,err: " + JSON.stringify(err)); + ability = data; + globalThis.delegator.doAbilityBackground(ability, (err : any, data : any) => { + console.info(TAG + " doAbilityBackground data: " + JSON.stringify(data) + " ,err: " + JSON.stringify(err)); + }) + }); + await sleep(1000); + var request22 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "ServiceAbility6", + "moduleName": "myapplication6", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + connectabillity(TAG, request22); + setTimeout(function () { + expect(Tempassert).assertEqual("onFailed"); + globalThis.delegator.doAbilityForeground(ability, (err : any, data : any) => { + console.info(TAG + " doAbilityForeground data: " + JSON.stringify(data) + " ,err: " + JSON.stringify(err)); + }) + console.log("------------end FreeInstall_Stage_ConnectAbility_2200-------------"); + done(); + }, 4000); + }); + } + ) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest_Ext.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest_Ext.ets new file mode 100644 index 000000000..fdcda4776 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ConnectAbilityTest_Ext.ets @@ -0,0 +1,433 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import commonEvent from '@ohos.commonEvent'; + +export default function ConnectAbilityTest_Ext(abilityContext) { + var TAG = ""; + var dataAssert = ""; + var subscriber; + var subscribeInfo = { + events: ["service_event", "service2_event", "service3_event", + "service4_event", "service5_event", "service6_event", + "service7_event", "service8_event", "service9_event"] + }; + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + async function startService(msg, str) { + console.info(msg + ' startService successful. str: ' + JSON.stringify(str)); + globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(msg + ' startService successful. Data: ' + JSON.stringify(data)); + }).catch((error) => { + console.error(msg + ' startService failed. Cause: ' + JSON.stringify(error)); + }) + } + + function checkParameters(msg1, data) { + for (var key in data.parameters) { + console.info(msg1 + " data.parameters is : " + data.parameters[key]) + if (data.parameters[key] === "onFailed") { + dataAssert = "onFailed"; + } else if (data.parameters[key] === "onDisconnect") { + dataAssert = "onDisconnect"; + } else if (data.parameters[key] === "onConnect") { + dataAssert = "onConnect"; + } + } + } + + function SubscribeCallBack(err, data) { + if (err.code) { + console.error("commonEvent subscribe failed " + JSON.stringify(err)); + } else { + if (data.event === "service_event") { + console.info("commonEvent subscribe service " + JSON.stringify(data)); + checkParameters("commonEvent service", data) + } else if (data.event === "service2_event") { + console.info("commonEvent subscribe service2 " + JSON.stringify(data)); + checkParameters("commonEvent service2", data) + } else if (data.event === "service3_event") { + console.info("commonEvent subscribe service3 " + JSON.stringify(data)); + checkParameters("commonEvent service3", data) + } else if (data.event === "service4_event") { + console.info("commonEvent subscribe service4 " + JSON.stringify(data)); + checkParameters("commonEvent service4", data) + } else if (data.event === "service5_event") { + console.info("commonEvent subscribe service5 " + JSON.stringify(data)); + checkParameters("commonEvent service5", data) + } else if (data.event === "service6_event") { + console.info("commonEvent subscribe service6 " + JSON.stringify(data)); + checkParameters("commonEvent service6", data) + } else if (data.event === "service7_event") { + console.info("commonEvent subscribe service7 " + JSON.stringify(data)); + checkParameters("commonEvent service7", data) + } else if (data.event === "service8_event") { + console.info("commonEvent subscribe service8 " + JSON.stringify(data)); + checkParameters("commonEvent service8", data) + } else if (data.event === "service9_event") { + console.info("commonEvent subscribe service9 " + JSON.stringify(data)); + checkParameters("commonEvent service9", data) + } + } + } + + function CreateSubscriberCallBack(err, commonEventSubscriber) { + if (err.code) { + console.error("commonEvent createSubscriber failed " + JSON.stringify(err)); + } else { + console.info("----commonEvent createSubscriber------"); + subscriber = commonEventSubscriber; + commonEvent.subscribe(subscriber, SubscribeCallBack); + } + } + + describe('FreeInstall_Stage_ConnectAbility_Ext', function () { + beforeAll(async function (done) { + console.info("FreeInstall_Stage_ConnectAbility_Ext before all called"); + console.info("FreeInstall_Stage_ConnectAbility_Ext commonEvent.createSubscriber start!!!"); + commonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); + await sleep(2000); + var cmd = "bm install -p data/test/Mockservice.hap"; + console.info("cmd : " + cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("FreeInstall_Stage_ConnectAbility_Ext after each called"); + dataAssert = "" + await sleep(1000); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0100 + * @tc.name Deviceid is empty,atomic service does not exist locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0100-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0100"; + var cmdmyapp6 = "cp data/test/ConnectStageMyApplication6.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp6, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str1 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility", + }; + startService(TAG, str1); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0100-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0200 + * @tc.name Deviceid is empty,atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0200-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0200"; + var str1 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility", + }; + startService(TAG, str1); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0200-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0300 + * @tc.name The bundleName passed in is different from the local + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0300", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0300-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0300"; + var cmdum = "bm uninstall -n com.example.different.hmservice"; + globalThis.delegator.executeShellCommand(cmdum, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str2 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility2", + }; + startService(TAG, str2); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0300-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0400 + * @tc.name Do not pass flags, atomic service does not exist locally + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0400-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0400"; + var str3 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility3", + }; + startService(TAG, str3); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0400-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0500 + * @tc.name Do not pass flags, atomic service exists locally + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0500", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0500-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0500"; + var cmdin = "bm install -p data/test/ConnectDifferentApplication.hap"; + globalThis.delegator.executeShellCommand(cmdin, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str3 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility3", + }; + startService(TAG, str3); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0500-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0600 + * @tc.name Incorrect deviceid passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0600-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0600"; + var str4 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility4", + }; + startService(TAG, str4); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0600-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0700 + * @tc.name Incorrect bundleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0700", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0700-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0700"; + var str5 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility5", + }; + startService(TAG, str5); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0700-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0800 + * @tc.name Pass in an empty abilityName + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0800-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0800"; + var str6 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility6", + }; + startService(TAG, str6); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0800-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_0900 + * @tc.name No atomic service under path + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_0900", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_0900-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_0900"; + var cmdrm = "rm -r /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/*"; + globalThis.delegator.executeShellCommand(cmdrm, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var str7 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility7", + }; + startService(TAG, str7); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_0900-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_1000 + * @tc.name Incorrect moduleName passed in + * @tc.desc Function test + * @tc.level 1 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_1000", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_1000-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_1000"; + var str8 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility8", + }; + startService(TAG, str8); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onFailed"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_1000-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_1100 + * @tc.name Pass in parameters + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_1100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_1100-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_1100"; + var cmdmyapp7 = "cp data/test/ConnectStageMyApplication7.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp7, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str7 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility7", + }; + startService(TAG, str7); + setTimeout(function () { + + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_1100-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_Stage_ConnectAbility_Ext_1200 + * @tc.name The atomic service of the target differs only by moduleName + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_ConnectAbility_Ext_1200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_ConnectAbility_Ext_1200-------------"); + TAG = "FreeInstall_Stage_ConnectAbility_Ext_1200"; + var cmdmyapp8 = "cp data/test/ConnectStageMyApplication8.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmdmyapp8, (err: any, d: any) => { + console.info(TAG + " executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(1000); + var str9 = { + "bundleName": "com.example.myapplication.hmservice", + "abilityName": "com.example.myapplication.ServiceAbility9", + }; + startService(TAG, str9); + setTimeout(function () { + console.info(TAG + " SubscribeCallBack data: " + JSON.stringify(dataAssert)); + expect(dataAssert).assertEqual("onConnect"); + console.log("------------end FreeInstall_Stage_ConnectAbility_Ext_1200-------------"); + done(); + }, 4000); + }); + } + ) +} + diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ListTest.ets b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ListTest.ets new file mode 100644 index 000000000..16cdee817 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/ets/test/ListTest.ets @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ConnectAbilityTest from './ConnectAbilityTest' +import ConnectAbilityTest_Ext from './ConnectAbilityTest_Ext' + +export default function List(context) { + ConnectAbilityTest(context) + ConnectAbilityTest_Ext(context) + +} + diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/module.json new file mode 100644 index 000000000..47f0bca2d --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/module.json @@ -0,0 +1,133 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.myapplication.hmservice.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "orientation": "portrait", + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + }, + { + "name": "com.example.myapplication.MainAbility2", + "srcEntrance": "./ets/MainAbility2/MainAbility2.ts", + "description": "$string:MainAbility2_desc", + "icon": "$media:icon", + "label": "$string:MainAbility2_label" + } + ], + "extensionAbilities": [ + { + "name": "com.example.myapplication.ServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility2", + "srcEntrance": "./ets/ServiceAbility2/ServiceAbility2.ts", + "label": "$string:form_ServiceAbility2_label", + "description": "$string:form_ServiceAbility2_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility3", + "srcEntrance": "./ets/ServiceAbility3/ServiceAbility3.ts", + "label": "$string:form_ServiceAbility3_label", + "description": "$string:form_ServiceAbility3_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility4", + "srcEntrance": "./ets/ServiceAbility4/ServiceAbility4.ts", + "label": "$string:form_ServiceAbility4_label", + "description": "$string:form_ServiceAbility4_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility5", + "srcEntrance": "./ets/ServiceAbility5/ServiceAbility5.ts", + "label": "$string:form_ServiceAbility5_label", + "description": "$string:form_ServiceAbility5_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility6", + "srcEntrance": "./ets/ServiceAbility6/ServiceAbility6.ts", + "label": "$string:form_ServiceAbility6_label", + "description": "$string:form_ServiceAbility6_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility7", + "srcEntrance": "./ets/ServiceAbility7/ServiceAbility7.ts", + "label": "$string:form_ServiceAbility7_label", + "description": "$string:form_ServiceAbility7_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility8", + "srcEntrance": "./ets/ServiceAbility8/ServiceAbility8.ts", + "label": "$string:form_ServiceAbility8_label", + "description": "$string:form_ServiceAbility8_desc", + "type": "service" + }, + { + "name": "com.example.myapplication.ServiceAbility9", + "srcEntrance": "./ets/ServiceAbility9/ServiceAbility9.ts", + "label": "$string:form_ServiceAbility9_label", + "description": "$string:form_ServiceAbility9_desc", + "type": "service" + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.MANAGE_MISSIONS" + }, + { + "name": "ohos.permission.INSTALL_BUNDLE" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "name": "ohos.permission.REMOVE_CACHE_FILES" + }, + { + "name": "ohos.permission.LISTEN_BUNDLE_CHANGE" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..4f0ccddf1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,96 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "MainAbility2_desc", + "value": "description" + }, + { + "name": "MainAbility2_label", + "value": "label" + }, + { + "name": "form_ServiceAbility_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility2_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility2_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility3_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility3_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility4_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility4_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility5_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility5_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility6_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility6_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility7_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility7_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility8_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility8_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility9_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility9_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/connectabilitystagetest/freeinstallconnectabilitystagetest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 = " + + transactId); + // 解析出BMS传递的bundleName + targetbundleName = targetAbilityInfo.targetInfo.bundleName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->bundleName = " + + targetbundleName); + // 解析出BMS传递的abilityName + targetabilityName = targetAbilityInfo.targetInfo.abilityName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->abilityName = " + + targetabilityName); + // 解析出BMS传递的moduleName + targetmoduleName = targetAbilityInfo.targetInfo.moduleName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->moduleName = " + + targetmoduleName); + + // 解析出BMS传递的扩展信息的错误码 + let targeterrcode = targetAbilityInfo.targetExtSetting.extInfo.Servicecenter_error_code; + console.info("ServiceAbility serviceCenter targetAbilityInfo->targetExtSetting->extInfo->" + + "Servicecenter_error_code = " + targeterrcode); + if (targeterrcode === undefined) { + exterrcode = 0; + console.info("ServiceAbility serviceCenter exterrcode = " + exterrcode); + } else { + exterrcode = parseInt(targeterrcode); + console.info("ServiceAbility serviceCenter exterrcode = " + exterrcode); + } + + // 获取BSM传递的callback对象 + let op2 = data.readRemoteObject(); + console.info("ServiceAbility serviceCenter sendRequest op2 = " + op2); + + console.info("ServiceAbility serviceCenter sendRequest code = " + code); + + if (code == 2 || code == 4 ) { // 2为免安装 3为检查更新 4为安装 + targetInfoCheck(transactId, op2) + } else if (code == 3) { + serviceCheckUpdate(transactId, op2); + } +// else if (code == 4) { +// updateInfoCheck(transactId, op2); +// } + return true; + } +} + +async function targetInfoCheck(transactId: string, remoteObj: any) { + if (exterrcode != 0) { + console.info("ServiceAbility serviceCenter targetInfoCheck exterrcode = " + exterrcode); + let retcode = exterrcode; + console.info("ServiceAbility serviceCenter targetInfoCheck retcode = " + retcode); + sendCallBack(transactId, remoteObj, retcode); + } + else if ( (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication6.ServiceAbility" && targetmoduleName === "myapplication6" + )) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication6.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.ServiceAbility_feature" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.MainAbility" && targetmoduleName === "myapplication1" + )) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.ServiceAbility_feature" && targetmoduleName === "myapplication3" + ) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication3.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication5.ServiceAbility5" && targetmoduleName === "myapplication5" + ) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication5.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication7.ServiceAbility" && targetmoduleName === "myapplication7" + ) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication7.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication8.ServiceAbility" && targetmoduleName === "myapplication8" + ) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication8.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication7.ServiceAbility" && targetmoduleName === "myapplication9" + ) { + path = ["/data/storage/el2/base/haps/entry/files/ConnectFaMyApplication9.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //connect stage + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility" && targetmoduleName === "myapplication" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication0.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility_feature" && targetmoduleName === "myapplication1" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility_feature" && targetmoduleName === "myapplication3" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication3.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility5" && targetmoduleName === "myapplication5" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication5.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility6" && targetmoduleName === "myapplication6" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication6.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility7" && targetmoduleName === "myapplication7" + ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication7.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "ServiceAbility6" && targetmoduleName === "myapplication8" + ) ){ + path = ["/data/storage/el2/base/haps/entry/files/ConnectStageMyApplication8.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_stage.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "com.ohos.atomic1.MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_FA.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.startAbilityForResult.hmservice" && + targetabilityName === "MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/StageResultMyApplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.open.harmony.startAbilityForResult" && + targetabilityName === "com.example.myapplication1.MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/FaResultMyApplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if (targetbundleName === "com.open.harmony.startAbility" && + targetabilityName === "com.example.myapplication1.MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/FaMyApplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.ServiceAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "hm1" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm3.MainAbility" && targetmoduleName === "hm3" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm2.MainAbility" && targetmoduleName === "hnm2" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "hm3MainAbility" && targetmoduleName === "hm3" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "hnm2MainAbility" && targetmoduleName === "hnm2" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication.MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication1.MainAbility" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication2.MainAbility" && targetmoduleName === "myapplication2" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility1" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility2" && targetmoduleName === "myapplication2" + ) + || (targetbundleName === "com.open.harmony.packagemag.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "myapplication1" + ) + ) { + path = ["/data/storage/el2/base/haps/entry/files"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm2.MainAbility" && targetmoduleName === "hm4" + ) { + path = ["/data/storage/el2/base/haps/entry/files/AtomizationFaHm4.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationA.hmserviceA" && + targetabilityName === "com.example.myapplicationA.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationA.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/AtomizationResultA.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationB.hmserviceB" && + targetabilityName === "com.example.myapplicationB.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationB.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/B.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationC.hmserviceC" && + targetabilityName === "com.example.myapplicationC.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationC.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/C.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else { + sendCallBack(transactId, remoteObj, -1); + } +} + +async function updateInfoCheck(transactId: string, remoteObj: any) { + //startAbility 高低版本 + if (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/sign-core-qianyi-allv2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 stage模型 + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_stage_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 FA模型 + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "com.ohos.atomic1.MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_FA_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 同应用 Stage模型 + else if (targetbundleName === "com.ohos.myapplication.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "myapplication" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp_stage_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + + else { + sendCallBack(transactId, remoteObj, -1); + } +} + +async function serviceInstall(transactId: string, remoteObj: any) { + console.info('ServiceAbility serviceCenter install start'); + // let bundleFilePaths = ["/data/storage/el2/base/haps/entry/files/"]; + let bundleFilePaths = path; + let param = { + userId: 100, + installFlag: 16, + isKeepData: false + } + let installer = await bundle.getBundleInstaller(); + installer.install(bundleFilePaths, param, (err: any, data: any) => { + console.info('ServiceAbility serviceCenter install. Data status: ' + JSON.stringify(data.status)); + console.info('ServiceAbility serviceCenter install. Data statusMessage: ' + JSON.stringify(data.statusMessage)); + console.info('ServiceAbility serviceCenter install. bundleFilePaths:' + JSON.stringify(bundleFilePaths)); + console.info('ServiceAbility serviceCenter install. param:' + JSON.stringify(param)); + console.info('ServiceAbility serviceCenter install. Cause:' + JSON.stringify(err)); + sendcode = parseInt(err.code); + if (sendcode === -1) { + sendcode = -5; + } + console.info('ServiceAbility serviceCenter install. code:' + sendcode); + bundle.setModuleUpgradeFlag(targetbundleName, targetmoduleName, 0) + .then((data) => { + console.info('ServiceAbility serviceCenter install flag bundleName : ' + JSON.stringify(targetbundleName) + + ', moduleName : ' + JSON.stringify(targetmoduleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag method, data: ' + JSON.stringify(data)); + }).catch((error) => { + console.info('ServiceAbility serviceCenter install flag bundleName : ' + JSON.stringify(targetbundleName) + + ', moduleName : ' + JSON.stringify(targetmoduleName)); + console.error('ServiceAbility serviceCenter UpgradeFlag method, error: ' + JSON.stringify(error)); + }); + console.info("ServiceAbility serviceCenter serviceInstall callBack obj = " + remoteObj); + console.info("ServiceAbility serviceCenter serviceInstall code = " + sendcode); + sendCallBack(transactId, remoteObj, sendcode); + }); + +} + +async function serviceCheckUpdate(transactId: string, remoteObj: any) { + console.info('ServiceAbility serviceCenter serviceCheckUpdate start'); + bundle.setModuleUpgradeFlag(targetbundleName, targetmoduleName, 1) + .then((data) => { + console.info('ServiceAbility serviceCenter UpgradeFlag bundleName value: ' + JSON.stringify(targetbundleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag moduleName value: ' + JSON.stringify(targetmoduleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag method, data: ' + JSON.stringify(data)); + }).catch((error) => { + console.info('ServiceAbility serviceCenter UpgradeFlag bundleName value: ' + JSON.stringify(targetbundleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag moduleName value: ' + JSON.stringify(targetmoduleName)); + console.error('ServiceAbility serviceCenter UpgradeFlag method, error: ' + JSON.stringify(error)); + }); + setTimeout(function () { + console.info("ServiceAbility serviceCenter serviceCheckUpdate sendCallBack sleep 35000 !!!") + sendCallBack(transactId, remoteObj, 0); + },35000) +} + +function sendCallBack(transactId: string, remoteObj: any, code: number) { + console.info("ServiceAbility serviceCenter sendCallBack remoteObj = " + remoteObj); + let option1 = new rpc.MessageOption(); + let data1 = rpc.MessageParcel.create(); + let reply1 = rpc.MessageParcel.create(); + // 写入token + // data1.writeInterfaceToken("ohos.aafwk.IAtomicServiceStatusCallback"); + data1.writeInterfaceToken("abilitydispatcherhm.openapi.hapinstall.IHapInstallCallback"); + // 将BMS传递的transactId返回给BMS + installResult.result.transactId = transactId; + installResult.result.retCode = code; + console.info('ServiceAbility serviceCenter code:' + code); + let returnString = JSON.stringify(installResult); + console.info("ServiceAbility serviceCenter sendRequest returnString = " + returnString); + // 返回给BMS的参数 -- json字符串 + data1.writeString(returnString); + remoteObj.sendRequest(1, data1, reply1, option1, (err, result) => { + console.info("ServiceAbility serviceCenter sendRequest result:" + result + ",err:" + err); + if (err === 0) { + console.info("ServiceAbility serviceCenter sendRequest got result"); + } + }); +} + + + +export default class ServiceExtAbility extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ServiceAbility serviceCenter onRequest'); + } + + onConnect(want) { + // console.info('onConnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onConnect'); + return new StubTest("test"); + } + + onDisconnect(want) { + console.info('onDisconnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onDisconnect'); + } + + onReconnect(want) { + console.info('onReconnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onReconnect'); + } + + onDestroy() { + console.info('ServiceAbility serviceCenter onDestroy'); + } +} diff --git a/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..101a1580a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/ets/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello serviceCenter' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/module.json new file mode 100644 index 000000000..a004f10a8 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/module.json @@ -0,0 +1,48 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone" + ], + "requestPermissions": [ {"name": "ohos.permission.INSTALL_BUNDLE"}], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "HapInstallServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service", + "visible": true, + "icon": "$media:icon" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..c3d85e541 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "Mockservice" + }, + { + "name": "form_ServiceAbility_desc", + "value": "service" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/mockservice/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 = " + + transactId); + // 解析出BMS传递的bundleName + targetbundleName = targetAbilityInfo.targetInfo.bundleName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->bundleName = " + + targetbundleName); + // 解析出BMS传递的abilityName + targetabilityName = targetAbilityInfo.targetInfo.abilityName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->abilityName = " + + targetabilityName); + // 解析出BMS传递的moduleName + targetmoduleName = targetAbilityInfo.targetInfo.moduleName; + console.info("ServiceAbility serviceCenter sendRequest targetAbilityInfo->targetInfo->moduleName = " + + targetmoduleName); + + // 解析出BMS传递的扩展信息的错误码 + let targeterrcode = targetAbilityInfo.targetExtSetting.extInfo.Servicecenter_error_code; + console.info("ServiceAbility serviceCenter targetAbilityInfo->targetExtSetting->extInfo->" + + "Servicecenter_error_code = " + targeterrcode); + if (targeterrcode === undefined) { + exterrcode = 0; + console.info("ServiceAbility serviceCenter exterrcode = " + exterrcode); + } else { + exterrcode = parseInt(targeterrcode); + console.info("ServiceAbility serviceCenter exterrcode = " + exterrcode); + } + + // 获取BSM传递的callback对象 + let op2 = data.readRemoteObject(); + console.info("ServiceAbility serviceCenter sendRequest op2 = " + op2); + + console.info("ServiceAbility serviceCenter sendRequest code = " + code); + + if (code == 2 || code == 4 ) { // 2为免安装 3为检查更新 4为安装 +// targetInfoCheck(transactId, op2) + } else if (code == 3) { +// serviceCheckUpdate(transactId, op2); + } +// else if (code == 4) { +// updateInfoCheck(transactId, op2); +// } + return true; + } +} + +async function targetInfoCheck(transactId: string, remoteObj: any) { + if (exterrcode != 0) { + console.info("ServiceAbility serviceCenter targetInfoCheck exterrcode = " + exterrcode); + let retcode = exterrcode; + console.info("ServiceAbility serviceCenter targetInfoCheck retcode = " + retcode); + sendCallBack(transactId, remoteObj, retcode); + } + else if ((targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication.ServiceAbility" && targetmoduleName === "myapplication" + ) || (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication6.ServiceAbility" && targetmoduleName === "myapplication6" + )) { + path = ["/data/storage/el2/base/haps/entry/files/myapp0.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.ServiceAbility_feature" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.MainAbility" && targetmoduleName === "myapplication1" + )) { + path = ["/data/storage/el2/base/haps/entry/files/myapp1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication1.ServiceAbility_feature" && targetmoduleName === "myapplication3" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp3.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication5.ServiceAbility5" && targetmoduleName === "myapplication5" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp5.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication6.ServiceAbility6" && targetmoduleName === "myapplication6" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp6.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication7.ServiceAbility" && targetmoduleName === "myapplication7" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp7.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if ((targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication6.ServiceAbility6" && targetmoduleName === "myapplication8" + ) || (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication8.ServiceAbility" && targetmoduleName === "myapplication8" + )) { + path = ["/data/storage/el2/base/haps/entry/files/myapp8.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if (targetbundleName === "com.example.myapplication.hmservice" && + targetabilityName === "com.example.myapplication7.ServiceAbility" && targetmoduleName === "myapplication9" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp9.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_stage.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "com.ohos.atomic1.MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_FA.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.startAbilityForResult.hmservice" && + targetabilityName === "MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/yuanzihua-myapplication1.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.open.harmony.startAbilityForResult" && + targetabilityName === "com.example.myapplication1.MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapplication1-FA-2900.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } else if (targetbundleName === "com.open.harmony.startAbility" && + targetabilityName === "com.example.myapplication1.MainAbility1" && targetmoduleName === "myapplication1" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapplication1-FA-s2800.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.ServiceAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "hm1" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm3.MainAbility" && targetmoduleName === "hm3" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm2.MainAbility" && targetmoduleName === "hnm2" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "hm3MainAbility" && targetmoduleName === "hm3" + ) + || (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "hnm2MainAbility" && targetmoduleName === "hnm2" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication.MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication1.MainAbility" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.example.myapplication.hmservice0" && + targetabilityName === "com.example.myapplication2.MainAbility" && targetmoduleName === "myapplication2" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility1" && targetmoduleName === "myapplication1" + ) + || (targetbundleName === "com.open.harmony.myapplication0.hmservice" && + targetabilityName === "MainAbility2" && targetmoduleName === "myapplication2" + ) + || (targetbundleName === "com.open.harmony.packagemag.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "myapplication1" + ) + ) { + path = ["/data/storage/el2/base/haps/entry/files"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.hm2.MainAbility" && targetmoduleName === "hm4" + ) { + path = ["/data/storage/el2/base/haps/entry/files/sign-core-hm4-all.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationA.hmserviceA" && + targetabilityName === "com.example.myapplicationA.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationA.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/A.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationB.hmserviceB" && + targetabilityName === "com.example.myapplicationB.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationB.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/B.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else if ((targetbundleName === "com.example.myapplicationC.hmserviceC" && + targetabilityName === "com.example.myapplicationC.MainAbility" && targetmoduleName === "entry" + ) || (targetbundleName === "com.open.harmony.myapplicationC.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "entry")) { + path = ["/data/storage/el2/base/haps/entry/files/C.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + else { + sendCallBack(transactId, remoteObj, -1); + } +} + +async function updateInfoCheck(transactId: string, remoteObj: any) { + //startAbility 高低版本 + if (targetbundleName === "com.example.qianyiyingyong.hmservice" && + targetabilityName === "com.example.qianyiyingyong.MainAbility" && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/sign-core-qianyi-allv2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 stage模型 + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_stage_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 FA模型 + else if (targetbundleName === "com.ohos.atomic1.hmservice" && + targetabilityName === "com.ohos.atomic1.MainAbility" + // && targetmoduleName === "entry" + ) { + path = ["/data/storage/el2/base/haps/entry/files/Atomic1_FA_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + //免安装更新 同应用 Stage模型 + else if (targetbundleName === "com.ohos.myapplication.hmservice" && + targetabilityName === "MainAbility" && targetmoduleName === "myapplication" + ) { + path = ["/data/storage/el2/base/haps/entry/files/myapp_stage_V2.hap"]; + console.info("ServiceAbility serviceCenter targetInfoCheck path: " + JSON.stringify(path)); + serviceInstall(transactId, remoteObj); + } + + else { + sendCallBack(transactId, remoteObj, -1); + } +} + +async function serviceInstall(transactId: string, remoteObj: any) { + console.info('ServiceAbility serviceCenter install start'); + // let bundleFilePaths = ["/data/storage/el2/base/haps/entry/files/"]; + let bundleFilePaths = path; + let param = { + userId: 100, + installFlag: 16, + isKeepData: false + } + let installer = await bundle.getBundleInstaller(); + installer.install(bundleFilePaths, param, (err: any, data: any) => { + console.info('ServiceAbility serviceCenter install. Data status: ' + JSON.stringify(data.status)); + console.info('ServiceAbility serviceCenter install. Data statusMessage: ' + JSON.stringify(data.statusMessage)); + console.info('ServiceAbility serviceCenter install. bundleFilePaths:' + JSON.stringify(bundleFilePaths)); + console.info('ServiceAbility serviceCenter install. param:' + JSON.stringify(param)); + console.info('ServiceAbility serviceCenter install. Cause:' + JSON.stringify(err)); + sendcode = parseInt(err.code); + if (sendcode === -1) { + sendcode = -5; + } + console.info('ServiceAbility serviceCenter install. code:' + sendcode); + bundle.setModuleUpgradeFlag(targetbundleName, targetmoduleName, 0) + .then((data) => { + console.info('ServiceAbility serviceCenter install flag bundleName : ' + JSON.stringify(targetbundleName) + + ', moduleName : ' + JSON.stringify(targetmoduleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag method, data: ' + JSON.stringify(data)); + }).catch((error) => { + console.info('ServiceAbility serviceCenter install flag bundleName : ' + JSON.stringify(targetbundleName) + + ', moduleName : ' + JSON.stringify(targetmoduleName)); + console.error('ServiceAbility serviceCenter UpgradeFlag method, error: ' + JSON.stringify(error)); + }); + console.info("ServiceAbility serviceCenter serviceInstall callBack obj = " + remoteObj); + console.info("ServiceAbility serviceCenter serviceInstall code = " + sendcode); + sendCallBack(transactId, remoteObj, sendcode); + }); + +} + +async function serviceCheckUpdate(transactId: string, remoteObj: any) { + console.info('ServiceAbility serviceCenter serviceCheckUpdate start'); + bundle.setModuleUpgradeFlag(targetbundleName, targetmoduleName, 1) + .then((data) => { + console.info('ServiceAbility serviceCenter UpgradeFlag bundleName value: ' + JSON.stringify(targetbundleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag moduleName value: ' + JSON.stringify(targetmoduleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag method, data: ' + JSON.stringify(data)); + }).catch((error) => { + console.info('ServiceAbility serviceCenter UpgradeFlag bundleName value: ' + JSON.stringify(targetbundleName)); + console.info('ServiceAbility serviceCenter UpgradeFlag moduleName value: ' + JSON.stringify(targetmoduleName)); + console.error('ServiceAbility serviceCenter UpgradeFlag method, error: ' + JSON.stringify(error)); + }); + setTimeout(function () { + console.info("ServiceAbility serviceCenter serviceCheckUpdate sendCallBack sleep 35000 !!!") + sendCallBack(transactId, remoteObj, 0); + },35000) +} + +function sendCallBack(transactId: string, remoteObj: any, code: number) { + console.info("ServiceAbility serviceCenter sendCallBack remoteObj = " + remoteObj); + let option1 = new rpc.MessageOption(); + let data1 = rpc.MessageParcel.create(); + let reply1 = rpc.MessageParcel.create(); + // 写入token + // data1.writeInterfaceToken("ohos.aafwk.IAtomicServiceStatusCallback"); + data1.writeInterfaceToken("abilitydispatcherhm.openapi.hapinstall.IHapInstallCallback"); + // 将BMS传递的transactId返回给BMS + installResult.result.transactId = transactId; + installResult.result.retCode = code; + console.info('ServiceAbility serviceCenter code:' + code); + let returnString = JSON.stringify(installResult); + console.info("ServiceAbility serviceCenter sendRequest returnString = " + returnString); + // 返回给BMS的参数 -- json字符串 + data1.writeString(returnString); + remoteObj.sendRequest(1, data1, reply1, option1, (err, result) => { + console.info("ServiceAbility serviceCenter sendRequest result:" + result + ",err:" + err); + if (err === 0) { + console.info("ServiceAbility serviceCenter sendRequest got result"); + } + }); +} + + + +export default class ServiceExtAbility extends ServiceExtensionAbility { + onCreate(want) { + console.info('onCreate, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onCreate'); + } + + onRequest(want, startId) { + console.info('onRequest, want: ' + want.abilityName); + console.info('onRequest, startId: ' + startId); + console.info('ServiceAbility serviceCenter onRequest'); + } + + onConnect(want) { + // console.info('onConnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onConnect'); + return new StubTest("test"); + } + + onDisconnect(want) { + console.info('onDisconnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onDisconnect'); + } + + onReconnect(want) { + console.info('onReconnect, want:' + want.abilityName); + console.info('ServiceAbility serviceCenter onReconnect'); + } + + onDestroy() { + console.info('ServiceAbility serviceCenter onDestroy'); + } +} diff --git a/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..101a1580a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/ets/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello serviceCenter' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/module.json new file mode 100644 index 000000000..a004f10a8 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/module.json @@ -0,0 +1,48 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone" + ], + "requestPermissions": [ {"name": "ohos.permission.INSTALL_BUNDLE"}], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "HapInstallServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service", + "visible": true, + "icon": "$media:icon" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..c3d85e541 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "Mockservice" + }, + { + "name": "form_ServiceAbility_desc", + "value": "service" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/mockservicetimeout/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('entry terminateself succeeded: ' + data); + }).catch((error) => { + console.error('entry terminateself failed. Cause: ' + error); + }) + }, 1000); + }, + onDestroy() { + console.info('Application onDestroy') + }, + onStartContinuation() { + console.info('onStartContinuation'); + return true; + }, + onRestoreData(data) { + console.info('onRestoreData' + data); + return true; + }, + onSaveData(data) { + console.info('onSaveData'); + return true; + }, + onCompleteContinuation(result) { + console.info('onCompleteContinuation:' + result); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/model/getRemoteDeviceModel.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/model/getRemoteDeviceModel.ets new file mode 100644 index 000000000..1588ea0a2 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/model/getRemoteDeviceModel.ets @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import deviceManager from '@ohos.distributedHardware.deviceManager'; + +var SUBSCRIBE_ID = 100; + +export default class RemoteDeviceModel { + deviceList = []; + deviceManager; + + constructor() { + } + + registerDeviceListCallback() { + if (typeof (this.deviceManager) === 'undefined') { + console.log('[dmsDemo] deviceManager.createDeviceManager begin'); + let self = this; + deviceManager.createDeviceManager('com.ohos.distributedmusicplayer', (error, value) => { + if (error) { + console.error('createDeviceManager failed.'); + return; + } + self.deviceManager = value; + self.registerDeviceListCallback_(); + console.log('[dmsDemo] createDeviceManager callback returned, error=' + error + ' value=' + JSON.stringify(value)); + }); + console.log('[dmsDemo] deviceManager.createDeviceManager end'); + } else { + this.registerDeviceListCallback_(); + } + } + + registerDeviceListCallback_(){ + console.info('[dmsDemo] registerDeviceListCallback'); + if (this.deviceManager == undefined) { + console.error('[dmsDemo] deviceManager has not initialized'); + return; + } + + console.info('[dmsDemo] getTrustedDeviceListSync begin'); + var list = this.deviceManager.getTrustedDeviceListSync(); + console.info('[dmsDemo] getTrustedDeviceListSync end, deviceList=' + JSON.stringify(list)); + if (typeof (list) != 'undefined' && typeof (list.length) != 'undefined') { + this.deviceList = list; + } + console.info('[dmsDemo] callback finished'); + } + + unregisterDeviceListCallback() { + console.info('[dmsDemo] stopDeviceDiscovery ' + SUBSCRIBE_ID); + this.deviceManager.stopDeviceDiscovery(SUBSCRIBE_ID); + this.deviceList = []; + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..b3d41d3f3 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; +import featureAbility from '@ohos.ability.featureAbility' + +async function routePage(uri) { + let options = { + uri: uri + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('QianYi Entry MainAbility V1') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage('pages/second') + }) + + Button() { + Text('同应用不需要检查targetbundlelist名单') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage('pages/third') + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async terminateSelfWithResult() { + console.info('startAbilityForResultPromise terminateSelfWithResult START'); + await featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "com.example.qianyiyingyong.MainAbility", + }, + } + ); + await featureAbility.terminateSelf(); + console.info('startAbilityForResultPromise terminateSelfWithResult END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + featureAbility.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..9dcd95189 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/third.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/third.ets new file mode 100644 index 000000000..23790bb70 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/MainAbility/pages/third.ets @@ -0,0 +1,386 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import featureAbility from '@ohos.ability.featureAbility'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import RemoteDeviceModel from '../model/getRemoteDeviceModel.ets'; +import bundleManager from '@ohos.bundle'; + +const BUNDLE_NAME = 'com.example.qianyiyingyong.hmservice'; +const ABILITY_NAME = 'com.example.qianyiyingyong.MainAbility'; +const ABILITY_NAME1 = 'com.example.hm2.MainAbility'; +const ABILITY_NAME2 = 'com.example.hm3.MainAbility'; +const MODULE_NAME_ENTRY = 'entry'; +const MODULE_NAME_HNM2 = 'hnm2'; +const MODULE_NAME_HNM3 = 'hm3'; + +let remoteDeviceId = ''; +let remoteDeviceModel = null; + +@Entry +@Component +struct Third { + private content: string = "Third Page" + private contextText: string= ''; + private localDeviceId: string= ''; + private backgroundColor = Color.Grey; + private tipsMsg = '请输入对端的deviceId'; + private isOn = false; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold); + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold); + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back(); + }); + Row() { + Text('关闭是startAbility,打开是startAbilityForResult:') + .fontSize(20) + .fontWeight(FontWeight.Bold); + + Toggle({ type: ToggleType.Switch, isOn: this.isOn }) + .width($r('app.float.wh_value_50')) + .height($r('app.float.wh_value_40')) + .onChange((isOn) => { + console.info('startAbility startAbilityPromise isOn:' + isOn); + this.isOn = isOn; + console.info('startAbility startAbilityPromise this.isOn:' + this.isOn); + }); + } + .margin({ right: $r('app.float.wh_value_15') }) + .align(Alignment.End); + TextInput({ placeholder: '请输入deviceId', text: this.contextText }) + .placeholderColor(Color.Blue) + .placeholderFont({ + size: $r('app.float.wh_value_20'), + weight: 2, + family: "sans-serif", + style: FontStyle.Normal + }) + .caretColor(Color.Blue) + .height($r('app.float.wh_value_70')) + .backgroundColor(Color.White) + .type(InputType.Normal) + .width('100%') + .fontStyle(FontStyle.Italic) + .margin({ left: $r('app.float.wh_value_15'), right: $r('app.float.wh_value_15') }) + .onChange((value: string) => { + this.contextText = value; + }); + + Text('StartAbilityPromise006,在免安装更新的时候需先设置updateModuleUpgradeFlag') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + this.updateModuleUpgradeFlag('StartAbilityPromise006','entry'); + }); + + Text('StartAbilityPromise017,本应用不同AbilityName') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'moduleName': MODULE_NAME_HNM2, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.startAbilityForResultPromise('StartAbilityPromise017', str); + } else { + this.startAbilityPromise('StartAbilityPromise017', str); + } + }); + + Text('StartAbilityPromise018,高低版本entry覆盖安装') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME, + 'moduleName': MODULE_NAME_ENTRY, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + this.startAbilityPromise('StartAbilityPromise018', str); + }); + + Text('StartAbilityPromiseKSB013,原子化服务未添加到targetBundleList里,同应用不同AbilityName') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + if ('' === remoteDeviceId && '' === this.contextText) { + this.tips(this.tipsMsg); + return; + } + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'moduleName': MODULE_NAME_HNM2, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.startAbilityForResultPromise('StartAbilityPromiseKSB013', str); + } else { + this.startAbilityPromise('StartAbilityPromiseKSB013', str); + } + }); + + Text('StartAbilityPromiseKSB006,在免安装更新的时候需先设置updateModuleUpgradeFlag') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + this.updateModuleUpgradeFlag('StartAbilityPromiseKSB006','entry'); + }); + + Text('StartAbilityPromiseKSB015 跨设备 entry覆盖安装') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME, + 'moduleName': MODULE_NAME_ENTRY, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + this.startAbilityPromise('StartAbilityPromiseKSB015', str); + }); + + Text('StartAbilityPromiseKSB016,原子化服务未添加到targetBundleList里,跨设备,同应用,对端FA的visable为false无法拉起') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + if ('' === remoteDeviceId && '' === this.contextText) { + this.tips(this.tipsMsg); + return; + } + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME2, + 'moduleName': MODULE_NAME_HNM3, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.startAbilityForResultPromise('StartAbilityPromiseKSB016', str); + } else { + this.startAbilityPromise('StartAbilityPromiseKSB016', str); + } + }); + + Text('StartAbilityPromiseKSB014,原子化服务未添加到targetBundleList里,' + + '同应用不同AbilityName,无跨设备权限(拉起应用或被拉起应用)') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'moduleName': MODULE_NAME_HNM2, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.startAbilityForResultPromise('StartAbilityPromiseKSB014', str); + } else { + this.startAbilityPromise('StartAbilityPromiseKSB014', str); + } + }); + } + .width('100%') + .height('100%') + } + + async updateModuleUpgradeFlag(tag, type1) { + console.info(tag + ' startAbility startAbilityPromise START' + JSON.stringify(type1)); + await bundleManager.setModuleUpgradeFlag("com.example.qianyiyingyong.hmservice",type1,1); + console.info(tag + ' startAbility startAbilityPromise END'); + } + + async startAbilityPromise(tag, str) { + console.info(tag + ' startAbility startAbilityPromise START' + JSON.stringify(str)); + let code; + await featureAbility.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility startAbilityPromise END'); + } + + async startAbilityCallBack(tag, str) { + let code; + console.info(tag + 'startAbility startAbilityCallBack START' + JSON.stringify(str)); + featureAbility.startAbility(str, (err, data) => { + code = data; + if (err) { + console.error(tag + ' Operation failed. CallBack Cause:' + JSON.stringify(err)); + code = err; + } + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info('Operation successful. CallBack Data: ' + JSON.stringify(data)) + }); + console.info(tag + 'startAbility startAbilityCallBack END'); + } + + async startAbilityForResultPromise(tag, str) { + console.info(tag + ' startAbilityForResultPromise START' + JSON.stringify(str)); + let newData; + await featureAbility.startAbilityForResult(str) + .then((data) => { + this.tips('成功'); + newData = data; + console.info(tag + ' startAbilityForResultPromise Operation successful. Promise Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(tag + ' startAbilityForResultPromise Operation failed. Promise Cause: ' + JSON.stringify(error)); + newData = error; + this.tips('失败'); + }) + console.info(tag + ' startAbilityForResultPromise Operation newData Promise: ' + JSON.stringify(newData)); + console.info(tag + ' startAbilityForResultPromise startAbilityPromise END'); + } + + async startAbilityForResultCallBack(tag, str) { + console.info(tag + 'startAbilityForResultCallBack START' + JSON.stringify(str)); + featureAbility.startAbilityForResult(str, (err, data) => { + console.info(tag + 'startAbilityForResultCallBack Operation CallBack Data: ' + JSON.stringify(data)) + if (err) { + this.tips('失败'); + console.info(tag + 'startAbilityForResultCallBack Operation CallBack err:' + JSON.stringify(err)); + return; + } + this.tips('成功'); + }); + console.info(tag + 'startAbilityForResultCallBack END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } + + onBackPress() { + console.log('[startAbility] get device onBackPress in'); + this.contextText = ''; + console.log('[startAbility] get device onBackPress out'); + } + + private aboutToAppear(): void { + console.info('[startAbility] aboutToAppear in'); + remoteDeviceModel = new RemoteDeviceModel; + remoteDeviceModel.registerDeviceListCallback(); + console.info('[startAbility] aboutToAppear end'); + } + + onPageShow(): void{ + console.info('[startAbility] onPageShow in'); + let numDevices = remoteDeviceModel.deviceList.length; + if (numDevices === 0) { + this.tips('onStartRemoteAbility no device found') + return; + } + remoteDeviceId = remoteDeviceModel.deviceList[0].deviceId; + console.info('[startAbility] onPageShow deviceId is ' + remoteDeviceId); + } + + private aboutToDisappear() { + console.info('[startAbility] aboutToDisappear in'); + remoteDeviceModel.unregisterDeviceListCallback(); + console.info('[startAbility] aboutToDisappear out'); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/ServiceAbility/service.ts b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/ServiceAbility/service.ts new file mode 100644 index 000000000..20fa2029c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/ets/ServiceAbility/service.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onStart() { + console.info('qianyiyingyong ServiceAbility onStart'); + }, + onStop() { + console.info('qianyiyingyong ServiceAbility onStop'); + }, + onCommand(want, startId) { + console.info('qianyiyingyong ServiceAbility onCommand'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/float.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/float.json new file mode 100644 index 000000000..6f8d0c206 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/float.json @@ -0,0 +1,124 @@ +{ + "float": [ + { + "name": "wh_value_1", + "value": "1" + }, + { + "name": "wh_value_5", + "value": "5" + }, + { + "name": "wh_value_10", + "value": "10" + }, + { + "name": "wh_value_15", + "value": "15" + }, + { + "name": "wh_value_20", + "value": "20" + }, + { + "name": "wh_value_30", + "value": "30" + }, + { + "name": "wh_value_40", + "value": "40" + }, + { + "name": "wh_value_50", + "value": "50" + }, + { + "name": "wh_value_60", + "value": "60" + }, + { + "name": "wh_value_65", + "value": "65" + }, + { + "name": "wh_value_70", + "value": "70" + }, + { + "name": "wh_value_80", + "value": "80" + }, + { + "name": "wh_value_100", + "value": "100" + }, + { + "name": "wh_value_130", + "value": "1300" + }, + { + "name": "wh_value_160", + "value": "160" + }, + { + "name": "wh_value_230", + "value": "230" + }, + { + "name": "wh_value_280", + "value": "280" + }, + { + "name": "wh_value_390", + "value": "390" + }, + { + "name": "wh_value_400", + "value": "400" + }, + { + "name": "font_35", + "value": "35" + }, + { + "name": "font_18", + "value": "18" + }, + { + "name": "font_20", + "value": "20" + }, + { + "name": "font_21", + "value": "21" + }, + { + "name": "font_22", + "value": "22" + }, + { + "name": "font_24", + "value": "24" + }, + { + "name": "font_28", + "value": "28" + }, + { + "name": "font_50", + "value": "50" + }, + { + "name": "control_common_font_size", + "value": "20" + }, + { + "name": "slider_text_padding_left", + "value": "5" + }, + { + "name": "volume_border_radius", + "value": "15" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..053265439 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "迁移111" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + }, + { + "name": "description_serviceability", + "value": "hap sample empty service" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfaentry/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('hm2 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('hm2 terminateself failed. Cause: ' + error); + }) + }, 1000); + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..855b203ac --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,145 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; +import featureAbility from '@ohos.ability.featureAbility' +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; + +const BUNDLE_NAME = 'com.example.qianyiyingyong.hmservice'; +const ABILITY_NAME1 = 'com.example.hm2.MainAbility'; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + + private backgroundColor = Color.Grey; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('hm2') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('HNM2 next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + + Text('startAbilityPromiseSameBundleName1 本设备,feature覆盖安装') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + this.startAbilityPromise('startAbilityPromiseSameBundleName1', str); + + }); + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + featureAbility.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } + + async terminateSelfWithResult() { + console.info('startAbilityForResultPromise terminateSelfWithResult START'); + await featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "com.example.hm2.MainAbility", + }, + } + ); + await featureAbility.terminateSelf(); + console.info('startAbilityForResultPromise terminateSelfWithResult END'); + } + + async startAbilityPromise(tag, str) { + console.info(tag + ' startAbility startAbilityPromise START' + JSON.stringify(str)); + let code; + await featureAbility.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility startAbilityPromise END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..6e0296ed6 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "HNM2 Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..8380229de --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "hnm2_MainAbility", + "value": "相同BN不同AN" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('hm4 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('hm4 terminateself failed. Cause: ' + error); + }) + }, 1000); + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..019e8a395 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('hm4') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..e728121a1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..f7546310b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "hm4_MainAbility", + "value": "hm4_MainAbility" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/atomizationfahm4/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info('MainAbility1 terminateself succeeded: ' + data); + }).catch((error) => { + console.error('MainAbility1 terminateself failed. Cause: ' + error); + }) + }, 1000); + }, + + onActive(){ + console.info('onActive'); + }, + + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..fb5ac5841 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Same app - not need to check targetbundlelist' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..0ab9f9b1d --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "myapplication1_desc", + "value": "description" + }, + { + "name": "MainAbility1_desc", + "value": "description" + }, + { + "name": "MainAbility1_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/famyapplication1/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationFaEntry.hap", + "AtomizationFaHm2.hap -> /data/test/AtomizationFaHm2.hap", + "AtomizationFaHm4.hap -> /data/test/AtomizationFaHm4.hap", + "MockService.hap -> /data/test/MockService.hap", + "MockServiceTimeout.hap -> /data/test/MockServiceTimeout.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/config.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/config.json new file mode 100644 index 000000000..97395cdbc --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/config.json @@ -0,0 +1,139 @@ +{ + "app": { + "targetBundleList": [ + "com.example.qianyiyingyong.hmservice" + ], + "vendor": "example", + "bundleName": "com.open.harmony.startAbility", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 8, + "releaseType": "Release", + "target": 8 + } + }, + "deviceConfig": {}, + "module": { + "mainAbility": ".MainAbility", + "deviceType": [ + "phone", + "tablet" + ], + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "formsEnabled": false, + "label": "$string:MainAbility_label", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "srcPath": "PageAbility", + "name": ".PageAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:PageAbility_desc", + "formsEnabled": false, + "label": "$string:PageAbility_label", + "type": "page", + "launchType": "standard" + }, + { + "srcPath": "ServiceAbility", + "name": "com.open.harmony.startAbility.ServiceAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:ServiceAbility_desc", + "type": "service" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "package": "com.open.harmony.startAbility", + "srcPath": "", + "name": ".entry", + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".PageAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "reqPermissions": [ + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.MANAGE_MISSIONS" + }, + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.INSTALL_BUNDLE" + }, + { + "reason": "need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "reason": "need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE", + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "reason": "need use ohos.permission.REMOVE_CACHE_FILES", + "name": "ohos.permission.REMOVE_CACHE_FILES" + }, + { + "reason": "need use ohos.permission.LISTEN_BUNDLE_CHANGE", + "name": "ohos.permission.LISTEN_BUNDLE_CHANGE" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..e50dc2a89 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..8800e5241 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,85 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import file from '@system.file'; +import {Core, ExpectExtend, InstrumentLog, ReportExtend,expect} from "deccjsunit/index"; +import testsuite from "../test/List.test"; +import featureAbility from "@ohos.ability.featureAbility"; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + Want.parameters.timeout = 50000; + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text(' FA- StartAbility TEST ') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..91ea52129 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import startAbilityTest from "./StartAbility.test"; +import startAbilityTest2 from "./StartAbility.test2"; + +export default function testsuite() { + startAbilityTest(); + startAbilityTest2(); + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets new file mode 100644 index 000000000..d38e9f56d --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets @@ -0,0 +1,1126 @@ + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import abilityManager from '@ohos.application.abilityManager'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import commonEvent from '@ohos.commonEvent'; + +export default function startAbilityTest() { + + describe('startAbilityTest', function () { + + console.info("-------------FA model--> startAbilityXTS Test start----------------") + + var TAG = ""; + + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + var subscriber; + var result; + var subscribeInfo = { + events: ["service_event"] + }; + + function SubscribeCallBack(err, data) { + if (err.code) { + console.error("Testevent subscribe failed " + JSON.stringify(err)); + } else { + console.info("Testevent subscribe " + JSON.stringify(data)); + for (var key1 in data.parameters) { + console.info("Testevent data.parameters[key] is :" + data.parameters[key1]) + if (data.parameters[key1] === "onSuccess") { + result = "onSuccess" + } + } + } + } + + function CreateSubscriberCallBack(err, commonEventSubscriber) { + if (err.code) { + console.error("Testevent createSubscriber failed " + JSON.stringify(err)); + } else { + console.info("Testevent createSubscriber"); + subscriber = commonEventSubscriber; + commonEvent.subscribe(subscriber, SubscribeCallBack); + } + } + + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityTest after each called"); + if ("FreeInstall_FA_Local_StartAbility_0200" === TAG || + "FreeInstall_FA_Local_StartAbility_0500" === TAG || + "FreeInstall_FA_Local_StartAbility_0700" === TAG || + "FreeInstall_FA_Local_StartAbility_0800" === TAG || + "FreeInstall_FA_Local_StartAbility_1000" === TAG || + "FreeInstall_FA_Local_StartAbility_1200" === TAG || + "FreeInstall_FA_Local_StartAbility_1400" === TAG || + "FreeInstall_FA_Local_StartAbility_1600" === TAG || + "FreeInstall_FA_Local_StartAbility_1800" === TAG || + "FreeInstall_FA_Local_StartAbility_2200" === TAG || + "FreeInstall_FA_Local_StartAbility_3000" === TAG || + "FreeInstall_FA_Local_StartAbility_3400" === TAG || + "FreeInstall_FA_Local_StartAbility_3600" === TAG || + "FreeInstall_FA_Local_StartAbility_3700" === TAG || + "FreeInstall_FA_Local_StartAbility_3800" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + + if ("FreeInstall_FA_Local_StartAbility_3800" === TAG) { + var cmd5 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await sleep(500); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0100 + * @tc.name The deviceid passed in is null, so the installation free process is implemented + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0100", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0100-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0100"; + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0200 + * @tc.name The passed in deviceid is empty, and the installed apps are automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0200", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0200-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0200"; + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0300 + * @tc.name The deviceid passed in is empty. There is no need to install or installed HAP package + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0300", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0300-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0300"; + var cmd300 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd300, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let wrong; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(1000); + expect(wrong.code).assertEqual(4); + console.info("------------end FreeInstall_FA_Local_StartAbility_0300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0400 + * @tc.name Do not transfer deviceid to realize installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0400", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0400-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0400"; + var cmd400 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd400, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0500 + * @tc.name The installed application will be automatically pulled up without transmitting the deviceid + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0500", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0500-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0500"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0600 + * @tc.name Manually obtain and pass in the deviceid of the device to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0600", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0600-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0600"; + var deviceId = ""; + await abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceId:' + JSON.stringify(data.ability.deviceId)); + deviceId = data.ability.deviceId; + }) + await sleep(1000); + let details; + var str = { + 'want': { + "deviceId": deviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0700 + * @tc.name Manually obtain and pass in the deviceid of the device, + and the installed application will be automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0700", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0700-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0700"; + var deviceId = ""; + await abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceId:' + JSON.stringify(data.ability.deviceId)); + deviceId = data.ability.deviceId; + }) + await sleep(1000); + let details; + var str = { + 'want': { + "deviceId": deviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0800 + * @tc.name Without passing deviceid, pull up the HAP with the same bundlename and different + abilityname as the entry to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0800", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0800-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0800"; + var cmd800 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd800, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd801 = "cp data/test/AtomizationFaHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd801, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0800-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_0900 + * @tc.name Do not transfer deviceid, use callback to realize installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_0900", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_0900-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_0900"; + var cmd900 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaHm2.hap"; + delegator.executeShellCommand(cmd900, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd901 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd901, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str, (error, data) => { + console.log(TAG + ": startAbility err: " + JSON.stringify(error) + ",data: " + JSON.stringify(data)); + details = data; + }) + setTimeout(function () { + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_0900-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1000 + * @tc.name Do not transmit deviceid, and use callback to automatically pull up installed applications + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1000", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1000-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1000"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str, (error, data) => { + console.log(TAG + ": startAbility err: " + JSON.stringify(error) + ",data: " + JSON.stringify(data)); + details = data; + }) + setTimeout(function () { + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_1000-------------"); + done(); + }, 4000); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1100 + * @tc.name Flags=1717 of the incoming error. There is a hap package that needs to + be installed free under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1100", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1100-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1100"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": 1717, + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_1100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1200 + * @tc.name Bad flags=1717 passed in, atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1200", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1200-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1200"; + var cmd1200 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd1200, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": 1717, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_1200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1300 + * @tc.name Flags= '94.31' of the incoming error. There is a hap package that + needs to be installed free under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1300", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1300-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1300"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '94.31' + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_1300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1400 + * @tc.name Flags= '94.31' of incoming error, atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1400", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1400-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1400"; + var cmd1400 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd1400, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '94.31' + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_1400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1500 + * @tc.name Flags= '' of the incoming error. There is a hap package that needs to be + installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1500", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1500-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1500"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '' + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_1500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1600 + * @tc.name Bad flags= ', atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1600", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1600-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1600"; + var cmd1600 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd1600, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '' + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_1600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1700 + * @tc.name No flag is transmitted, and there are HAP packages that need to be installed under + the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1700", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1700-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1700" + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry" + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_1700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1800 + * @tc.name No flag is transmitted, and the atomized HAP package is installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1800", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1800-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1800"; + var cmd1800 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd1800, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_1800-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_2100 + * @tc.name The parameters field is passed in the want to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_2100", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_2100-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_2100"; + let details; + var str = { + 'want': { + 'bundleName': "com.example.qianyiyingyong.hmservice", + 'abilityName': "com.example.qianyiyingyong.MainAbility", + 'moduleName': "entry", + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + 'parameters': { + "name": "1111", + "Ext2": "ExtValue2", + "site": "很开心看到你!" + } + } + }; + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + details = data; + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_2100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_2200 + * @tc.name The parameters field is passed in the want, and the installed applications + are automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_2200", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_2200-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_2200"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + "parameters": { + "name": "1111", + "Ext2": "ExtValue2", + "site": "很开心看到你!" + } + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_2200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3000 + * @tc.name There are hapa and hapb with the same bundlename and abilityname and different modulenames. + Under the specified path, there are hapa with correct input parameters that need not be installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3000", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3000-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3000"; + var cmd3000 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd3000, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3001 = "cp data/test/AtomizationFaHm4.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3001, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hm4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_3000-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3100 + * @tc.name There are hapa and hapb with the same bundlename and abilityname and different modulenames. + Hapb with input parameter error exists in the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3100", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3100-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3100"; + var cmd3100 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaHm4.hap"; + delegator.executeShellCommand(cmd3100, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3101 = "cp data/test/AtomizationFaHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3101, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hm4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(4); + console.info("------------end FreeInstall_FA_Local_StartAbility_3100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3200 + * @tc.name Transfer wrong moduleName + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3200", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3200-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3200"; + var cmd3200 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaHm2.hap"; + delegator.executeShellCommand(cmd3200, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3201 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3201, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "hnm", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_3200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3300 + * @tc.name Do not transfer moduleName. There are HAP packages that need not be + installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3300", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3300-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3300"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(1); + console.info("------------end FreeInstall_FA_Local_StartAbility_3300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3400 + * @tc.name Do not transfer moduleName. Atomized HAP package is installed. Start hap successfully. + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3400", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3400-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3400"; + var cmd3400 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd3400, (err: any, d: any) => { + console.info("executeShellCommand3400 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_3400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3500 + * @tc.name Transfer abilityStartSetting, so the installation free process is implemented + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3500", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3500-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3500"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_3500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3600 + * @tc.name Transfer abilityStartSetting, so the installation free process is implemented + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3600", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3600-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3600"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_3600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3700 + * @tc.name Service to pull up the service of the atomized service to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3700", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3700-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3700"; + commonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); + var str = { + 'want': { + "bundleName": "com.open.harmony.startAbility", + "abilityName": "com.open.harmony.startAbility.ServiceAbility", + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(result).assertEqual("onSuccess"); + console.info("------------end FreeInstall_FA_Local_StartAbility_3700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_3800 + * @tc.name Add BACKGROUND flags, free install successfully. + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_3800", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_3800-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_3800"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_WITH_BACKGROUND_MODE|wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(details).assertEqual(0); + console.info("------------end FreeInstall_FA_Local_StartAbility_3800-------------"); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test2.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test2.ets new file mode 100644 index 000000000..eedbb2ed6 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/StartAbility.test2.ets @@ -0,0 +1,236 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import commonEvent from '@ohos.commonEvent'; + +export default function startAbilityTest2() { + + describe('startAbilityTest2', function () { + + var TAG = ""; + + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityTest after each called"); + if ("FreeInstall_FA_Local_StartAbility_2000" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + + if ("FreeInstall_FA_Local_StartAbility_2500" === TAG) { + var cmd5 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await sleep(500); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_1900 + * @tc.name The current service is not in the foreground. Page a jumps to page B first. + There are HAP packages that need not be installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_1900", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_1900-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_1900"; + let wrong; + var str1 = { + 'want': { + "bundleName": "com.open.harmony.startAbility", + "abilityName": "com.open.harmony.startAbility.PageAbility", + "moduleName": "entry", + } + } + featureAbility.startAbility(str1) + .then((data) => { + console.info(TAG + ' StartAbility successful. Promise Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await sleep(3000); + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(13); + console.info("------------end FreeInstall_FA_Local_StartAbility_1900-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_2000 + * @tc.name The current service is not in the foreground. Page a jumps to page B first. + The atomized HAP package has been installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_2000", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_2000-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_2000"; + var cmd2000 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd2000, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let wrong; + var str1 = { + 'want': { + "bundleName": "com.open.harmony.startAbility", + "abilityName": "com.open.harmony.startAbility.PageAbility", + "moduleName": "entry", + } + } + featureAbility.startAbility(str1) + .then((data) => { + console.info(TAG + ' StartAbility successful. Promise Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await sleep(3000); + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + } + } + await featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(wrong.code).assertEqual(13); + console.info("------------end FreeInstall_FA_Local_StartAbility_2000-------------"); + await sleep(2000); + done(); + }); + + /* + * @tc.number FreeInstall_FA_Local_StartAbility_2500 + * @tc.name FA Service Center installation free timeout + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_FA_Local_StartAbility_2500", 0, async function (done) { + console.info("------------start FreeInstall_FA_Local_StartAbility_2500-------------"); + TAG = "FreeInstall_FA_Local_StartAbility_2500"; + var cmd2500 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd2500, (err: any, d: any) => { + console.info("executeShellCommand2500 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2501 = "bm install -p data/test/MockServiceTimeout.hap"; + delegator.executeShellCommand(cmd2501, (err: any, d: any) => { + console.info("executeShellCommand2501 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2502 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd2502, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2503 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2503, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2504 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps" + + "/entry/files"; + delegator.executeShellCommand(cmd2504, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + featureAbility.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + wrong = error; + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(35000); + expect(wrong.code).assertEqual(3); + console.info("------------end FreeInstall_FA_Local_StartAbility_2500-------------"); + done(); + }); + + console.info("-------------FA model--> startAbilityXTS Test end----------------") + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/Utils.ets new file mode 100644 index 000000000..4d9553a5c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/MainAbility/test/Utils.ets @@ -0,0 +1,130 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve() + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } + + static async swipe(downX, downY, upX, upY, steps) { + console.info('start to swipe') + this.drags(downX, downY, upX, upY, steps, false) + } + + static async drag(downX, downY, upX, upY, steps) { + console.info('start to drag') + this.drags(downX, downY, upX, upY, steps, true) + } + + static async drags(downX, downY, upX, upY, steps, drag) { + var xStep; + var yStep; + var swipeSteps; + var ret; + xStep = 0; + yStep = 0; + ret = false; + swipeSteps = steps; + if (swipeSteps == 0) { + swipeSteps = 1; + } + xStep = (upX - downX) / swipeSteps; + yStep = (upY - downY) / swipeSteps; + console.info('move step is: ' + 'xStep: ' + xStep + ' yStep: ' + yStep) + var downPonit: TouchObject = { + id: 1, + x: downX, + y: downY, + type: TouchType.Down, + } + console.info('down touch started: ' + JSON.stringify(downPonit)) + sendTouchEvent(downPonit); + console.info('start to move') + if (drag) { + await this.sleep(500) + } + for (var i = 1;i <= swipeSteps; i++) { + var movePoint: TouchObject = { + id: 1, + x: downX + (xStep * i), + y: downY + (yStep * i), + type: TouchType.Move + } + console.info('move touch started: ' + JSON.stringify(movePoint)) + ret = sendTouchEvent(movePoint) + if (ret == false) { + break; + } + await this.sleep(5) + } + console.info('start to up') + if (drag) { + await this.sleep(100) + } + var upPoint: TouchObject = { + id: 1, + x: upX, + y: upY, + type: TouchType.Up, + } + console.info('up touch started: ' + JSON.stringify(upPoint)) + sendTouchEvent(upPoint) + await this.sleep(500) + } + + static getNowTime() { + return new Date().getTime(); + } + + static getDurationTime(log,startTime, endTime) { + console.info("Get Interface startTime: " + startTime); + console.info("Get Interface endTime: " + endTime); + var duration = (endTime - startTime); + console.info("Get Interface duration: " + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/app.ets new file mode 100644 index 000000000..f7a6eb279 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/app.ets @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import featureAbility from '@ohos.ability.featureAbility'; + +export default { + onCreate() { + console.info('Application onCreate') + setTimeout(function () { + featureAbility.terminateSelf() + .then((data) => { + console.info('PageAbility terminateself succeeded: ' + data); + }).catch((error) => { + console.error('PageAbility terminateself failed. Cause: ' + error); + }) + }, 8000); + }, + + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/pages/index.ets new file mode 100644 index 000000000..315f8fd0f --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/PageAbility/pages/index.ets @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +@Entry +@Component +struct Index { + @State message: string = 'Hello World - PageAbility-B' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/ServiceAbility/service.ts b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/ServiceAbility/service.ts new file mode 100644 index 000000000..19d075aee --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/ServiceAbility/service.ts @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import particleAbility from '@ohos.ability.particleAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + + +var publishOptions = { + parameters: { + "assertData": "onSuccess" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service publish success!!!"); + } +} + +export default { + onStart() { + console.info('PAStartAbilityPromise001 ServiceAbility onStart'); + }, + onStop() { + console.info('PAStartAbilityPromise001 ServiceAbility onStop'); + }, + onCommand(want, startId) { + var str = { + 'want': { + 'deviceId': '', + 'bundleName': 'com.example.qianyiyingyong.hmservice', + 'abilityName': 'com.example.qianyiyingyong.ServiceAbility', + 'moduleName': 'entry', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + console.info('PAStartAbilityPromise001 ServiceAbility startAbility START' + JSON.stringify(str)); + particleAbility.startAbility(str) + .then((data) => { + console.info('FreeInstall_FA_Local_StartAbility_3700 ServiceAbility startAbility successful.' + + ' Data: ' + JSON.stringify(data)) + commonEvent.publish("service_event", publishOptions, PublishCallBack); + }).catch((error) => { + console.info('FreeInstall_FA_Local_StartAbility_3700 ServiceAbility startAbility failed. ' + + 'error: ' + JSON.stringify(error)); + }) + console.info('FreeInstall_FA_Local_StartAbility_3700 ServiceAbility startAbility END'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..f9e8ab669 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..e2674d1e6 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "PageAbility_desc", + "value": "description" + }, + { + "name": "PageAbility_label", + "value": "label" + }, + { + "name": "ServiceAbility_desc", + "value": "hap sample empty service" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/freeinstallstartabilityfatest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationFaEntry.hap", + "FaMyapplication1.hap -> /data/test/FaMyApplication1.hap", + "MockService.hap -> /data/test/MockService.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/config.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/config.json new file mode 100644 index 000000000..9e0d55cc1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/config.json @@ -0,0 +1,116 @@ +{ + "app": { + "vendor": "example", + "bundleName": "com.open.harmony.startAbility", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 8, + "releaseType": "Release", + "target": 8 + } + }, + "deviceConfig": {}, + "module": { + "mainAbility": ".MainAbility", + "deviceType": [ + "phone", + "tablet" + ], + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "formsEnabled": false, + "label": "$string:MainAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "package": "com.open.harmony.startAbility", + "srcPath": "", + "name": ".entry", + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".PageAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "reqPermissions": [ + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.MANAGE_MISSIONS" + }, + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.INSTALL_BUNDLE" + }, + { + "reason": "need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "reason": "need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE", + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "reason": "need use ohos.permission.REMOVE_CACHE_FILES", + "name": "ohos.permission.REMOVE_CACHE_FILES" + }, + { + "reason": "need use ohos.permission.LISTEN_BUNDLE_CHANGE", + "name": "ohos.permission.LISTEN_BUNDLE_CHANGE" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..e50dc2a89 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..ea2b35a8c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,85 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import file from '@system.file'; +import {Core, ExpectExtend, InstrumentLog, ReportExtend,expect} from "deccjsunit/index"; +import testsuite from "../test/List.test"; +import featureAbility from "@ohos.ability.featureAbility"; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + Want.parameters.timeout = 50000; + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text(' FA- StartAbility- NoTargetBundleList TEST ') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/List.test.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..f3c0b2dba --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import StartAbilityTest from "./StartAbility.test"; + +export default function testsuite() { + StartAbilityTest(); + + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets new file mode 100644 index 000000000..2c70731d9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/StartAbility.test.ets @@ -0,0 +1,210 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import Utils from './Utils'; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +export default function StartAbilityTest() { + var TAG = ""; + + describe('StartAbilityTest', function () { + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + beforeAll(async function (done) { + console.info("StartAbilityTest before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd2 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd3 = "cp data/test/AtomizationFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityTest after each called"); + if ("FreeInstall_FA_StartAbility_2800" === TAG || "FreeInstall_FA_StartAbility_3900") { + var cmd5 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await Utils.sleep(500); + if ("FreeInstall_FA_StartAbility_3900" === TAG) { + var cmd4 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await Utils.sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbility_2600 + * @tc.name: startAbility: NoTargetBundleList,free install successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbility_2600", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbility_2600-------------"); + TAG = "FreeInstall_FA_StartAbility_2600"; + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.info(TAG + ' StartAbility successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(details).assertEqual(0); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbility_2700 + * @tc.name: startAbility: NoTargetBundleList and yuanzihua already installed,startAbility successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbility_2700", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbility_2700-------------"); + TAG = "FreeInstall_FA_StartAbility_2700"; + var cmd6 = "bm install -p data/test/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd6, (err: any, d: any) => { + console.info("executeShellCommand6: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.info(TAG + ' StartAbility successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(details).assertEqual(0); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbility_2800 + * @tc.name: startAbility: The same application does not need to check targetbundlelist, + start feature hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbility_2800", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbility_2800-------------"); + TAG = "FreeInstall_FA_StartAbility_2800"; + var cmd7 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationFaEntry.hap"; + delegator.executeShellCommand(cmd7, (err: any, d: any) => { + console.info("executeShellCommand7 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd8 = "cp data/test/FaMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd8, (err: any, d: any) => { + console.info("executeShellCommand8 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.open.harmony.startAbility", + "abilityName": "com.example.myapplication1.MainAbility1", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.info(TAG + ' StartAbility successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(details).assertEqual(0); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbility_3900 + * @tc.name: startAbility: The same application does not need to check targetbundlelist,add BACKGROUND flags + start feature hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbility_3900", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbility_3900-------------"); + TAG = "FreeInstall_FA_StartAbility_3900"; + let details; + var str = { + 'want': { + "bundleName": "com.open.harmony.startAbility", + "abilityName": "com.example.myapplication1.MainAbility1", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_WITH_BACKGROUND_MODE|wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbility(str).then((data) => { + details = data; + console.info(TAG + ' StartAbility successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbility failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(details).assertEqual(0); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/Utils.ets new file mode 100644 index 000000000..59a63137a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/MainAbility/test/Utils.ets @@ -0,0 +1,130 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve() + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } + + static async swipe(downX, downY, upX, upY, steps) { + console.info('start to swipe') + this.drags(downX, downY, upX, upY, steps, false) + } + + static async drag(downX, downY, upX, upY, steps) { + console.info('start to drag') + this.drags(downX, downY, upX, upY, steps, true) + } + + static async drags(downX, downY, upX, upY, steps, drag) { + var xStep; + var yStep; + var swipeSteps; + var ret; + xStep = 0; + yStep = 0; + ret = false; + swipeSteps = steps; + if (swipeSteps == 0) { + swipeSteps = 1; + } + xStep = (upX - downX) / swipeSteps; + yStep = (upY - downY) / swipeSteps; + console.info('move step is: ' + 'xStep: ' + xStep + ' yStep: ' + yStep) + var downPonit: TouchObject = { + id: 1, + x: downX, + y: downY, + type: TouchType.Down, + } + console.info('down touch started: ' + JSON.stringify(downPonit)) + sendTouchEvent(downPonit); + console.info('start to move') + if (drag) { + await this.sleep(500) + } + for (var i = 1;i <= swipeSteps; i++) { + var movePoint: TouchObject = { + id: 1, + x: downX + (xStep * i), + y: downY + (yStep * i), + type: TouchType.Move + } + console.info('move touch started: ' + JSON.stringify(movePoint)) + ret = sendTouchEvent(movePoint) + if (ret == false) { + break; + } + await this.sleep(5) + } + console.info('start to up') + if (drag) { + await this.sleep(100) + } + var upPoint: TouchObject = { + id: 1, + x: upX, + y: upY, + type: TouchType.Up, + } + console.info('up touch started: ' + JSON.stringify(upPoint)) + sendTouchEvent(upPoint) + await this.sleep(500) + } + + static getNowTime() { + return new Date().getTime(); + } + + static getDurationTime(log,startTime, endTime) { + console.info("Get Interface startTime: " + startTime); + console.info("Get Interface endTime: " + endTime); + var duration = (endTime - startTime); + console.info("Get Interface duration: " + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..f9e8ab669 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..e9ceb262b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "PageAbility_desc", + "value": "description" + }, + { + "name": "PageAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityfatest/startabilitynotargetbundlelistfatest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..2feea323a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..8c525cd4c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "package_A" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a1.jpg b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresulta/entry/src/main/resources/base/media/a1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..072898889d3562763186a082e59c7aace9979b70 GIT binary patch literal 157973 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 z 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�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 z zc8%=gVxsXjaV7Z8r=e4QiJ(*L%ZV@+V_H#kob8 zHJDAU{F6mCv>C5%rU%YnKcM^_Ze&^lQMP{Iz%&9}MH6cG+r+5}xZPMVo4A-)vN;uU(BWt^aP7`mi( zm{89@4lweiaCRJ2<7=(-$WQ?ZH%?NfwyQ^r6KlbE%5D=3P(p+*GDSXI=jRs9MDBFLK?mqTC^J@%g zweUW|+LQ#tpWNsJsr+uze3gyxTt{-b>Y2`1@1=}t_eo=PUkXh%4DEy}wE9pD%&`fR zzwq3E_;Js$>R6T0U+6VpT-ShR>A{Fw zE=yrt;C-B4NAh3C#wQ=axT^7CHf*XdIGCMLx(jb-@|ceO>J%t$F)ozcI{H7yXsz&T zM`{uH{>*%}ogLB8T29Q1?-az7;+{{*4BkT6)yj4h;XL{vIhLmM{YKjr>jodoGmdtl z!N*T=J&NHee)WuYW#z2th9xers0=h5O}KlYdLx;Al9{$z4Xi>0OLz>C>k^&b{h6lQ zB+9%{4n+ysef^pqIRh1C<18<)TvvlF`CI_-IAwBj|8HyF*QV#2b*#96$nmX$RnKg- zE>)aSmC1|iByq28@L8ZCadGVMhtG=(| z>Dx)miSq42wW%yRuQw!~%3G+_wsispb10`9gS(7?>Kg5%(U02+IE|ZphQc!PicfyG zh3W)6{RN~++tRPgFw#VMw1!OmNx)4SCigX%UmB-$Fg4C9VB1J*hV)QnE3>f5Ibcv1 z$~30FI4`%cOr(Ojt@*H?vZ}`4wYN8%RZG*yjc`+K`!I`7HMo8PkbzR*mwf6XWT^Rz z81t%X*%axdQa@jFSeHejlpH?i^s(QTC#IWzzbrf}YfmA3|%3z|rES3{mC}h{Djlgx>Np6PJIkqhn!E z-Owh5)83?qYiB%#csAE1(an=%rXTpK|F#aea<19rLE%5%zIA zBKgJ&h5@R=k$kbbp&yG~G@DR>%we<51nFv%E0x(12wN3FQ!|REJq4MZ^QSb~lnO(Ng5?db@s%X_r zDHz5kYv5VCmTi*fy=Jlx;0GpQ-oM0|&p?wLESilsl*U0wb-(O4h+kH4&)JQi^$5u@ zTUp4H*MLp-z=kaX5h8Pnrv(ccS%Z#AbjIC8%Lka48bP=Ml4Tuck-kVtZl6#}36=HU zY|vGc$fyURlSBX06HA;r@WS6IEFzqHXn8yeayZTx)e;Gc6FWvmJePfSs8;IXTtsc=4W9 z?B7OZy=ps+|D+W3B*3V9FC%eB9`gDo+wh9N>z^-!PVI;GZO-fEIDR0SpJps`>B(3n z9%KM01|GWcv+QkvkAC)VnQE)+e^VlxNxmOM@e|C-rr)r&efkk)_e~_-o<%LHGSNi6 zT3S7c@(P=Z0gbR)SjVT*B$(rx(+td{-cP0E!)$*H&~G>3cLsC~b>EQ6O#*0+wV+)P z)sB&kjg=2ViJe+s9DS_(`L6rs#1p0I-|wtuQRCjqY?|Z=A19Mnd}j64&QPOphvsMh zRnXUY(NL<&3D4`UO^77isoUL z18X1NtHL-7(ucg2Z?{Yqxf^MKXn~E@DK1CPf?o62fFcA_p>Pf z4&H`ScPgoQN7QGSX3A=a_{|7JCFsK3v7b0$koPAAy9oF7BP4RPTiR-Z;;*@y({L@i zNgsQjkWLD0u}eYp0RgJY0>#$BWXTO3tek;n@ObSult>=PRJl$9ue>W<==|E9Zz!OP z(bmK>aic5ap$~1vOpTOkb_2_h9t!(N3R#N3bQ&=Wvd9|jx9+29w%8Y)W~W+yQAaz+23*k()gOm$OVp3i z+`NR6isW$hV{oTxp!q4Z4}aBF+W|*6wu9wSX#103@t&ls-*4JLfrIpaaHYgaa_>qx z*j|ACMFjb8fhxDu`tMp7v&I=l_^g5e3m z-+SDS>ubJXZ^|Zdg{YwFn3|B6UxuMGdBIqu1bJ0!+s75y#ZapoN;TfLWt~B;7ygvj z)M3lnphL)4+xUm9mA@zWMY#JcY84eb>!M6>BfHy5d1W}(DTQJr=6Pu7{<4e4XWwrT zk^4ZFVYeMH{y_DN@{+${l^{v*wDSJ8;XG6)R^XI0{ff}rU?cd_B ze4n|{9hMqPS$^r*|8Hi%)^s4sw;>BeIIudAcdA#0niG|#Ni1Kd?iX9~`{>$Xa_vDJtzP}{!K(%8b#UbxpLz{sqg z>*qK;d^ST6TiS~~@?;mg!-=Tk5UQ1x&IaS})OKVx8JS#6zC=P9J$45*JrBNNG8I&AUG5`9pBu`6Bj1Lx@3g5H_AtsqoMKX~;iB)5glq#;w=e?fDj|I1kr^brbcT_S zhmI8$?y^GJn#x9DsFFs_-Mo@RvQ7B3Bt(m1vrSX+7%3FRxB3UDRlE~?OD1Z3u|`MC zyQq>pkv{Am1B3we{(AHqHL6h5ks*>j&@&UILr@`SY73B3oPLtK>+e%zUO z$p;n7WTJb!i(f}V}P##YYdKc+_B%i5l zd|;Fx%kb$O4f;|1FX27@c;zVSs~{66%=-OjZFWwPDxW>YI?}eR>V!`;(JzGFmDjU#RBJ2pWaAVqS0@6tNpTBrnF{10+{s0leg~mN>hg8%V_(c01Gvcr zog9S)?0}98w{mAI2hup}f&r>s8p*8GWG)h}FVfI;yV*R!GVF2?a!=`92r) z5oi62x8Rp$=|~gl^a8yv)bAdnSXju%f$yz5CvUOxhw^90KKogbNoXPPzwVoDd(tH2 zr}BL`5tCRdIgQ6+qNwKlsg&{V<>ARrI=yw-Qo)R>*6a`oL<_JwN+haqyqWSqp=Lgt zyg2>=so$#lGUE)(FO;ADAkW}YYNF$<_~e&s`3G8?OL+bMA&!{ni5j!1rdTT=Jbl0n5c0w=@;&G0^q2$asI))_@G+r++ zX*JRqAqRr~`S)^~^qL(Ub|Vt_?2v(GPLgmc9*&2IMkg2E z?C4nYWFAd^4Nr(r55BajmNFX$F~cT;1i-b=7Ziic@qPW+^J}8d7t8&$!vpyKqTUSMicNqIG4Df<00EYdtE`bc@#zh17x;hRPUb+8GD#403=YyvZCWr!a=HJs*%cx$ODc`1mG}+Sl)uYA=3sG5ub!Uh zY}Mf~#3pSC->Df}-1konY7N3NDGPM%_;PV<0W=r=0i~A1p!$Wrs!%bdk(T=ppX(@i zJ8gA1ki6Ly^2@8)9s0Q=xi~yFJ!&z_ijxjapS-F@Ma2e*@W(nVQx7cM>p_hdk!x3N1CKCUc(ZLO1qcS)nyf2xwldvMSl``-A^$-& z?8f0|It(x)ezbNh7aiDSBF+y%ww`t#-}kLd_=3?Z;_PR7dgwItTOIbC|9;c2=n}xp z!SrcpAApr>@nJf>;tE?F*bXd&`&l~;%(tC5s`#BE5|t9D=@LPo5HmOB3iGWG8%a0( z9Bc4mS^RbpY1UPUb4|&A$FM}pL~OFT!jHPQY7G^VI=|z=5;}-jMj>4MPB=uGLA*;( zN>t(21nt~!)jH0U+2RG$BTOhn%+@xeYk^U#qv!_`7ibT1J*ucx zPNIFRn$cK-G?RwOnMy*%-FX^LD!Hw3Db*BHbp$#h)i$cP0K)(yhw7`LSXee%04Lh2 z7#v9Wc8c)TM zaV7@e$`(J$>6s*xLmy#o%28bgYE&}PmfRImW!&k%F>ZJ+`=TEb#c@3+gZAp7;Nd7H zh5uS8)Tv;7biU_0uZFb8WX(ArkqMYw+r<<8%0I>Z)V$#z0SK z`C#HrWY?LSV1|$1ViQbHL{OE8d zi$uk0yQj=feGfL!L&OtECE>%V$6kCvFKjCBR+wKFA67CgfTGD$(^OEvUszvW0PRr+rKPyiM%ycRN6Lpu{~Z z-)2zZI_?N<7g5^gW!Zdt`q$U_O ztJ2x+AF5YDG4)$gPTtDOAxKjfvby)-ooTz}t9Gf#*U-yb0@4lHg*v*rSS1u{UN=>njOL%8?;jQ9 zQe^k_{-6XX670(9DQ8y$OeUQ0xtv#U(Obj*7Mh=({E@9l4~~~S5RaaI7XO}ByJC0$ zQC9TEr#Q>V#=rOe>&cBRwQlCm;6Uz9Hq>=i@KXJF1)~U%Q}b>*E|zrTdOuS}b^Fxb zh5oNx-FWpZpGnI!CrcjZCUU+EZJ_7o&k46K5!6}(zWb9Gpf^g_R3&FfCH+6Ra28Xg zMRD@ww6t&s?r~g1t&+P0_`N&=m@j(W-<5y~@7Ze4C(;Ge{%J|kTObENx(B*&=0yVVQnos|iKg>}xRbb_#57R(Grdmy3zhp1xUJ|t4rpHe{=seaNCK;t zVBa_ZMlMM_6BA||91_tkS7mgFOAkE`?^Vu@6sx@CXq5GSJdKhCnr3HPIyZ@Hgi$dy zW)b#`EkgTbUJONzbO6mG1vFs83bq?BU(6!`Ft;X;i@&IZIaxY|E+YJcQ=lqCYTh?^ zIFnbQQ(=gw-N40GQLGxo@(N1;PY~yq*+7*&wLIw+2hs^2wHY8RjoBMZ0bEA^A+I_{ zjsvI_H!NG{xXJy5uvZ*X(00|c^xsvb7Gdl1PA1=1&by|zeNze|81BlUW`x5pv4LH1 zU6;mVL||KWt6P_a9S@okc#memYgx2tek>sgMr2@WVqdc zanU^^l8@9m3L~nI#Vox6VS+9h0o=TU7<=fXN<_NBq9n5kNoJ?Von@ni8X&cjX`35d z4-fSLd%b=qp7(t zNsUi7*K=_qhRo%Vn{`DUkA*)Q=`-{1#x6(TlU?{#INEem0_5GZZwJ*lRYh6MHrbN& zsQM6@61|%sqhLN}W?L`;tcJu-NWagN*0^JexAUl3;W;c7DVYsut;S@c*)hV$=QyYERoa%f3gF!8>tX}L2jtcV2jF-l*duBz=!=m6cySNSqQ ze)@f|hkLd0b_5Mol=VegK1crb2A>=fo0_rDE;FJp1=g}(QrYm2wDxJKsdBM_i>@cz zCXNMRAwCS&Hs4EOZG1jMtQ_P5ADO~1L`9NR@y;2{#*J;efKTqeK--|$-sjgR1#BKE zicsTawkdjXs=rPb<`nJp*v>nqI>&B6_Pk_PwpCO>bM&rPlU;IIXlZ;o@lNH|?;Lup z{1!Y%2eRbjQuafzDS8KyCJ4@L#8;Y(f10HuLh-m^ zotD^&ZT|zgMY1(bp4>_Ts%Q)0ty?)ihZ2_4E@_?a@7?7#{5v?rKM)Vn2&LSs*bIiu z!}RPcETY6{mdq|B39u`4%@U5D2Ni0#hRU!SoV3Z)i?CMcU7Ei~F z@8YnHWxHJF~g{0+?=}7u=|M!_ROF1?xq-MJ=meH)y z%Y}Qc=6QC*nhoHlq$TPfoqmn@zBaD3)popA%<5NUweai1l<1nGte=iHL+KWm`G3=| zBkQLIBI>CWpzs<(!3eK-K9YYuKnai`uKIL3?T3kKVdm+QMD65o*(v#mOvUJgr+4P% zP#{L4!Y+g={P9Q6gRjN@a9LuZgu<(K)(fPsa@M<`LZoX>B2Zk#`t@DEPE!c2o{R`Q zdK-PP!EbZSV`1$UCa7>Cd(iOv$4YK0zoW#hwXOC@;k@iA{ZyC1&v<=XY7StldveFg z6=1SIg!uR~N!2@-;aw0Ws`u@!wnNhL%&#VxO)TPCK%iIWKm`(Ih&N~_>a*$6>tUlE zBhcbHotKfM)!72z*fJH?4NAZ^Ez7xPd)mo*--4ww{?+t&TzAS0M+vdNIP zFfn8@+KmxX?S@h{xrt3gW^oCYQuPSU!pvy9>VT2t{KH7l^or9|EKjNQ>S>PBg4077 zs4x8o>V^LU_13GN{~(@#kcZ4L4Pw#1^e_l{G{#M9Bo#=PTG3m^X-naTkfvxzAm2?L zGyaq`fl6&UHjp|ymS%6TNGbd|O+%{D)N+uVMB~k77VVEzQLH=Ex|3&;Ss%YPt)0pWXUvE#89$q)s_Xd^Rz+%vK%at3(9`h4i%H| z)-kCv9JtA>I01E2o8fSp`45w$H4avlj7zHSL$OYYe642`FcZu;k--%kW^x879bPMu z8#5$woesh~Cc+@xmaPyr4q_tr@%v$Eo(OxxTkf))7$G#AY*%}>N?w!3|AQ_tY;G~TDC460#wB2Of|B)JJtM>Qvp zy&Eu;;Y`Lhr9e-kuWkV%Q_JbrjBp=hvIGiRGgIHL@4xOS%!%yN zGMb)|#PgpwHVlu88Lc?lhVe8hpN#`??!L60-i*_~JDie^(b|n>7t-kf9zs#@t zEE2;B~u;2@1;OLMKOZ zOJkP2S?bqnG%~fqx#}gSZY}XoR*K-VcofmkP|t*I19H2Vw`8_3Sm;V&GW{+Cn#&yi zt~bNdmz{j)ov)!GO0KJn9wXj%o&%n=DKKJsUN~uYDNoWoo`pvkCt!7&VU40dr^Phn z?jM{W9t3N~mwOAQ5Fnlw6B-rvB1=g}2J<@`iXzi7&h#qzelMxdTA=X{7jeHd>9?vG{IjU$?-;Mmi zIny1F4RT256GT0?Z@rVFQ~fLF;li)Ol#rhVJayeYBFRFlMR;)-sue>h*pyx>i`dOL z=c=_G;fonWc~h5Cx{}Guz;E5(zKL!#V2404sZS;Z!CS{qx{A1B3M$l-)pYl@1J=( z;VDXxt!b?rBg7O$uysO_aJi?F3Mu`FB&Aq<>CxSu+uV^4JOm}G2rS!~O@?{8ChWoH7Y)vW+Xy%3MC$76GgNDpuF+;{Rh!MlSOWwV~!4OHMES z+r{T49Lzdw%5Qv4RCxAz`MMb-#TVheRloH^;6-44EI#T*o_F>opD@;T7^Q2n?+))^ zWe<@-;(x#WQ3qWR_lHtpey%GrzZXB8YW=3~SL3$1MOA!>vyhSx1P#+#rrTISIGx27 z9|Q@5)7(T*BowaZxZ47YKunD9E1wd-VY{a}Iy2>+`QQU?;mqR^w$wHQ1&5DF-t%Ly zLl(_`iMHMvf6tJpiz<0}IT0H{*e8&wSRAIS_SW*S<$HRPR$Q9@NCQ2AGF#thVW5o z6O@*!1$BmH%>R8qpWi}WJGs&PNNUp>z=^C)b1bEhK^r;F2HkV+?a4=Tm?*=dnZ#l9 zd}lKNtp+GpBqn5q?oYV1asp)ew8{WR(vy_fD#X>Y4Fb-D&C-(LT&a{H)@fKW#%6^8 zd5q7680xS)zCz+x5#s+=|JJMaCf9_jSO&UHHik}Fe@X2n_%slPJ{}SwBCT^N&pxFZ z-&f}H#JG&qExKJy;#{XlfGjVJ-_XhwN#^i~O;IUmtbmF*Q?P1Dnk1*06hmWmn`MIu zzYLYpI=8ltN6uTpMu7EDTQNK6Kr*6=w;ub+9-uk4y0SV$)t*#}rL&T_m`g^xDeAv!nh*dX z!6t)Jmu~dM4ezaD)b3#^D&>SUu2^MvPmZPe!2IcW8B-UPNL#aw5$0;Z5mQPB)jNyW zJopUbWSZZKiF}3lP%Br=jK+PoGHJ7HG+W#s=5cU_Sli=RrTNHwtrI+XAq>r9pO@`p z{%9|WNWY;LWUw1GRl%+v=J#CjwvF>x)fac(*Q$;ZuKtC3=~YIht}(FXin`hJo0UM9 zsEIrYz3$f-5lN%?IzB<2!5GJU6(v(|C*Ibt%c%u@hG}RqDDSBxK?>2FGI7!wQ-mu5 zS`o+13aHR05l`9{Vky##?XT_49_B6kd87&o!X};sfQHzg3PKA#FGsfM*6d!jt^$g_ zFYjAyYyp@|80br511oH111@S(NDU~xs7a%>QpK+o!nhs>fQeR_m@_&3CThQ_!O~?c zfRdpR8G7U9qn*K);J`JCQpkJ~cJ|2P$bw|>luF>(Pmf)gbBDLNjOz%=u@@|{#GLD@ z{uNKb(oblKJx!eoCmJ${t{q%Su0T7fR_f(wH zn)oVBUK1~|>5W&??G4@7nh90x_r=p1Jk?rWgG2Gm{#c3ExYhkCr!X?VRrx^7wK>u} zAqYAe$zV{bUc+i<;sV>y&wJ;zkddSRV$HFFH8PTN0?nI0_>`bL^fuEW$IJ7z5Xb=w zr!UC?4o4v5=RrM9Z7s!}5V^ZeOi5nLc=#NWyK2WpkxW{dL>iP9h;OgY56DpF(LaT zyPn5)T?@a=jn-;WnDPDcBN_WB!Cg+0QW{`=2E!qB&}xyt9)!4m{pB_&Eo}{Pw2NBV zVlUyEbeh56s^#pN9#qm2y#;rl>FW>XZ~k83p_M+l^?iG$^H!mdd$)(~X(yyklo zkftHjNWH%}{GBF}hq_J#aQ>ZvyF^pq*o=okdxrCCMr7F6v?}qT0bu_{tqa{!8Pi2i zrUC;i>M(L?gpc*%x(@A-4JYQSXrz>V+}5g~J2iu!qV=Um7w@#)_EV$AhyE|SaD>5Z zKFQBngp|m`XlwKr#P`jb^+B1?&eM)oNB#rlSGimztQ1wW>9eqm;UPT9?Z-hJ?ItlY zQ}`~&Vo_OApaShdKX`lcdI~bp>P`mGisfbxku3RK?p-_^W$$2L^NoUws=DZ|e=h5( zj@Kx9f6Sg!Lj|FxN|sQU&^$8`zHD(=JyxLP&YI$V_L=82pR{107UzMQ&895>DTT8L zN3?Ofh~gfLTGw&Ka*m6}RgaR+-BH<>$(DqRw}C_nj{~Cjhf%kAZ@o#&Lv3+@m9L#$ zAn+zS5&H+l)9GW$d^r;ycC36=Iqoj&<`4MeJ`Js&(sQsd>%=%N$h(ggAC=k+jp2x_ zByegTqIfm^s6cs%ZN&H_8m66mMy0mMtA&}md7Y?U?oR(Im_cR+D+Y-g_ILc2ge+1t zdk3nWH;tFjj!oT8JZz^p85QW_UuP^_H<7AP4woE7yHsVnomEM~2+2jX;hi@yK%I27 z)|zSC2z$21dgCC-Ms#t9HCO*~``$I56%)&AV*xIuNY=&QUxiAHW=}}ba!O-82qKa@ zlW};X{Wigb87IrxfAtyTFL0F;?prE{!o*FMU^3>mS@hqTaPvwj@AA`-hhW5ir+nzT zTf^Ozk)JW%|4tu+PD8tu36&9TNdfQ5WeF&Bp?b<*R?!BX@gW?g|B19PqUqBfL%LNo zOLF_!|BaIWjT1vU=TxNd&=?ii@unVjUKmNp8^o1xSE;du-Ac2 zrjR^Om2OU+`9kUFu zImieX=LVRG$dW`7eJBVM@!-ID9-XEGu>aVlz=oqeHH4i-OJMn7B6SX={mIQBB^BS2 z{ZloMt$%z*TXy|n1YvYrkdkf?V*fO6@0a4l7F7}a|AO*&EpKQ+P|sHKv@jkIoPF{0 zpqS)Ev?2drbFBK-W@Ropw_=s*Y3iv4M*?7ps|m5DsQ<^*TSc|mc3s=JOK}Sx+}+*X z-Q6Wnq*#DLaCa$Cw76@F6bo7?ZY@rMLW`GT_kZw z>HckcrO;Eu{1rKaWXCs)d*u~^Az&`@_mKy?^PVs@(XSioLc@;`<;`xascbKt1M)|If9t&lGNZW#YJ z@mJWXWJGZ`zOt_rDTGPY+&HE*m&(b_YU0yMZl7?)L3ZAPj zUtGGsl4;ehfIi}D%J(c)z#L_p=+w)F5Nf5KkR2ttnFkRjthbaXT?o^ZUJ3euW8%rAXC#`7~Om>AC~N2bHQ^O-ObH z{w|@?7@L}%z{H}JFF$XB{QTtyoSD#<6$N5@H53}$m(u!|jF+Grb0#YE7~k>xa8*|M z!Brpc${o6LPB`@)A)4w<)R^7UJcY7r=U90Yt<5u-Ri<=qE#T;?6 zXrD^|qfeJ52T0^$I*X8Z|2AWz0 zsMA9YH_uV)=G(EN9|e%WdD6I)Sv3kf+%}A!BF_)71eAS^?2e|&rAv|r0es%|p(W+m zim^9|xL?*4QoaHLlaHCTbxz@@BHsXc=DT^jUt=vq{MmG!unk0ScVmh#ri8e`Q zO_u@>GsTx#k3*Y9y=A5Fi<7{PSoPVA^o^2K;fg~?uf~DW@`ai8DmXGsV@R7*A1x~KsZ;`CjZ-yI! zW()bZ+}h``1SaY~akMhljA-sXmz`xH`0dk_0w!c=C7gFJE&mP8`|5AXH~AP*>lF@< zLuH0Y0$B;WfBH0goZK`xC@96`jBFC(zIIvTtx$(W_3_w0b@Wm;XWnu#s2mC+Rt2OS_uDxM7!uwupuf;Zs-5b=v=!Wc@!jbW;#19@SRdhUI^_w%ix><9Xt11&a{N? z(EsLtrr&;v)*(UBo!VTrRo~%d(zAjqWYFg`S%Dpv996vt+4(yys#S$18i|Kvm&i%f zU6+!JH898L$Cq_9OR02XIyU*AS}yrSCtR6Nh$Geh#Gf<+My;SCM1RB5t&6d*uV2*YGcU3dfPLx$xjNjD8YtKX<_+5mz0pk zi4Pt_t2G55_qV zSii}eHh+{pzT4)u=$uggIr}Cug6TvrD~im~d^sh@T(mkl@{`G(3M6MLfWsDSub;4! zi7qp}c4X)X1|4gv@~FMRqP`$sB%+l6F56V&*$t{4BtA*CGS?v9{#dZVzEM2W;#08KT=nx~KG!f&KE&i67&CeVWqoTt9^Q#OFu9lNzHW`j0Gw*m> z0cT1{wy<9r8blPwDRF5Im>ZB^s+z_7g-Pnw(;ZwH@mp&$CAubZYHJWE$7i*^C)siq zQq)5)eQ-wNO?l-L4=qVHjCEnpx^`6~26xzZ2<~@^ANm!?lTE_G7r&&NZzeQ4KUxTP zc_^0_G_%%ylPQpWZfFNZiHwarJ3l$2g;`q4tOO=cQf{vIWwDUGHbWI*u5tbix3d%* z%VJta@^;AG*65^~R%Omup+IR-QS(MN^vy2B3ZgE;W1WaZe8@v%Q$@6|4Cj5xrkwZQ zaY`vBg*ijj%;XHcPSt4Jpi`6XkX4>K8U29#1MYzj*DsmgxwB5#Ruh*G3v>jNfQ(8) zPh}+A5iRm1sCGz9QelWE2Kv!-;k)V3ADn^u9L~Bj{FKQ@w$&=}9k6Qr4Ni<*rX{1@ z%b$m-z=dyHC&Pl-Dohi%OgY)gCeRHkpS68E+Z7yY)@n}!&ZQ8YE$ z)0eDBQ<}EWgSIb+kb^mHk9Q+I5D5Mq26hU)SB0C_q8gWa+d{mY6yneBur9It6oafZ zgK-boTgp#yIbt^Zli*_Bymv|Foh8#jta(k4gN{ZaQ zt2y`o=oL=>3gr%zo(^O=x`xa|?2|1&i$QT@_KLYzS6^(XRURjwWxl=?2JZEq+3h%1 z{)#8&ebgl8J+r8a2F&x!P2HXLqP?=mjl;`g^l- zG)pn8r6vVGXGS8fxV?w->xcmMiVRB7G4|*fX+M8A9XB}zkDete9S59LHg|2zFtR?w z^B~sWcp6!b8=1rs4P^mNu0X+s4Vy>0;1`}iD@3)^TgAvM4y?9k51O>F!4)P#ty>Yf-q7kiHg|s zS?K3fG{aOaFke*%2Oo6XwJi<>jeI0h_dFJNjI>p?uCDJwnjuN9-0cE$^6hp>ase%v zsG&9W&n!X@UNf*2-YZjec4tYT<^rPL)!1eo+=^HrpbZ54-2ZMi04)O`_U%&D;L&7I z&E`V7YXan;zWESsh7I#x85hJN)_vABu5KzP{j3Ze*R}U$Q_002R5vHHQkWIU7PyZC7kZt46@?5_#Qt{vaER(T;zPz^hXhKdu^MK_K5D2G48vE zF_{+cH7hQ{S_jI|iHPIv!Dq1D)0KPC%{s!Cp4}n|L9wkXqt%R!X z_7X6J2i1nSJO4ta&kfMFkqL$Gr71WOq$WQrX_~D){$7zP2 zRu?!yC3wtzNLBa=qI$NO{|_NiGv{otBT2WHhePqReJA6h-;8|UWurRTqbN?e5iK`2 z%d3O}5ah%5vJCKw0aj6@MG`Hi%AF+_V& zGbZIl&M5TyR`se+x`}lMiseks9I92-Ln|0*aob6OOy~oe^4Rq0fY)6YzeeYSL$l5V zoYwnGvkY=Yccct}&;FU&U>ZdJMeT|DbT0txT_$At-dW>&##3a(|d6F41!Ii=GARt?F{wSuutDpwP`b~=1_Yc=n z33_IE;G>OKJ2qOic@_jD>hJ_T9b9^eyD3g^NG0g~6!#p>7!n$MH#75)99%J$sRyV1 zp?T3W4`-u{-*e5OKHY}-hWDS3bNY(j#EnisrvMHf{MqKm+;dXLVxVQym8VQ$ODSk4 z6u-^yuB1LDYvlIFt>5Hv_)+qZpfVXQd5Al}H`WNT-AeqrORyq1oV zmzVLM2Hjs7k@gO^a}H4*I-``Ve$k%6r_Yoqq$?(-A0^urHs7?&;j~Vq{epGKb^e~?uRbC{z1%_`6j!_`r7Hn&tlfz ze1p6azXhS!!0I^-rlVFxs+k73bKX6z;_H>@l~b6MZ2nZM{0Z^S%V^LJpBpo{KRSAY z6XWu<`!czC>I5Ij`n!85-ha?`nyEKirvLO)3yf(C(^n;Djj?HzzktMnRk4_!ChG#1XMRm zBGgLMpVZn&W*Fs!bZGyErggO$O!-(*e!^e!q7p3tpSnhlt1oe6PnE9)1M!qkW*3-? z5u4I<1e=iba{Q~7Z?mUxD#=f89ZQfVOlX*xTr_Kl48;bAbUJnn9VT4KmjC(upWlTN z!8d`AS2y!}QF4BkVQZPQ!ZddR#D#>2=HE;-A80j=r5+DIavnX_K!i^# z^v8LBzP@+@elD4MnZ1{+Z;wJ7pY$%6!}VT%KMc<3(nUQ@mjvGKs#Tx|2uhkrQLimoesEEy&v+CimQS?hh5CUF+nc!mnFX=pk+C_42>FjY+ zW1|Y(M-V)@b~L#@vv665^ykBsN}x+X`*0f@il^_mVZL^zM^aGA-Gcx>5$asbXDquB zq{h_|Cc~LTjpnmc%qqF#FabtV6%IVZ=-@=sU+8)TmpLCr)xY*B9S$~v$f~_y|h_du(wP*(Ze7tK4ge4vzV zOvCV5GqlIjiY75SQN#gOD6nKqC?3`3jrQEuK( zu_T(#y^_wOWoEOJw6{+CR}IzZmV6AXttfS3eNgTE+l=JspT`7*P0Jy{Z||jRM8I~t z_iu}#AhyOIE9G5@d#a7UmAb)wu`1lJnHvr6igEu#*!8E81kdwFHm0*TBk~G4`Hv&)ckR( z-Urar$eAepLWor3ZqD%RF0+SQaveS*n+)VxPBfm{}S9M*#vsb`9_bFm( z;QL>;;nv)l{CfzkKePWu@k*TTs|7XH_@*;g{vi>se`lmh z9N%M@MYq z{>t5D7$1){TxKEf8X!;TDHtxk$&uq4VXMJdYL$5Ol+K;q3a_6nzBsv3o+`6}(ESdZ`x zz$uBro?`Mh_a5;c0G^`6e^Yv0gK0$PIPRh5a_%2ixX*_06=0ZsByOAfu4YeqH$~rJ z%xTFptX9iq)5)>)Ts`aJ9LU|?Q6HagOAF`uGdP!JY&OTU63!|k=BnXeNq~T&s4)Y2 z((L#-{b7G4>79<-qgawg4bhOu*z=F;8rmO1U+5BR^5MbPn{9Jc*KA71NSA`R%3n11 z5zefXT?^Ms-5P`jr^On+^?Y+{P+|Y|NrYNva@vkZEe*1tcI$k0)4so`_t2V`fBdTP zOY0Z&$Vxt43FN$^4LZE0uAZX@>?u9-HP>$OdMv?2*XOCSO`e4*KElZtN9!UL)5~eb z{}xYMzocx73y{Soe^ykXqrO5B9#=ia>J*uBJe1wwtiP@ zyts{qH0a1;few8@luPg%pE;1iT(;$C7Td%dJsQgZjA{)mAxgrGEL5tAWyv_CGfI69 z9vW^b%U@>s; zig-p9c|wBfeUZy1Hl6!s(T-(ywUa2NF=*H(Hn+){WRCZb`hUzKfF#*(kbaKF&~Qj53gEG=C40fB`s4&J0n2 z`q)arj+zlqpLN`~_YDzcJS#P>hI7STa7!XpyVR&+=N7+8*cKFeM7RE#iW4Cvl~kQf zk1ZvE3emES@LM}5r8N{l6ArUSyDx=zA^e%G~T6Rg{J{M zrC;rowXHCo>q3w0rWECnw$^_X+vBJZ>PT9;_!fN-l$F7mO78OCXvNhSFS((&FI|Qs$+qBIZ~rcRsK_ykiz1?-=aihSk*~42Tf@zW3n$);6*aZqW+sQ zX=_iSQbGz-jt>2zJ$Y!*WImi?AH^aaGD5KjTCwV{sxVf*>CsahYEKVA`WEqI%Oq{l z9!DGpy)ojh`PAP_1{wA~OhNyRfWp4msD(;}f?_KQ08w~j_~0=m2f_BlmA^-C2@L66Zt>9|ECSk__!N0+oI4$Bcr+h({D8KPd@UQi? z94z}2H#o98j8*?Axs#bM>uCL<$g5t2$EUK0;N=P{{hD7o>MK_9;WFDdbGXF>N24wO zz2CV|RLWS5O&=j2pU~lAe#q(DRHq9>-|I6hj~;w=G=sMH4xqL3@v9^n^E@=6ncipa zfozrr|FHYH8(8pV{(|cL@cT(etYXkjQZw?$j(l`XF`RQhQpYuMm-fWSM)Rw)Tqq}3 zkPxD&y-y-9u1P`J{`6mM8nGda1dL77xk8pm8pNj)DA}$4&qf6u@yfn{Z5kAeZ&CcH zwK&wW`_n$aw7_1H!Lqm^*kv~XUb+l~))_VX>?CC*uH!aPjfrBJwydq*^*Zs6>e%SL zkdn7dSsnye-72Ym4tnGAb2x#rki5kB+qB^g_?bcg7~=@9!$E$#%s}@v^2FgO_{b5e zv#p3TEG}kiN=Zoy=)=TV#HJS~{f>&OS~up^d>6*&&BoJ5h?Za2k>C+RTkqONutXR~ zHPUSndrR0zx&q%j-qI)@sd2oL%>TWLr*d@F4l6O$p!!<%m$KWwz*@bhG^yc%1s{m>F#fv1Dq0AE>xI-~|> zY_7hk2=Q&xbLxfuDcmTYAgK|iVh76Ee+W^tO?h&X%b3f-fN>n`Ij|SxO%`h3b z%%4_(JL%bK{2(WhGWD+9Jk%3^P71wUDtGauV$U68lK$!UFFxRk0|h)PsY@japJROg zLs(QR^SM2gweP4xe{9R91rlRI4K{WWAg)8n&}EO8f|2K&chzz0*NpJu?MIs@%S;2# zZo;L^GaZB8FGK)@OWB`UUuKM@7RI`tf;dd{k%|us1~HRB-W2NfvtdCNw&schhZxis zBIh3t7yL5gTH=kyCUtnk5)*zFrWTl&%6_U&q%B-h4PJcNCk}tZh`(2ge_iu(_#@PW z^C(R8idG-X%Nt{W32TU^sGFxJa!}hVU|`EJca8ot?GML?!TqMvk>nuh%07>z$LW-V z*D103DBC%K{~?G&zG(X|{cJPrx%y)L7h091`B`!f!{n{9w$iVnCG<+E0ngAMp=$%< zBh-#dAyqF`PclC`C_!0-DzdETvceSK<&hX7%g70}|}HlDNapje9+ zQY{W~`8%c+k-0Zau^O&8F(i{0vSwVWJhcHp(D;VF4fB!kAuYD@-KPz6T3I|Wv zPt~v$0oMFqCH;QwXvYVDpmZdXKS5~*o?f1NTvEfa<3mAWEb9jrAhf3T10XxMXo4jy z{w$Ohmb_pdWQG|Yy~sAKNT7<#^73O3O|)Z08UmZ;S_dXPDtq}3k1oaBwOCnx&f1VB zY)7OAN3VAx0APA)2*?Vs?5X7D(2D}IT>@Iy&m6D?q%vK8;VD3zRSjUNe*yB|ogOa1 zBTM0EQpi|}L@JfJ0VIZx-7|-R&h%AWCi}r?p%aRPib7Ub1<63kGw%kQnSp0Y7s4Lk z4zvUwZ2?NB|80~DcsFp2)ku_lqsR61`3@T6u&oP#1A(HFH`QWh~%z37r%J zCx!S_KqO~%f|ybh8sWs?R~j_@G3;DXyUQo@#BHTp*y0%x+}lw)Ho+b5%8Y)mD^ z;V}Mp${+Cv-mu_6SJRWoce8u3J!L!Y)4mq7xC1dJc>E64X(>FnY7czSF^zvCs5{B3 zPjlFVf#uO}w+DPfw%tP&^ux`V2%cta`r;nZgWk6Lj%52hOmSYWKF+}f7iKe+51bf( z2kOEtBQ0*z`@xT?+7wstlkAF@*9F0J*T@H7KN>8(eQ7}#e(-VqsDi(k3;jV$^il{B zU6jVHl5M%7z+xkucYqtcV$r487UkKGb~GkWv)7nDc%nc5l?=`YXVmG` za+XP4NVR3kJ<+yjn^^fKu43rC7wD_!S0VAj2E* zvTX&Z4!Na-G#^20_RC95MC4iQw*Zw?6k71?v*(AVMu@u%#lOzXGc&B4q^fIM5wVk9 zw@bnHk3!E-=x^W``Arr92Q#ZMuN}~N=6xET;_J9fXq?J-g&|OJsf#%+~dA_}LLHX2xb# z19-|%^6({xZJ^X3_ediY@|o@8yD~KJz%W(z=C8A{q%Xl9pfFLI9wWzi%MG1*amO2$ z6BI$$>%JvjSd@lQP(jRWQ0sn!z-6mzu~@f~|&6o!uWxmTf=1UVgXMkli3Dzl*?CXGc&r|pEG=2Dp+m-)E*^o_{u)Y7N5Ua>A0GHiF^H7krtEAlF^)aS z{En!W7PO$&K5u61;gv)U&OykG>jgq(;Ch@2u%4KA$(=-F1caiEydKyZwdNeDdKL^c z5H`f(?$a5&Ts=~eth9Y~hW*nF^C#IwP>17_Zr?cO94G=@S!X znwfD&4Datv$VtV=^H%(6JbbkI5ByD!pgVfqf&|Cpp-WxJ1(dVuHnZiAJ zsw^R-qc+5)VK(#W#})Tmp_y`Ff1E%g!c0F9r>I`wGAGBplY#3*V$UZ;MfZ@~srPC1 zntTBk-tW7l#7ir1rkvdt#p8NA_Xm{_I&~6DRbC)IG zjV-OFOzAUc=_U7{wvRO85SL{DU`2Kft;Mvi=g_Lz zmw4uu4tomY!~~WnkGiP(BY(Q30;Q(&du4QQU$RRkY4uWo0-2VA$D%> zzfnkO6tE&55J%3a-F;II=r1~RRwLm2F_L!8cv||T30)WeRA3-_zCcor72NHA^CSHI z*%PJd#az{svRxTzuQeb}pc*N3!O>Y`s7ddj; z%OXCf)B5>ya0ie3759Z$N?B`5jt0s6xBRXtVC%ONO+?Ni zOEhffer3fIO;` zeIP#^;i*<7%RLOl!JlzSiyu36z$i)7fNvtALgj=U0DKvi(#jVBRSmK*57UYW<2U zA~&;?97i$)6o&W}$|)`=ge{!>-W*%w^3WFA!QA)qi$b-q|`i3?xMH|yB> zO?%Tcs8>b!o%V#NrR&%3VcJS^N~FCEL5`c>2&fqxrurX($iL(;$Dax5#Q2!rg5`^4 zXXxsI6lr2+EtS9C`+I_kC1Q^yrOiYg>Dy`4)wp+V5^BrNbYRX7IUjKhItj>g#YO7^ zeQ@4=_2l1`V3Tbz9i5+YFmvMk+CoeEj4ngn=ak7DnyPu^l)lzSn^u+l?Jw-Yy2wZA zu*bZg*pRnbHzL#-PLnAqX`&a%w>X62D1Mvrtz#A2)vg}(#w49}ssl1!6s;|9{zhdn z%x2M@@(mI?3D5{4gIcB{dM6s&_>>by^cy5Z)Ss>v38iF44>DD1ny=G+n6@CZ4!CQW z0#`TcneG)1>OS3;9T=I+4%7DqB@_hgwsFv5&1#peLzC9(>|9_CHL$eBK6}q2(j=dl+wg zygI%aQ%e}Nlin?Hxf`|*qiq>&M+i!DWu=Naj=Q8<>c8;(_z$5FK892t=xFYUf}POB zwbL(>f!eJEzBDk9$J~39`ZuaDERq?7zSQ1J)lMEWj4S+dhHs&%;p93&z*rG+Mu`Rr zw7JjK^;4Ftbkal%Rt#4u%ogsV^jw_qD$i6&S|ku074Ivo-M2|-a{;#@@H8(EuW8m8 zY6krnxmEJZiQZK@Dq^VXYajYBW!*2$w6#;NQf>2tO;S%1U^s|5t=TB6IX57&`?FOWhDzb>p1b0k*X-HiLYy=bs{8<$An%k;*<7MpXEW?MH=+N9NeNEz()I^hA*5XT{h#KY4i1LLKgP~NyY1f z8Nwu7m+uNW?OA}$IavuxX>#;VMN3`Yo`YDu7BeMCNRWj2-8F|oqD$yj*KSm@=eq;* z+%KU*vDF~OIxM`KnlOiS?VlBSX<#615v!|+RXj!;f6dm9BCf1;j#duyuEO^-!pU^C ztzGJ`ZWIwYMqQ^-F%$+w4*AdnY(3+LW2L=be7ub(4lC^Tt{?u<@)`7M{SBIiJaHRh z3H&<;nW>#WKdE^j?pUsv;Va3lo_McINgm=Z0 z*unyBlL4jhR?<}XLyz0sE)trG9FMjb&0iKpA}?%`M82h*-Bp--^F6OV)Lit0GzM~s z-qM;}%OoIr9rXVC=DZ5v?_`^)L=#{L_zvUA{~>6HIKN$&B$wU4&C6K|jA<)!G!6-m zjgd~t`4o5=q`JfvJ}dq#wq*Ai$G!|j;Vm1{tmz`R2L}eZ0%7Gb;7jdQ!sO4Pa?0Q$ zB90FHUc-$im}pi{-`ieDVy%tfNZhoOS}^x$@-|6P=bDLvo5C{w>Wy(ZDce|#=bT_W zB0WTzb5`p)&aTAY@&F3sX0DcQdi6l7TD-ZTj6X`s+est%dHrt>o%n-wjYbxXaqDVs z7GGqn!fF<;gzRQ^ctP!$gOWh!o(Bg$Rw>q2pmCf4?BrN(VdqwC$4bfoYU&Q~b)Z4_uigUpydQcAfo~$su(JYnR!>>6?O%hB z2th_tuY5!Jg*|&>lf?kZq;_b6ry9-h)V^ayxN#9_QH8`yd@sE*s>t;HD2|tLMk1Rx zmAMazIYdD*nU&ooOn3|^wlxkOTKYX+ZrX~INUL;lPTNdgj=}(#A+in)+eHg9;tF7v zzy2fF|6?m?)$MddcJAM|$+q$tsvh$a&L{-~5Hz1u;lh7Jg>Aqi>%mQBuK@VC5TPK_ zsUmDZP0#}Xm=}7yh`(wIM-zXSq-)`mwKhk>=2;M!l4`tjH)ReGMgQgWe8%{qZUY=x zVu2vV`9SA^XTpcUxCb@EYSpgqB_v;H1g)b54aY`G>Ib_tqVf>*a!(AO({o9`9z0{<;D;3LqNe; z$xb0weW~DO9nXaE(LGdwMWK^MeDsF&;2@h^2j_)^Ut&EWDdZ*lZu~_OYu=1Mi2TsI zp*2Ep`0@+6i?|tylx)(aLhfoTV}%y*UdAzxoejoxM*G?MpUiM9E{^yP;GMxd$w(Y- zIDEi_*Vt;3I&NCv<|<_?wm?ElaCgiPq#Ti7mG{SQ%PsJGRZq!^n)^cGlWN?auECyq z#N8P{oQlww2J;5ZqB>(P%E*WK07WK@O5o4?x@383=a=*tacPdT{UQK-l$l$%p z@{>})%nDc4SP-IeqVFs!xFT0x4#hBbn_OAmnWZ?QF@G;RdE&+A!La0kI`D33LkDL? zeR@JeZzO&TCJ`;b18SAGluhWmbdc;V+nzNUUclCfuPA(2ODCk^Crd#@QX~PO)lTza~)s_+{YV_~+f@JZpV0HCD)BGy7^rHVEs0)uC zB&Sq6Oto&|FNh2M#BLKqQqMo|mGL4_NoWR*KV7C(fWu|ZDqj4}m?dhAODlvp0$Y~s zRQl4A{pDrfdrPU%Z{KO#&82~QcEVZnCE+}KUS77{N?&_J_+njDFqL+wcCF>3>+sfa zW(MEPw8hjz`tUW{VIx0VXT!m*Fha9>!iaC-O3vta5j2e4v*`!B40N>n{~?5|iJoC? zK4Ba3)UVS~EPJ@PH#3NF0Z}zU-#>X_KAFLTo*29{J~wtF zK{hzB@_0th}C(Nc(j+?P845^&tpJW;X5GkgIGkSgZd*jd($Zd<-X} zPh_3-Bc%D1Xi8?q^O6DoRXI{ep>h>YJ?;YRrsB}^*V5Vzf?-s57&@o> z_?8B)Hb1wNPOW$BQNqiozOdiphCIilM(B_}86dlgzWJf&^mPu6=+z6){ZCxuOfUuF zv!h~29+&6(7DI@4@{C2gGO~NB#JP2W&D+NTx{z|yNH}DGX*Gy+())8+s_b~q{v}qh zBV=6hnhl<+c+DNkS zwXG{6UQ;E>Tg!%Fr=5+M9qi~(pB{(94Q_pc6C=cKP+6>UIY!gTrZU-~_UbBOKQTIJ z<^64&6)u!5sX5IG#6hF_e)W)U?w$48QKxaMawYea#>`Sz0Qn*kH)y)uB_%{jUF)xa zp?kld?s8M%(fPp}`OQX6O*t%9=`pvvuIblnLn%-q?^k@IUW1oB^Iugc@_#L$8a^7a z9IiPEvD9P&F-eufM?aP#I``accJnV{1^3}{l@cbHYKED|B-j9WUoHmHkdj2}3Fc3) zyjE*-i_aNjpeFzG*O@ddr{(BpfLL%KXmRk{c0JbB9w2|#_evPQ~{53 zVRx`v#_;gPBj>G-WX%F4oi2$`ZMELoyKcPsm>LWnkR3PecPQ;GpiKfPC$w!0&8~WW zgNW{-)L}4E2f^dpcCejPkx1!Ksnw?Z-R)qK0Hn!a_w58zw{>FHlsK2L6mEo7#8W$3 z1+&&ZA>-3oN!lH)$%8i;l^{Jq@Ad;5_j?eRo9`P8)s(c_h3swC^ZV~fbTYHP5X7;q zD<5tPl@EXKzB3sIB&rmeQTLLv1`3|{3rq(n!nK1QPH9gHV-(vw|6nKGp9%iuc9QuR zMQI`p&@*}tWD)!Wx5D_s)}_A9n>*_A~%!l2Lz`fv6B zn&E^l8K5?wg)M?lvdMVaxs~z_|24y84F79>?ezSZ@(n3S?eu&}?En-`x^*w%8i@&= zS*%=!Gg&guhzn9Tl}`p6);_};nXQI{Cuw>Q2&ZT$&p!9E(-cl6=f$ULc;L&_vR1V` zzPwCcx2UOGZG%na+Qr&cpGZ04e&+Qr4BRcZ0)v%aF5863OHoKuIMKRi6KH+Oxdius zf?dwnp}%3*CD_9a%=7oDgGNcJKJ#@M_HYXq{tKAdf^--t+L;4oIq~1aU`wDH@26B3 zn-BvL3a-^X0N_p?5W};o7I4K^Og1FSTCMwma^A2$s)|2T9DZMT1Ve~QHKl0bNzXbD zx-UT5A$0v)RYXFmi5j?lQ&l8+{tvpS=}bU~s3W!hUz@#(voLK(#UL?0>L~$5<)ND` zf}TmmE@jogOvO|FAw(|%RCQ&T+$9z*K^6iGf2#kC@Y}isyi+xfs+n>E0Tz%l zeL*~jV@^n0PBSD%DLu_^LCiCTXcOykL83#6+1T&Jq!(lSJC`b zgmeMZ)~_-`Ml$9S6N~E&ud;o-;|8>dJ}YenAyx0urVU!{!GElJ*z@}DqhMN%Z;7Q< z!TSbY#6)+OePi4NmfSq%@^)@Fz zoaSCA5w*gYieh3ex4Ql6pL&gbIh9dL_ij24vt76mgJ|`2>Y9oK8pK_yhuyFf2z9i8 zOR&ka_fMT9{uYWT|NgijGNRXrh{vZ4^^feCCW>Jl)&P zO7+9;a}<$w|Fn1%)rre*>Q$wi`NXYMvOb-zHE8h?~c*!kWwr!YNe9ZZgK`=jzx^Ux(XCceRoKI@^fbh0sAB z1@%>It}HkRCzBQ;3Lbk*FUj8(QnFhO85^@jRAfLHd648t4AVvS6PA3byW?)5duG8k zkA&yWn^sGLZyI(}=u1#`sTjW|Ab&uh^g7Qw`H@5;$Ka{f@d~lxl$97}cC-1$vyt-q zxtRmuR8$Zxc0FH3*d`A@lB2q%-V1Q3Eg>`K+#=KSTT%5UVQptwwYv4 zw-Ef9@4MZoUwXH(L+?ly3+eT(%Dw5#TffOq`r)BE*I<7o>Z;bDKHucg$nx^aESp%B z0Vg-VUAh9=stGs{L1g>P`c6lY=(Cme19J*7=}v3`l~+#JhvrnHID=tm5RoUJ%L&H2 z`HNH17Bi{-a%$}c&7rIP(c3+d>Thk6_Ssc_&#V5PtyB7Y89OG6UgymnHELYhU_vo} zQRW6U8BFS00Jxn#E2h8&tR18hf)Vpb z{&r)8e3+V#R%Y(_xyfC_6C2#SgFk?Wt%6$Hkiw|z$(x~>?8>sCTzZ;jtW{2per>?( zf7lo&Vo^J1f#;bhjD>D1j#zlbwXAAx&~%C;x&eQL5D;tkx~RPGU?(rE>1+s}*4y())<2x3ovs8e8?pd{h-{R7@nzbATN4 z=wN>#YnI2$_^c3IQdsgn@X6n;a@lDSc~@O`|Dnf%KQIuK11HFeJK297^rtwMCB5`E z)ihMaU~Y8sr9@S#G=Cbkku*iT-2P8ds2NZqa4ONy|4lsXKT^LeEfM}cm_6w7g z=#=YK-yIk$h6B>8v_J|hQNct`eZ^S7RT{?2mdDO~MR0C;84iIc&KMBpkHs8gGK z?Inl#`crQ2yljt|Qe{YX#+Z}e)ra5}ek&b$scY+MT-?E?(QBOTHK36AW+y=`kzq9=Vj0uD}f~nKV!do-{&6oCqMOP93wh(_IQY2%X#wc=Z zFrVahSFJxVL#&10ueI&fXb0fu`+w^9o2115yL`iM=JD{GdHn&_|5WfRZ+>4OrYUM3 zW&^{4nl*db0eL4ba+kU88`Pm(BScfK1d8pw`nY6uk2I_ohD7c+!Ag@PyUr7%lnR`J zRAAY~hq5}NFG9ngy*In}T|B!tJIp=InuVGtRs!5TSc6b-l}TGkZ92K4lItrvg`hle z#JL-`&{#|sTpk~?bAia4{^+#kfgk9_lQ>O+@cnZH>a4EW zk&(N8OvJd$IM~z`&akRv-$iMb(Q*LBmrMV*)4JlIoxj~3WU)9#`v|GIw&5LH2x!dVTx+U1~X@m8Zp&G!5j~rW&m9qq} z2-Oa7+=}>Z^1V~}j?(iNapt;_O5H9U+8`WDvzF1qZ?{RcMp!ETV242IAU#N3=O4ljF5LD{f5P)7M=OyUlaJ`a4M#R z;_h8&KzCW3RIV;icA2MlQ2G2|pLnVPsoSj0%Mps#C9MIOI+x#AZaeAooW5EKOP1%Q;7RtFqDxQD=UP2NJXA|cGnu<~ZP`(6{li`w5Y9Kg2sY1j_>e%Yh(T=X! zwQK&=M|cGeLX28gi_Y@3c!f>UK1%{qM5TjMS70%NI|`lT!k=?la%VD)znjC(Tyt(P z%DdydGYEw@a+}_GCGy2oEmtBKL+_OSUSuN5E%)iJ(syR>W>>^rg9k%duRbblxJ?wd@_!n1^i;zXe-Otih4In ztX@!HzTLN@zDFF_#>YZ0iwOW!V_>L-`D}9OEal0gBLsY(%vt)4uIv5dVNA zdmTidrVaLr#y2x#Yb%}aPncCnO^AGuoN~Xf6RBL0`0hb{2+$b%^6ZiwC`*W()0QAo zg&}oR<=++DoO|@PkU^@>v(C7Av5ESC;vq%6yJ&VQm0F$N;B*ku73~ngEOpf2D)wXX zMWtZ(yC^$Ny1*yXruX(Bmwr=XsBJt_9D?TO4hzMvZz8QtZ-bLLB2ODsBW0vq^A4wW zp^=gwODrh`KR+7%oIiQA8|Z+*whQalzgq~Bj3i`BqfQTUk{@z*u%%F=KhiFOr{xml za+iqB3t|e=B^r4JgFZW}XW78+dsmaU*vP7t)1_=jiKkk1>-tA-#<-e*=ybXw6xx{c zrNL`_F*(Vwd>`^eWQK;^t zLHjomhTuQg4&4&wzqE3cgxuCWNXdVHU$`9?PpVJ7>F3B}T7~)LzB$3XX4$`@^3fi5 zFOP;+{Sk}m*?!J)GzaOGrUKCUL5}6tRS$>TT+dt$YdZ*-vThKU3-9Oe6`+Sw?D4tW z*zdcpzHykq4YDfb7DY*h&qyF%>ynU20-#?0ZX%>8=6Cu!0|6o{mCMeK#Glr;LSkIv z-jfeuJ>gO;*D62m3Nj1n^5M_yW3wZI8j%8J&Rc}rqfusKyHsLmw9>W81fWD&r32-N zu7kSqoWp8EXD_@Vm9-7$vms9gpEw zJB7BrR$@u`_oLDko>RC_j4P?03(Gh?I;m>ReJ4sgVxFO)_&w;tv%D*HHNV0-eX)bZ zefVPFHVEx^#X=;i2`fk?WVq%phq_w0w&fWig9cw67BTl$t<>ppMzToJaOw-ZQt*c7 zo~tb{z820RoRGTK5?l#^HSBCltb7|)J~zn`@>IYxje6p4{|Ast6f(Y@r-s)b{?~yh zvPpdZSo3^PvHI_ujO%< z&!F~ZBos)i(8Q9OG8`zj-cXlNr_38UA`=mmB4PUdReOz3oDXD=)><-pSYmJi{HNeC9G@T(Ec605*CyV z9Qy5RQ$&?eV4*_3%lER+XpP6LMD{jXpUaDTXuf2UJ&mqfR>urnrNE@Y8e&vU=8CQ^ zD9;oi#xxU7tdw>&Q|oFQ)RT7y7N3`_nirmc7zaAsGEGhG5*~cID^#nUR*hPD%h^$e zwr!8hMAWj;Fq(yvVga31gXQMn%PY+A=c{0*dr7~I+7{9@p~W#ye=|P%@XA~)*-LI8 z%9k82%AwGMP)CW6VqD7{5xA%9GnE<)hHSVPiHnF9gdw-H>;k{o-%}njhh(OvdHa$3 zjGTKwR}qPS-6jK+ zSWAt2O)9FkGYoVo$HQo%?OU8+w&fI(rI30bXh{0JiSs?|j!jUMo9e`urjFNypp)28 zn!Pdj=D{c4eu_ssBK0a%GGAn|=#x)Uyr7z}lsQPt`rMq?po*ck0bjlE_NB2}3HVwF zH}1Z{$8C`br}`}%pUp$;V1fBraYm-uqO@MoonQ|tv6qeqACvYQ$^%r|7yhKd6K0^f zdDf?@HDr}qGw(&mA*e*J|qStQId256t@ zc2q%CQfOPp4&Ko#SVcWIHo9YLg2tqZPjVmC?)Y26RQ09Qe8bMTJBcI$`g#ot2 zdz5*AuHW7;W;%LCdRwW~$Ju!(n#A;y|{5rf6D5-CdDe(*K>m=e(L zS=Yx-^f!_NhWk78RpoD0g>erODr6w$4%f&&|1Bn9j|M^4@D~QgS`v(o_gHEME$!(Z zIno3wf`U{yrjRZeL!?hG@qos|RpMT5ohD`6BKtSx?TYYtEFHG>gs`b8RmM_fIF9bW z_vrqV$Hl8}o0`~o?VqXDO_Vod;c|Uu&OWFp&|dh}mvwmv+2@^#Xu-_f>6T7Uzmlzj zBn8}&$4QE-Gf>HjqrFKJhVNw>B|8u;2_M_V<_FHLJX`(J zo#i{$?7ib+t-nd3T}IN3)*JU_5MZIm_07)H6r}a~i1jImO)xN8k$kT+sWz(?ErYFY z&&^Vw7}h>e0jBKEC#|eQ){pC9c=wCrsgbVPBJ$)pCV)g|Q@-ww*Y+sOQY6r`#(;q5H#rDlwi)s98^iU%-^8 zq}hV|p)c6~Q;?v2cN#-zDzfj|7Ca&?oMY$wsI>GCPE130%xa7)yYvw6@*L*kaNibH z9nB13IKQcta^j9rU;J)ay=|`3r;74aL1d|>OH!*4W|F&W;xl%ybaK#(=GFe*f!tqU zOm)Muq`?8<@a6aA@sK}x{dC}5X7fylN)Sq>D<6!d(&Jh=xMW&flWY%Q-ouvyK!Ifl zO>EdOt`#-)XHeI$!6bQnQwv$%^a!ZsRhYKyjDplLyub1@ia$;-M5ZQ|xgMr3b&jg$ z3@o*rnf{sifax>AOL}8>kx?~o-Y^hcgj|-jqq=ArtisBMr?a;aTPl(=TKJ)MIqqDt zT0J3c+!V!t5;p>&U{O7>juBd?5bi|9k|AxX)gsG^Kys=TavoZ|<{|(%gtFx7+)far z{?U1DA5759?6Aw^xvU7ZmK;1$S#%>5OKlj#qmvG>rR=ii2N!PPSO$5!T*p~GXHWeD z5S}VI$s!(@s(GlMy_|-tvg1X2{sSmEz;0i^y7{#dt!m2B%nTYmYE|Hn3yS<;M_gEt z!)6;{!W?*3xn}tiP{2jXB_INlmz7Gb`(GBI(-%}%`4P(^+?TO=m@bJlLs38*^+nUp z^=`d=ejggB^z`YpT4big>S%5zs67An0$AlC>TG!jMOXUm^DyYI^jC`7`&;D}c}Lmg zQ$NykQF#B<1K22?O6MaTbD%?A>e1Y!{GF+bvyvKc=nxi zSxgGn+lD1zX>S@5!&hQrz2&y3t;3vrRZvU!s~a6*Wt}VFqne(Y@~o&Q`E=K~X>x;V zI1jJ{X!Z3mO+)J6;z<&F&l1`kRE|IqMxkuf6~?6=9p%Zdl28z#sBQlFe=as9xLL=?oKu{7_p$a!FG#T0H=X{0@?c?wz4GY zAI6(=E0%~OYKd*9zA%tLARq++88U;hi^vs)yfsoRJo7Y8wT76L?a!NB_4}>^#``Wf zziIbf>svjNt5@tougpZUvLPDTbzQ=e5;5CbY)%!mI}af)+4brXgYQC;lH}DFU!f^oBt9^_%R@N4s@3-$ z#ZqLzGs~%UKn@Oe6R>W4c|PeTWWCiUKY9{-?+=+EBA77#v$hr%k6fp`>UKG=p+VLf zSTou_-(3$&!%~47UaITYngrcg14k2c)p4&kgg#s}qp{}c-&vN%*ea`vZ6=bhO zzC~ct33$kM%Z$+#<)6$;Q3=`PN0=6(eLB2e4(QQY38-zFy(_O=$?a}dAK`Q7js8nt zx!lCeu#95mO0jhHD;vlMEO3YfA2e~7dicJfEkFBw?v@4*C3j2;lA1W^7=0N4T0PCxc}c&|%WO+f`<)gM&`iPrkKwe9q*O+s zvYa);>QMS~vuR>6g^328`|O5p&%cfgtkbPZaV)@^X?XO#DmN^(b4B0-*X(ddwtnN% zTH5h8c$+W0DW96N#lAL$?iu7Ds(N;*0%?oYP1#a$`+14+GLzBo)$8M0E zp{Yqkvv>TO@5G)=wUmrDg{Ib_%-A2fa(>{LvBxT1vM2P=4V@h64>D*YGT5}_Y*f_U zr%{LeoP>AJ)8VX8o_GN>EACa+gOt6iZJOH%tk$0G`p;G$;agwF`Dc4jd3PU!80bpw zrQ17Q#IqUeJ#X2N6FJN>R&PRB{Xfaw*J&EeKWV{bnec`ViQtmk5$zvKZ)6!wn`9L zF7%43ST)J&@%Tb?-$v-D3)NKdR(myscPL^ZsRT`3`rT`ubZv$MaVHLM;+30egEl6f zCCQ4wHNgiA)r7fK4}+^o4^rPie5d}>a?HJcWR?@F;R^wnLEGQRya0}f8SFQP7&_PW zt>JaKP}?8$ijs`sF+k(++2`Ro;A9t4=O3A>1$%rVGFVeybSdSvPnncP10qKt zky)a>4?KIhxbWQMWPW^B_-gwGt@7oig?-enTTpo5ctS}Hk^f{vzwRSq@z_XAPcIljog)sX&7=$g*Z*Asa|fIgnxa#A04 zDTum+g;`{(j4{WmCdZSjqSLuTC;(@W5b=gKee87tUMtBrPH~1#&k>u)?J_eNp2DX0 zwKOC-*eclN-rQNGBAAl+sAWFGBFTNh;0(OcmorY|)~LJS@C`bFhHx&^O>sU;3ymPM zM#IZxLQ<(#=?B?c7{8VPBm_k8>iaGROpAtx@yc^lk+Hh^J_@@xD{hfhXnuA);qy7o z7kx+R7K9fDnul!uB9yq)6L@89tk&$OX>>q@1>*=GUS)u%B;si>zS|ayggSPp;EPII zPAjtjw%0=?W6;tMd|f}CAPzhgMpc~vl*AW^N1p>V+rXE!mAy<38u^e_*T_~c+de|4;Omw^Gxtb+icxWRgT!DRosblS&i^q$( z=fsOme8o2 z|FsNmd+2A#)1qjz?R@bB%i0A|GrZ>DGOLVT5LjJiO~E$RvdO6%WaPQjMv0OjAHUOg%t=V~`{FNu!4iA0V_Vzw3@>?Z= zUaB2vT3)`JqufxZzry|wrtZ1&VkVx3T40hLCE?>?c3@o7I8*%tINNJj`RbQ_In|Hs z6gPhNIP;-C$PY^k`PHfohRiSyS7}s7WKikl54$FmM$E$WNoX)?VCVk;vz^z3E5dMo z00%jPn5-qX;&KUs#f_|nBUX+e8HPQ5;)htdY!&DS`RM73-dvPn7X)wO|4ZjtC5T{6iH3jbvvygtH35w+0I97>p^ZR{@qfBdJV`q2)*xc>Hkjip)1p^@bI!&Rx3b}QF$*dtK))Hx&aWVUf&6>oJkmZ6aN=G#>)Mzqvdjy&A{?-L> z#cC{-6)B&c(LO2fdkr0aUWVc;5B_W|3CSRq;6V8p3AI;Yls2u8IG1QxqxXT{V)whG z%OgvF30$TXkGOpC`GiecicYoqnnguTs}wgCNHv~&_>`FR_-;!q`;Ul-qbLum@{QbV zndvsZt?xwNRk^@@vjvV${GHIK8S8J1@bcP|3u&{Z=9O)NT(BI=!1VrP?)N6#7Nm^a z@@#1V&>zXy4Gb6PcP`(>^nR%gdQvXF69thBrH~I?P7=B0b$XE>Y@l0uWs>ET; zMO|K%e|_mGqS!Beu3Zn=2O=IJDh?O@9@XDNeN;+}Yduy;5whRs5FeUPPfD2wO7EQR z`5>p_?;_G$89n>4Q9HJ3h+b4!>0XF5a;wx*DZ^I-2Ob$695{`I<%}k-1a$p2zF5n9 z7pk<@`6X>j3k&U*;bn_2rBU(D=AsbYh0m@|9*p#Cr7K?v&06rV=`%A4>8Xk1k>g-m zqBC%~G*x_(P8#RuZ7DF+Qajh+1a+Sqcr`6dm0&dGJ<#xXhq}UDFrQ+dd#odJq zjuZ_Ya3N;~9UkY$w{WICVgUImC+&n-wUzh9m3faYwfMpH{}z4y5e zj*lOs*K##QEX+*uQY%Qy)EPbIn4Zk@y>Wzq8RCTaR7{zPYcHtz4h(r3&6f9WsPEl= zHW??>m5>xKFI{wCG)b+_C=-x-=S}OpCUw(K$p3-VhrsT1go^7bWn{Z3KK@KVBqOq9 zhZ$hqXAI(6hETH?3BLjZA6mn5gt=eR#2|w?qhx|oysl#XUBjW2YMNTAh#D09Cn0v7 zRxu_$qom^WH2SUKlP~Tn!1z6l_R#~a204yOvuDYQQD5w|ud=@s8IhRq&SM;A+$W9f zt=`-*kq`Isk+j+h&Jvo;7^bV$&Wheu-bL7B2kc=dAR=t|CF`eaOxD6Bu1N|+y~AgrgMG56=@Li)aXkB}p=8~jtdh8(C8Jjl zYR4otIzyzvi;1ZABog#|l5xJj^1T;ksOBbv=tDlSlI&IiyEc+m?B6yUD$NQ)mIS4b zQ)K>(J__TIlTJ3wj$f-68>*v@=M%=$1w3pVx@`0IOgVa_XxM`ZRwLh1OoZc5#ib@b zdDvBLZGG1gL3D!GoaJ#(l`GkEX!^G3#5XkHTLe?#laQz;y?Ddvpw@Gc^a%yY;i>HE zB6_8Pcs|rp-C6Xr=X*bQ1|j2#a}y`d4Liz#e*hZQUYATI;_yp2n!$FQePNvXhfbmQ zLF(o(XVl-p(T7LlhoQ`$uQYp)$2<>Nl{&p^+=BXQq7wSJ43R%RrqSA{PIY+^-1~9> zCeh75Qapz5ndiw8Om=@d4#xxsm2LJ#F+F>{E0-`#iblR}!XnZtZzG}(!s!l`Iw^8D z?J=4UG+m}$9JAT)dwDEZcGhNN=#g6s>$3-|F)gG_jf&?gzU7^zky(kUU&|Oj9XTBW z$n5<%hmHNx*%1~?Hk87Prr>sgA_%#NE<6tecm;66F?{}x%~-rVS_frG(UrgXM{O)Pvl=m9xE@bJUp?Cm$<%r6cbGQb49*bKZlq`4n8Z^tkG6-=&71bzRBO z)1-7>edhRG#8w8fgz@pG09EO+aE$Udp_3h^%DDtxT6nTC6L`(CG@G=2^4ORuhrKA? zyuXZ&fTe}&haOe5~l>WAT$0BHgQPkKO=vr!OAc&S3cuP)= zYDsC?*3uxnlZwLK|AGBN>3k0sBF{Mp)~wOv-cO={`t?axy3An@J3r{T}C zFS6!Vs1(>wGEd}PymjWxQlY!!X6q}7+E8@mcg4P^R9J8o)Sddg$+~wZ$l|%7AhKNP z>(8M2y0D>W7K>2?SDZxb>0syb^1cN@_Opo_N#%%wQPLwJJFG ziCQ>))nV0@MTam+Dh3XG2uXE2LyyI4RFZjOcl!q*An(m>H^sJdPyh52BYXgt^<2aL z&kw0%0iN?hFqaba9{@N~+8IoCBg*vZ^sMK6AE37^A6~RR(AI?YTK?>d$I?|`bGtvq zbKByc+7{HCR|^a9Tip~fkMwt}W9Yhx@YSom|HIfQi}dDhz@u{Gl{yU4Lb(a^3uS=- z>8c(A7o*M-04}eS0vQ+ljrlq5RclK$4{`j@`4d8T{J(#dZt28xav}&Ngz+KNrG=)U z0~_*tL*!p9Bcx(qZi|3jTqU8tZa{`88r{di0npMPyE+4ZWS@V4u+mL9FwLEgFTC#c z?D`p3U|$&l3$Tnba?ZL<_G>ME{r1%n_E6-aV7gHLPRh#y724 z{ln7r>q&FgMFk&hHkC5MZ5#@yy)<(rt_c%moBkM%r5@Q+A-;?uEZvHXTYfebvjwiX zK$_fx`XW`TNBvtq<5&`V6NerYd@!nCK!*9z06rR#V1G+7qTRu$kVe*bknj4q?QO>H z#|AGm3=iqPL4sRGccSn%2K+THf2mebCsm2*0pWlbG&zGvpKxT^C^6 zrDo85gI=xtYZI2(inohjV%@CLv$mHDb&c6PhC8*aG zColxwB8M+CfER69GZDt#QIn@~BKv?@Y8brFn#8`IB{FFn`AcIAW49*k&xyF}H@yoi z>n8HCg^DVo`JanXwN5$h5eM;4)$=7YnL;kUme8q0emsB|2}`Us^a~=;Hv(^GibVD^ z&YsuDXNFTmIitRflC=c+adDn1lNz~@pEkF?LF~Jh=zd7rn8bd--Fjd2D5zonQ?nq$ zwT?)>9@sW12jx8(gIDG4Vkin@V>Bugm?IuD%=~XGYq{1IyEk-ai9V zn6krn)Y71Q*m6nsSFyJYC(q%cA0tBroyQmY$KpIMxsR5Q_Q>5i_Y*igH5LZcO7+ge zGlCpw@M^=gueon9<6vJ_e)07Gb-S}~S!~J|Q)kI9Q6;eYrO%`ho&zKp zg$PfIMmH5K52KDy(Op=qCP=@I;Orr9gq|J!PhrX7_tI-_8R z`nsx^A;SW&5M@2>kGLXtDIqJZ4%f=P7S*0Q_;PSYPx=t5J*PXbOqSl^VhV4@dSCtO zdmM&E?=I^a1wT5hJaqJQDOdimh%ijCR8@fEd>N$ck*niNen-4wR@c<6C3IP#_)4 zVh6(2q>5Gktx~nXx+itYn#T?A6;&M(=-^2x*S2p~5+1?U+Ve_@ZO(UNGu>V$?&BJc z?z~8&zaeDsE{>YU`1p`;+$*{8Ny}9U*$eM0aT$8{ns(clbf%iiVY+>9vC8I+?7;=r z1o*a1niEl<_?%@TEZB?clWclf=WRlUeY&fJo+?5QMDIEKAHa+wViF^+^x@A7{Q@>P zMl+ym>3Qx^#VOM-u$c=FecD{^YU&Nr`g}=gm|VNS5#RQs{iFfqALiiZVn1K^*H4uw zGaAN(^g9&k_j$a;XL%2;=xPrT>V6H=kP*JE1Rbe!ZRRD-j`<3)>o>ZBE?_$h>LN+^%Z=52@}x&PSfU+l}p2+f{*y zq@i{*0bd;Q%v6~c=xol^wMgu1#-je#ZnRT`@Q!dAnuKGyGgt`On;PYMHdbaB*LgXx zVaIc31Hu+$ddmME^+`7K3xw*?%+g%usp(L26P&7re5>C$Y264*RV>xc(Na0ERS(O? z@DJZW(BNm0i8Mj(e&Iz*d^A@>dV7ZhS-|rF3oT#@_5D|qG^?OHa zlxJ!u$QanktoAv?65wh>Dc^8v5Qnm$Az?UN%FAC4L4-eTzLH}AgsnNV>~)~d6;;Kx zeEIkp(nnM8!r9E{Cd^uGqJK@^&n-NOHZ8kVQdRc&nKmyb`N!76wNr;HIS&`~1Y&}T zf!H(A+AIiz!-A%6eye-!Y;e^)Rlg5-VgsnmUn}ak8G#q;x_tN@-|GsACT~Zjma=fG zOvjbJGo|18eYaq4gg;pumpQJM#c-MdAQXLLk$p?ev^(z?Bms-7@| zr=a@~-E0_{OAfx_tXI`{n%f34W*@e>2%PR3oiCsgvT^h_4=}0ZSL@j)A>v&;n~h~I8T+Y=4R3LNd4D4eOkY_B`>}#G@eI{xad3M zYjdssU$nTFZ?|f|9v(<@Zs_c7>}hVWJx0u{!IgHV*4RN_L&$UO+G{QSJv(c3^`oM`g`?0 z*0%biNeNuNk-SVD-n^TLuhRSO1uQuAi|d=fCcWe`4#Oxcp;6lgdlHf%2(C&qD(+!I zCnbpsn+=gA+^U%9JZma0>^bL%$P}rkwB@fX%s9CIT_h0NIle?`5BY z?MaNVm~P1+9=!jlHVrLmb|hXT&PfJn^=2@MN=|o!m;)r$RP3Xd+WEs}7p)jAVu=u> z=f?0txGi~b!iTQq&jEI0G|LvaJ}Z$T--5e`m>9*UvguuRxd31UVsxp+Il^E2Ni6$7 z{7kiw!ferZ@@gS=h%p|DC&2|FH^VVpqsXc|i@8!WlIN1>T8De>r)vh)V*vt_LkZzr zBux$Gt1&U~?+BYfc}YQ|BfwXM#IiVUgco5dZ3$s&kKOtUA-vOVFwZ%`Vg4xqeb4Vn&Gm>+MnfPMIs1ITHv%RVUp*kZ%yx+TIn>n ztT|Jzab0Vf@{WW>6TcH{Zy~X}%8=wix^>_i!b+9kW&PWsVt-qL%#0ac1rpd(l4Z+M zLVptiFTsw-6k!oce%e(%T)Xvs`{HA$sBarbQGeW;{T6>Cn~GcYHkRY22LKf8qx|?> zhg#8_L2qV}Ic0!OfaotMcLi75eeLKZ-Mmo|a7Z=j zNb`N~tDMK8H&Cxdt(PH)O7Vb>jS8u&W;8*6E{3M5h++={e_ILpJ2ho{kl zMZ5N;-a5*DQ2Q?YIqVz_B$SLlaW>xPCejscA?zYIo}xB6Y)IDE*WsD}0D9iX0fUTR zc5buyk-tQ#`x1sXhYsdkm)xtM=0f(K~>o?zHDq#BMCv^mH$go4No${skmk7jZ*51)SdAd z(v)Dy3M4^r$)m|*Jc@v8<*9&{s&k)%op?a&Sc#aWuo~s@go-R zcc9dcAT(-b?N0CgEQJemS4Ye5;_;5@33ctq50G^I5cO%L3F)&dM*%@2pAv+OxfOUk z;vXQDkC(+-&sji2abyLxp}FHcPEJi?G|m`P+gsn1jVe5U&<*5N7k&71a`;6{Pb5J* z*7zobNN}L>`kTcJl>*bjVh_*+kAlsg5-*k+?5ey+I|90Sw1YpFTjaR6#eQC#=E}5> zeVgj(0$E1Z3-~UYEa96^qM1LO;`)f*e7oz~&t4(^`c|bpFgY_ZkHONGP!`(%F(^c1 z-+UrR+ADD}e7z^VWQA$4;@_%+lZRnUe5mZy9KP?Vj4R zFs75Jw!U{u572OpJvV}w1XDaX3iwj)#fw{gRp*aS{P_4KUu;hC=E_T34y8zk#Cc&D z3)F;re4+P++?DT+*&+JIK4mn)(Q5V|fH}WyUiGh$;JNRsCoP%Ow>Ib1?2reAopOvO?8L$ z@pH=BN{qK0`V=uH9cK>Mq_GNn-0`-0bqjHi(6XDA{*`j#qImYnMjUeN(GOxGl@2b#Go4TBV_{(=Uff*nFGpPw_+&m_ z^wUgC>-GiJtrJq8Nm0VXpv@}bYn7|da3|ofGD&vF_rfFpd8u~)PurjDzVQ0Djx|En zK|%*q%#}vseLktbb$n0LWW{d04ykbzrR#>v;Ly-QyhcCg!rWMV*y-tWy zpGFfdKXuz;X7Gr7Glc@KBYm*ldT#6$aVt#6Ch3vmKy=kmfw8rJe3yzk@IcQHKtcQkOM_{1R^P&3$mbPlm zae5pLaC@S{uJAm2hyY{z3GB>1qRPjqgCWgwJ=N0hFaipQvmk!z-w;7x}~xuOy`(&PYl`mi=`ygtJE)}IJVN5+P`h&b% zpGcW{0?rC?s0(brYWxEfj=+F)&(gX7R?nOqzJA!#Vr2W4q5<(H!=kN4m2SmagOex8 z$WccBE5^b#5pKo~>l7)udYid?hf?7aVI-*2 zaKUxA-SlV5L-a>mAH%87V1t=3pl-D9wLQi3cWb|i1y>I#o8+=7=g=$miZ8?;*-{=b zYz>(o@Cm?7s4AaP^p*}YP|{sAAB-ESNp1WBhO$rH5@hR(OxW2bHc+JfN2XTBaYvf= znrxfLx%OSF*8E|s3bp4rnl8VeWXi|y9Af|0q`ttcM;R7umbt?7UN&N16W>e1|L@^9 zdS(zlnL z^QTV=gA?hs#C6NXwZ7$pX?w2HSPi>-EP5#3A66iA%QDGasvwJ@{+Wsk5W)@}$DTl1 zaSm-A_Na_kh}54?&m>*va4CmTH&^nEVX_vuJA49k{U!ru( zt6;!owaM}saKNXj11z{X$bug!w%zcZ0u!LSjF^)0GR2)eTECNYP*1o*bon@Fuo^zN z;BX}myu^18w#B@QjP$MoH@sx924Q#dXEAA~Cs$2FhRJD+7AJXbw^YuX-EW)7C5$q6 zRX#{dQlvrRaNu(bhvO)zi=wOvpNG}RPP^jq_485VtzpN_L#|eenc9<&sT#lcSIYSE zmwK?xHMgiB(4^j8lkim%6|hi2K>FymxxVpTFk^cPR%Cc$lEkOB6qk0jIe6ME8x##; zz4lH$4h4c!??N?v)5I_EyRNoe14wnT63wQD96I9*_ISk}%Sj`+6e$1tw8c#$%EjoU zUaS2HKN8ts6fKQ1O^~}Q6j=7e4hUETN1h6Upt@2C0^4~5N}oo;bAgOkun2Q&37yBv z)5pP@ksk*+aBH?*+=!=Ejx*O^(F~^6Mm6T6dWyLk&l!R@J{yL2n0#|dkP2TrxBD|Y zRO)NeAdOm*O72kk^Otu|_rmb)Fs5PE83qb#{LCv=X^N_qSNpKc@a)VLayuYj{uJKN z@a`#|UAGB@ZFjw=LL3I8r13f#)CwmIlHC|vq~LJ!cU>&GjM-t+Z9>*^LgsIWU^LfC z2~y_{nU8g#_~TvUQ`X7pm+pwfnz7rlt^5`20XyWdESIy|Mqvs^(`h~;hyWj+?3#QjQcJY3$G4JOQ2JfjzSC}HO5qN=}4^+q9%z-sWkJkMXG$6?Q#CkrEY$iZr&;GpWVj zP{ks!tZd*vK;>y{!z0dT`mj5d^40b{$57$r6@mQ7c7|e4MAq_}k^YGdeDEPdN{c-_ z^$~u(CX5Yzj3r^QGAg-TC7k9uA6aJ1K2i`W`$W5Q=16x-7*;2$GeuV1RUq@;rk0^* z*`~;HxzPq#V(rySks8|emQ=a4b~5%G90*o)ob;LgKnc^u>2TI`U)`j`1Y3BKlu#Ol zA}(xcnV9kJEZdcD6gU9v8?ekJ`hAsDkGLn5_z-F}EAP@J)Y4#z{5Zxso{s(mU#$>g zfoppdo!W51Q3|)}z7V~hq?n&32^Qv^TfghsH*t_Ntq@cZcqv*R#k(BNzwOBzb5?Xt z6*zq?j*^pD3SO21CbVleX`H1m+QgVOJ5ZnVd%Q50b7pSEEP z6bKdzJt=l88ysa%l97=fe(iIA3oJ?060v`CLNm4zr6Ho`4{EfuaPAGQe6hr;C70E5 z^CipRGjWxnB>1gY_~q*~t_i_xmrm+fvI)(KouSxKVeP5^eL-l!$?vMkGwQ4*vEDY+ z{Sig$1{#I^SC~*R)KHRvVCs{Wtvoq-o7=nIH-w6kA{v+h0$v?fMCQkgcG7qL$ct6f zx;e)>kIM-Qn~G9__(%+&B>;?g?nxbcyt|Ze4+a9hIkgof7=Im4-yC)DV)?{A(MtS- zK3Te~Nr~ZkdDi`q4U=^DAnSnDB3zXCairopK`=S&BaQd;M9JTra>y6Qc|F${)!1$W z%TqFkg;DdUbQ}pEOa|>14LEP=C+c4*Ooz`u@=uga{Ji3m+^#`SPLB>P!{5JA2?vv^ z#XAW4Gag0)d_0o?2b)CkG6t5GT=Qm773gIOnod@K&9LO|Qw)be0Wcr_V1!Rf?0 zEV0NXuif`2z4wWG<6~`c!8;2`Zrq3Gm4fD2$SIh(|AR#r2P;5C03v7K{+PcfOr%-L zyq7pCzWdjy`9$nP39Z+=9(#0VQ?$x8Cz)NnrMF>o7fB|SBcbE~xUXqp>5lj|Ma4h$ z@U1hcTC$;n@(;$(j_44XrXUcdqh_c(q!TndocV949mIUh=%IUgL(fh*nWd^eOOFXvthhhXcZaeY{U!h1Q$tyYvet;lWhiX8g( zYTjHoLph1|y44pSP^>+!=x98{fMyl-nw+aSLy2-)%!otTxIv^`zC)dB;)YwtRwW8t z!O?cE{aVRQ4RWl_%B0d2qRlGB&DgvRTC`Znb*!RHbz2-vjoA!(YbfQ-EW~<#)$Hr; zLWOcLo^kbfP7I@{>IXTI3b~~0Hgg){E%+VjM!KA^#yykw8`wbkiVw3PQBWqqfOs$G zD}IxWVUHfA;a{ZWhI)`%NQ_XO-~poOX4J07nz+`c=j?NJvozkfgO?+z--EHw8*jNJ zHCf9`S9SC&-&6O@C7d2kqza-e6XlW=RW4@4>@^OEu&-PV3ZiqiQ8t?k-*3$#>8ctGC0I@^#W~E_34MmJUHj& zeZXmT@z7*+w70T=Au|oe`nzT!T?{OBT*O>Ux<87N)FOeI6JiV(oK4?{v&kI>oN9rl z^>u4Cj?;Yh^hVRTLh7wVZ6{HtH(Sa^D_QjEauoXbY?_s!UyR>X%cUu%L6Ky57HLE2 z7cRM~U+73ie=Ac9Ivf=v;iClUofl2Pa>w$J106YQ2r}epv?gDsBi+P$zbiL633!M} z@uu{WD7Mz% zb^1tOg&-?b5q$T!|133p_L{r6f7kx1LAqtQ5B4tN=GwoV-J509RHcY{Sz(2jgVugK z;vG38&A(NC0siMgf7K@3sdsULn9UIz^zxkwO`n}MtjKtbDvu`4Ylm1}nIuZcS7@%J zgr}+zA`k59dPp=2K)L*K-2N`~XxjGN+BqCvH7poqfL|RRzQFkH8FFJBjsF4srD79+ z9(qXilB>t^?L8@i9goQXW5(M+c_d5(%6j%RML9TNN#UXN7+!+eAfD*aEj~S419i8o ztSEc^vWdaSO|_n$X5xttwwi0zCni# z-%c+5+SkDkE|;u1ZosH|EPnZT?u>`t%(Y=(PIVMl!|*!Fb^WdlDM6Gryj)7_5ni4g z=ie<2M(CL6?Y4M3Lm{287bHRH^6;46?Yf!*yK> zX@B-=G=ounOCrb%Ed8+0(3*MGTK_B&kyT ziJ4uuqsi^wz$cJaK0X&)sjxVLEJH(=c}cHt`O^=Vi?8X3bP5GBW2D-yPz?>^A5#gS zctBE#j+@AS3Sq-6$D?_{Y)kKB(b~;TNd;@xr%i})hvG`jXs4_()94tz1Sh117K}dW z*zU#S?B5kYkrZ6DqlH%wQluZ81ECwTFl1x&D$6>oQ5Q5`FUT%Yn_ajy(f$%PfYh#NaUjAd-!Q6VPvz z$&xK1e+p$LL9ECt2w$#8h&AyA>l657OoJXEsNR61f7@Rnu+B z>DHN9YAC3sfC`t&%efGmg|c)c2^+}QQ5Q#}0xkCRil>yYW0BeY* z(U`&njC?96GZ5c0>9a;e*>hnBYH(%{T9jz|eaLm@zLS!kG*WWxB#DaeYLo$dsjup~ zrnzv_$ex|FVQXrpfj%k*q3ixpZ1p`Z2w)UGuje{>fD8Z7>Wx-4&V}Jl?S;W<0eBcK zl`aD!%mu(?N>>btW*Zq2$#BS)LAvBhLw)iED)F7NvfUNovIUrKxf0358+Eum007E8lpYONmQBnu#{yJXoe#VV+ANL2>| zCE(+1m#M`o>$V`PK;*4jVS!fShhmn-1yQ<$OBo-uH(b&CLD?f+r!gPiL)DA=-_8F3 zJ-ZH08F?jiBV*S*N^mhIBvB63A+D{&ibopPB?(h@InrKj=8V6fRvf;kgD^Fy^#@ zx)5>k3XGBpZKOuxs&Ye6Loul%ni6dqN^}S4rdu6AZic8JX42X{%~vmudval@1q|^^ z4(-t8qCmEZ2{q0(9}?6a_|Z)e;bUhnQ%d9FNH2{rwe%Gyly9~Xs_#hFcc}i0x`>`9 zknfZ6;#)s45~9k;8`X^M(wRPdi!g7IN45U|D|H1WgHN}0c*JyPW^e}m7>-`~M~A;L zDapm~s$C_LOJusX)Zgkd+eJhqiRY|p7z)h zGjBqm{geK&I0S^`A|vW%a)LnN{{W7mV!ZPFvPpZPUj@FR#d8$pM^ZK_K0m{QWs=93 z0UWXPeNo~3aI}d?$ccbcOOTfD9of2)TXqayHABR*uZr$B?fY4a3y?9OCGTr8JA>&# z-&s=4Zha{V!lk9L1;VqEJvnx(Resmn%dzD3aM<;K9^dCd!OTeK$pszVyjrD=oy@@M zkrj*^a?!;pm>QA?`>_-d;g>I#IUI77NAAz7)#{WuKi;@TLx=;-URQW-B!(2M){G^J zDO7R*6Um`t{o;I0x7%KAmBd&C@}H;vlm2X)$FG*hEZZcQmhGJ_~z23UVq zQS@a00EwF@$E;4tg`(Za6|LmAS5nXFLaYk06x~*+%11A?lw{!?_^bL&)qI-Obrnl+ znvRP4lAX!6L)7>qmHz;V;lqn_!7+^g08joq{{RxkQawebPow#E{xZ5^%cb6@??N)p zC5(@<;X}M*_P@#foXHvTP#biwos2zv%V)u*3kWR*hOi6(a91{ zc#>ExR3oo&pX_pH6ruafUq{tEcNzG9@lHfNMvpW`lVhl9*U)Jt+f%Z1aRa(Fc{%06 zMrx}qIZ?71ryQ{}1H+$P{{Y!V&Brbn)W6drZdXdvZKR&k1)A@l2N6la1O$#l(;u}_ z@e(jXQpxF;`e}V`W-M})sGbN{cd2O9uMNVRt9QJOfKd!62c}PQN#aM#jzHm!dQSoV zm+>}B3`Bh=hyC(TszIgLYWCW!@t#^{8r+_OA#YE%J_b%@p*r- zU8Y-V8h@o@Yoez)rfFW~+^TMB!PJAspXB6oP8lvzpVByZS3IFRnaFr+>Hh$UQS*nL zFSI$#7Zxb3K+(KHr{OhIN;#1z16_Cie+9g zB>_O)d9zZ7<@-41!HXQuIF2Ge**6?GqId*<(<^H?_Ezn04UU8QLQ8}3um!@3eX{i; zgye8zl&s4qh9biha&wkL5&o4y{KKf*TCL8jZ0eFoV)~p!5QsLf!%qGgWHh+U>IaI4 z7ZksVv}vMthd<{vsdqOtir7B%}z&V3cmT745J(> zV&o7(C)3F(gk1e%K;_yf+^Vrs0RYe(%a;ub=EfwRY4w8g6i`lJWpZE>+bcOF6=B6Z zdz`_^kOs@7+87Z90RFj&DH7Ewl89AZhg^XzWUC1HqCX`(tMHDZo+e8w?86*)%NnRk=r*b?pJ~azF{{XsZ8om>_ z;t5^lo}ptW?}6fW5)IVl`0_$yXEPRDc?QY}BNM*$$&lJ&iHRMlwpSxfG9V^awgreU z@Q;178hLx1T$!tqX$-bjt3^DRW-OyAI8%(~T9;LJ*#!aUFvkUROmx6=MOiE{{`%zB zX8R~R467k0X!3FM8B1vWDVklW8xNx~j2&)GIbI|!+ag1Wmk1qPY2T-OTp30n^S6)w zWcfGC7D&3jmpOv$$xo}sLyz)`RP04S;r4&j&cm_$Lp=WgcaU6b>X-ZHTdl_txG(?F z>jfxte{T?C*jxmrmjQv03xLS70lH*KWCM8;SqAbXrLmDnc0`szvDY92w4j~amgOawz;jpE6 zIHeN-u1GTogX5MmEmssOA;pkYQ-PA8z{oEcQoMA0fAT9B{{V+a{+@ruIoe#m!cckVPI8=(M&g8IgotGskb`?! zB4StKQ`C3MM8R(v0p^!pTg4?urcj=)GbbF#>g8gY9a6b$CtvQQud&$XP|6Q5=EpQo zFot>Wp!;>Fk5QHg#!aFSmnTQ7%&qpgu<5=h09k25IzKVR_GdgB$Fa%|ko0lop*-S? zT|x-}tqpuKqlkusf6&R{B_(*Tr$1g8~;OSfV0ihUU`9EL+tAeQQSYQY$E>P;z` z7;|wNE?%EGk)oDbrlj(d8u3#>L0;b3l`{Z0b21!YZka-}sUmp-&~8ZnnT;Yk2NFad zq%5|bZY1F>LF1_v1PY$juWIC{9uculNN|e>bvfEOZzZx7lhQyH!zfb6_COvPD1ss- z-p&As3G(7&(&_r;wxm9=rWI873VwLUUT_Sms-Xuj9?gy&O#kvqcsXgoVvXdSo;sL~e zi}+gd0CybLwT;4En~OeC>Mv0u%*1+8fya_YN#`4#{{Y}{_>tk^miYewqx^s8e>uU( zNj_;7wPIeabqJaChY#29)dAFm!yqJQsy&0`^F zebp_kt)ZFkV7Is_c%^S`rk>n$c>Wr)6|XvdlNtEGX)+U>h~XwakD^hG{{V~nU-3u+ zw*d>JL2V7}qQxQ>^Zx*SrcTBK%CzLDJ`QLP`#ife$&ar1htrlmzxeVZ1?~QoHj_xw zA)Rkg=hH7q;JSUMF$J zo({Ni>Ee3-0HyqYy=EnRkUv$h*138q`a1Qhyis{byl6QqEBDNUIpOE~$o@Z~ycR5a zQu%Hsl34V;e#qQS%qE?F!J=1n2858`1fLCCFN^>OCK+&#@|gaw(e$@t-)VD9G}P1~ zwHkfgf-!ER(s-ZMGX^KQ_<{av{{XSfe6oR;9Dj?y)4=R;4X(FDuDx?@5~^7`!Cn*o z?UdAQ$eoF&T!_JD__zKY+m4bmHf8Gm9o1J}7c4F1urkI}dUM9X2mtp7kNjQY}Z!5?*SM+Fzl8_A%UAR!LT6HANhDrr&Gq=3X5rgbbnT{*3)G;BzB{V~?kJ z%lXNT_ndW2A|v(K)z(AK5l~%Ox)V*hpR&1+i?iXB`b${Q;-2IBsA#Tkb!{q1wcS0U zkz6IRo!U@E6soS{ku=LC2;#^FDPQxypv+b|R1V+7udCVlYemwMU4H&oNY;i6bzvIR zP_Ds^Kgw=79X#`9$VMo~`qTQFW2?(Dcq14``SL^Po@ckavstvZNVIs#PhE`*h>bTt z%kPrZ=!_*(-!Jojtlcazmgm(k_CMyR>o*=w)$L%op7Hd!*cMBe&0}P#4N$_Jd*zyV z>M=-x9~b&R#F%*a!LL~V07{l$`C{cvb6D%9<4d@U)1r_I5Gsr*`#vxkpW+*G%)FhYI;dkG*OM9JB33;~ z>S=ydM3Tx#ThOYB1c~X18EHy?H~QJHIkg1w1M2?(O~TLjgl)ov)qKsXCCSol^kn*^ zWl}l*7m1LMgirxS_RDZ+@tF9BC#(6t#@CM(9qmf;ZEor*Vv-o6g_nbIUI0{d-0n!p zHcpmvR4N+n|5I-BTSVCRnm(EIP0Bp93I)x3RQN=2#ZQCLV_0eA_ZJ_o?&b{yto z&DiPnCm^HsC`Wo!Q4|B?lQ{d^PAlfx&naR{lU}$CLJR`DK)pDE$Her=OJ=!jjgB4z zk!rB;>6DpUk15)uA6a%(jVehakf}e}k(UVO!h9fEDb=l@f-h3x!i5}~r(g$(%qh=^ z&~+M(M-iw7FRXrR`DVsRE#NP4GNEYQRG6BEhvFX*8-B{>(@)rWrU5>Y{>jqj$q~%) zALzX6%zk>-wP#0bl=`z0i*IbqB328|ugIg81LEK9XGNs!%viPq)%@xGU-2%ZHhCZD zhADBW$R5>Dys|4hM6w6spqfa4eUZ+evYEAxD+c*E5|?}b((EpqX6zS_F;nA(g*QwD zvH`keNn`_b$l7Vy8%uP^lA3lzmQKi$mmeH~O8D3ufn^os?*K#{#S; z6fGwL8s8$W;@G9WCjz&)#VvBcmFXvAktqcg79p@AJ#H(LwpN3lXiiKr38v?4F43~q7SA&XN*g;l~6f8IpT9m7%>D+i{nEOTSxy5<3;_?3g9zXRz>i+;k{mZbysJ)LgHgL{USgM=AjoTz7 zLoqTCHyUJbT5Nr?_~s$VhH?_SojTzwPlyhgl?=eSnDfM>w|1f1nN!JjUL{NfbA=a-R&xaMR(K?hz0)F;jvf_=0yoEQEnP z+NKHSRHc$JcgjnDSr}7|Ko$4NL>?WF3pm8^?JgB>t41MdeHBkqv{j`l2TYF922 zkkuZa&6i9}9z1+rpHKDw0L@M0Hb61o{Xg`O5_x7sh2ob`km>5f>e4~f5x*B-_>NjN zfSVBi9>s|2=WH0?QVPerKoi2b5zM*Barn9#?JB#uB z*9Rp?{{Tr&O+!~j7P^hPyv-ZU4C)w)$F(1gM{FEv-+;7r=p}#D*!-=`O#uy@kGRM z^!QA{5Ii}f>i+Ywp4l&hZb{{V9&HmsT@w2?)s$33L8kZs+h4hiIFW03q3 zbzgC&a7! zZJLaOjEaw|_`jw2{&ZVT+|c)8YiPh4lUdw1KSJRak+>kAiZ9Dj;G z#UJyU$gZ@EwYb$Kv@=H~o$T>~KD>y~7AO3T!na}uRXD&(h@1ib53QdGs|Z_&;?*D# zUo22+QH7C=ajdPy2;B;VKZaWpaULjov7Nc_{{W`?nHvVocPEjDRh-r!%`Gsj{g z<;c(uG6a9K*NNrHf6B>l_;Ual@Js9e0EyyqvFJh|? zN~qe0{g3SBIiL*qLA-ax2w(8IA|gg0@k@*NV!q}Z%il`IT|=8n1hE@>G)v4>lHE;v zOaP5=4I2Ud3`_M;wtLWEkfW^w0ah z^v*tfNBCv`0237E?@IFJo}+DdFR7+YF3hsBlv5zB8|?)@?6Vd*bIK+gPMYy*GtU|2 zln?aD7nn6$bF8+DY9qhDi56(~1TQ7#wdLS5H&3RNarlz-K)ISi3^J%7x% zX6E`!DaE_MrWw*E^!UU`plVZoM=#XrFv6lG8{+zJ)#_}lB#7)c?^V&YYwO`PwZ)~x zmiJB(rI8uJiBB4CHcXDA1YuH)qs1Thzweplj3c<(m9IRTuN69GlMSp^F^XJz?ZFjW zejz|LExtz{yAbu{GvodqAE~J8@x~zk06BbKRf080warS(OLZJl))DFu02J%6r){yG ztk)JO%ZT-5`MF4XAusd2F-pAO9C~6}UfIht=@87Z+}OgUOpxr(4-rpK_Gw>>Gdnn$ zi2`FBvL2g3l%y&{erW#y@t2nv#MaPT+rbDPjEsc}ld(}zPWgxYpPPF!kv!Q$PHTA* zq2^CBX-pD1Y-Q9Zw{T(rghg^e9XgMePf4T5Hxd}cmKbFNw#qu!o^Gr(z-{!oWw~Zp zdvumVJsFn(>9U}y;{d*nrIzV9B z4t6|1joA!f*KL-cEZ3IeuBx=(bC4yhmEhCBWLVRLoho)1(s)(YSh)S7UbzDj)M8cQ zod(s)%u8ILQTDRL7!r2&@%PFn65`~EPwW~QPs1u9r&j5h8EkZQnSmU_y|tZym(-Rw zmPHg$yDL|_9Er;>Dr=ru)dC_E+Q36{Bn`yYrG1VgEsA6_aYm4))cpq_@nCHYi-27QM$D2?{Hz=jZ>+Oa^y)%z~$-S+V z^1>u8u_b88O$h7>%t_<`*Ea(uSc6>CTYWmpDj5ltybn*iF(;Nsmd+IO&Ro4K^&M+Z z(yU(Q>C)QS1xp^k4)jnrW41Un^UE$6jyV?+QR^b|KQjJfd4tSywWg6~<4r1ARf8i+ z2idEJU)t)UI?W$s;nR*RlKtoVhf%22U#1+t-6VQi}CzUqHraZ=zo{`G#1xTUCryqI8sERe$tw$9XPiC0BiYk27RSDn;woH zPBgKer8ADp%Q|dEIHQI-HB``48g6&-%o$|OknT*JN#hUy)9oBK&BeT>DKb#uwgffD z1+6=dM$=BF0#i<=M$=BFM3mEENyrk&1y#2vu0)o>1;*EGfh@c=t8PKal7R-=BTce4 z&xJ_T9En3*vL#*1AX2cLiB+ZY1uGs}WJy6PJeZo-BWP&54)`rp+0F}NYL>TVH=#RX zB+3$`*<=o(hECj&ZE2}A#?ZYYC$1ELsu4yksni$};06V0kQ@o62@s5lU{(XZ1x3X# z72g)fl{xN3HaT3RvXTXylaCoidT#&Xq<^E;&L{qS*;bmB=}pyvCdbvJ(k0&x#RuLU;0-+ z>qW`MsWI5@5NwWyj0&H8^Nn|8YILTuM1lPO0IDD9ocLsnxfZip&8iGlYeo(bQVJ4% zIvD|~4;`}D<{`cr$V+ZKzi#HE;W?8HSq@Y+vIq(Mu>Dc1m&aN*vX=Sz0&myLcX*mYr3AJ?-_nP(4QjY;?!fGBA~Z(A^5jBGmI9) zj1))KZ`DMmHW7a|`CkM%UhP~EJ6`Ix(q3K$F-Ii6h~#(>KVC*+Fy=tE86yaDAaN-+ zu>2gy3rOp`sWsSj090;rV*tI&Kg$lKCXZ0J)i2>-01?Pz#X1rMD2#yO1Qd%^ z^7B9fEc~ovUQykTg`+Ggc0E?RX2%|?B<=NoH~Gx*&xmibv^wsM74lj~43^NmK?KmZ zB$W6V%||8w04FJymm!Z4B1ZoJi}*jzYMe;sZ82?LD6d4Yz*5a4Z}chSc)^g;oOyth zBD`vIAHXIwPpf9X;gaGgkbico&@C(R{hY`X%Z>&y6&P^( zez<>M{yN~#gq``I?JPAre?jcE6}++|l=4b=&YTGmJ1^O83VkV6f7V=-^1@an9tr;d z5A#2#ANTNaxKBf}oR@6U+rg^|Y^S%8;<41I9if|;6&3x76OY2bv6C3Z6ON}D0per+ zd@KFy8?Jxpmuo4iM-}v?UTdX|WRub)tHw_9Kz`8phuHrBbj!iM%$PLtfid2N{{R>8 z%lWxK;=hg`)mei@3i^sRnl&4{clx#6Ew$?@qbN*?@U6lI9}I*JT|O+dV)gJu`l0K= zIG_4g{ZcNK_BXc1~+hG$*ei>u`0DVjLqyBCg zS(k`-fH0r&@DKJ}AHn@N{{Rw2$79R*c#~7D=$3z0w7qGxM!AqQR`Z(MGbh4RjGUDf z`F_t8{$I72(Z!hDp;@?pia*|eThsM$v*V7|IBhh#v$TQ{b8Mo?qxf2DIF(I4(Ozm; zee0O9%PD$g>;AcJ5dhdg-iWR&JzMQgR<}gu&EiPjO{%Q2Mt;(<{gwDz?IvB0;W~^X z#r}UjaER6Q zOBJ<_+8Dx;tR$LBG;Y<~l?Qx|97LPz`1)L}J_+#|6aH`UMJ|TJP|%p9o{f{uNsyrC zSr~6o)9B}!S-_d1B`zOJc*zYwungeX-N$ z$%LLC^r)QtIPN53KhI1qVe*pNSaPrhh|5J!UD&_~T#A zpP?TfrRGf+K+`OQEMDKywYikWQ4tTo9YqK{cI8~gmMmGa&R6wuPBFjsEh9~XB+RZe zzgILp_nx&IE5Ttq2EFv!MnysPRMMiA<>Qv)?AT5`ar#`GU7Lnmj$ZVt$IVxFx|G(} za?KswYz(;ZF6Lx zy4uI^QHl6nnZDHz+W!EB%$+u`5RI75{{SECROK^{*A>2Nw$*N|A`ss*%NcSbM-Z(f zZf+E8I{wMaFzYzy>jQ_Ur|Dd9h`Jmn{w0HI{%FwOQPW|S=ed10F$uQdrY3SXCWCgb z+RdH~7EuY2!ygdwaeo?k@y1-x`lZjDFLh&mrL2=#LcF3_60DRJaUy}eGR!d3!ygVx zjL-AGi~6X|Jc3p}g-HD0t6w}*F&54u5lkcdG7w1*#Ql>)kva@;1btiae^s*-iQK0; zT*<<{2YkcL66`UQO~G{DlThRBu%kx}yiQm4fB%8N{?7Yy#EwWT^`GKgrD0c6@%s-gyYOR3l| zbvx#_J`MJD8l5+)g(mMdophnCzyU$4vG|$1a*5cXRk!t=5gd>{q`joVUdU(CFn1(K4VupQ$QjT8M5CnCn&K2pN(OQO(Q;tWN6x09}IBHi=>ly+?X% zKi10pGb7I0{25I1;y_*N_K>9-Q51yCk!oQ@acX4BTE8Iy*f-NgC)8@Ah*2JZFz!>-CvL z&fJu39@Xt;c*%$%;Exbec^<%bZ{@~uB0wF&g zl!?9@U_#zFEfnrJ2~9Ojji#MUi7BPY8Do(pkcuieKpW*`x5f&T85U}CHUt%fb{o?%RaQ9Zh|*&~3_&=z=M>Nu4Y>Ee%%`IABYBuqC273~`BMqjSr7(#inmH?CLvf)e z2v8FXa0N1S-4wwO!%Ubh!PspphAO>sNnJsTs-fEmWE&@ZQn#VP3l&(~4WuFv;A{$` z7D|e6C2++nTWpn~MVowqEM0=tdgOy9$-qji<&Y&?uGj%e+TpY~fJF$XJ&r~|NKxD* z8c=&Ej_FkP8;s{Q-pc7S?gxV}_P_XtB08xKd!gFeRXb6Kw%@NgeP6Lz;l3$HDE|OS zCn7qyo_j1P+X3acV0^w?62IS-ckPl!(Cqs1q4%>@2k(?cw=r=(E+ z!5|ajcgx1Ee2(rw*JR{R5(89&PP0O7;XvI8htuh81j}O@;ZglFe`)2(8_X7uadPu|YcOSa1QZ_=BK%wYUlv*5 zW1dhjo*lTqr^Wo%n85g(5g7jfvR<(0wzifR2=H6nL`B3g(T`o~t=6D^(a0HOl%zdU ziS)J-O~$<_x7MvMqmJ5H1@@V6StYtsf!Oh{0-%;x8Bo*81ju?aNBCTS3|Dl&*eFXH zdJ!g*Y?qpRgVT!H9g^gLO<2l$jp##Vkvo%+@JxRf`9JiIK0zprmm9dHyPZErv&j^G zjjYngLO88j*<2nx_=n-d{8%^$h&)>p#Xb}N084m(n&M7d@?*jcIhIfGkEg~AQ+^!iccsqO`ix4% zC{zVG)a}WTd`tez_IYJFF+j|KcwvxnL;UYo`>&-zAOqGvQg3~%!ZhE~a+viGEXxq} zBa|0-$1jD+J(a!|AF=kc3m%;D@DJVUB7cYYmU9(+;*niTXJA_8WE1&AP~`WJH^lbO zGa9-E1RHkcxcfg2XFy9P#Bl1d{SyBGRp9=2`)dghH~#=9FZL;l={JpPAQzUJu9D#r z+6$Oh>gyil{7cBKYw(^te`n#!4xkxX6UC5olx6E>!Rf2CYEZL|ZponA8@ChDBAb^>em4uA8{%O-RJz@)krL-D+ zU_(?w(F&Re9BL{*m9pF#NopWOWH`RA9xwQ$;m0F~hEp<;KZq(^U*2n4ta?_ZY7zxb3!aJad(c!;XvHU4V8tF9d?#!G7($(vF2nNoQi z%p{O>T8))y`!ve1>AXqYgm^3XeLj}VIzf<$PBGx&`hK1jo>tVn^QvjLCsmJ^t054Q z7Bmq60Sr#f@oqjGp0^&G9Dv4oeP6{cCak)BJ}CpVPxE8yk`B(-K=On)y1u5*f2&U; zbCu7j!AaQxUAFzU%d$@{uZJ851~~r!n%Owy%xVXN7yBh;^K7$TPNPhQ&5#on!|`^I zR-}&)=E|j_sE=8n^naS)9?zgIQj#2MvS0JMmLUM*@HFcsdB#l`lmU1v_8%5y5HSH9 zb`5&}0HoU-92;{N#SoEediIN^yjGft5{VG{ag_BB8u2IExsj&Q<;ik}-|SmwIF5YF zc3NNM<))zyr1Ad%rrj^8ZxL<~(NriPQ{k`tHaRnECj$%gN9z82NrdmyN;=<}wRTn0 ze6@9_Y4;Mb7c9wFP-{{GRC2F&$!WA${=CB`NROo%w4|R&xqna8^Q}uw)b!nHG^oGa zh0#TJ`m(VAw`Qmm+v3iL4rpY>;ve0|`e_o7l_u6Ux1s$x*!qZRBp`GnsN2IaGEOyN z&4u-4mKs&lAfz%dtyG0SuQge7#B~kaQI9f?F>tEM8!HL{$WZOqDdN6Gkd^W+fT5}u zzdQ)tZ~~nU1Ql4+8q;I%ktKwRv?{+&LPf4cA8!>%6{zep9&&M~B+d&6+l@%CbC}Y~ zTuJ637aS49#XTi;>UTfGDl#W~Xq3#ix3yab`;AY7}dqQ93w=*4qhKkt>#lT zvs5ylg_qq3++~z*#?oahW?a28N!!X7(pBp1#vOFAL@W1Cg-)ZFhxZ;?RAL-UjQn0o_s={(4p`~6=ji?Egys|<8L-b{U({xD*ggUHk z@X9EBModk(WgSsU_VNm(gXD5n*a$8$p2Qp|rv>pi7M43ky;~Aglq}kWNH#eGHU}UH zP5t}Gr;bxOG){Jw#W^H~IZd?*D*BXcZIz>K=cPBp&9*W}BL*1*vvA#YF|^XcH^K@j z6ADmQEsG!(hTG)rD3~R#*gMbG za&h3#{31vjjb}kXYjeMXRQ~`B=CxW5$UKaqf7-ae-v>V)msEd;{W48+=F2$bVI5?T zZX}8~zH=G-J{)9YGBEz1)a^0$Y{=i!Bs+Q5+x_swe8yHgI$iCdmnqc3BS3Al?0p$7B*Wl8N)FX-j=wA_s0m;``}Lk?j8S#MnD3hdv}U{&v3g52UH- z_NX=ed1QM!HM?v(CKbKfUpJezhXe_N1K23bar$nGwU3!J3#l%nmc}Tifz@h? zph9*Wmxx`}j#raOmLL%#M8DazaL1L`3b=%&#Gj+}H{)Rwy3KJIk&Mi0W2oarsZ+iI zAV=>b^`GGWYeb_cp)T(AEi%vA$D-f%i{iJ{j8Qb##4|VzC1iQ z_`lq^^Nn-#p&H&RcDrT}rLmcA#moS@uyP9)sR~kLEz!OP%VRDsAFAua;g{p;$NtHO z4FXXObhcN5`UmuMEmjY$Pdg4$M{wjsjP$1^RX=F`rR2YBAs89QfbW+KxOjhuf$w>e4z1hO*}?f#bC{x9N;zo!r8 z{{U0{%P7DPalNh2Sx3&~!w{5u{m{_IjZC))k2a!U8kEDxi@i1mNRTVV?1n!>hL zE9+cY+nK>4OQnn|w4b!gTJcj{#gUZu5|w{8{{V&9;={x!9o%jthfrwj42o_d<23R| z%@@DI%i-aZh&&d0e>D1>o&hKWI`p4RZ~fC+H`Y=+sP3YU@75$kF?NmVN*c$y?bngV zG@-Q${C_!hG-L=o0zE5>{gPR!Pjl)=V{a41%8M=dPypk)^Xbcx+L?A3#*E3o_O~Y# zN7Q%ziWcS%HpcSBVWq`=EU2vw%L@8_G)V|wi}p)p(Kt3UoUxDQ{{TDvDl+EBR%OBm z@c#fgdA9R>I!t3&i{gk7(j$75QM&UB@dsb>aw1xJWc}Ia`2PS(#|CUfn&zip)^z6s$0us(#a$<89vBB#F*q$@mD1b#&ecA#1S7?9}HtSaQ^_hiwF`k5J#mU z(oO!2CCqxOiNun9V%RYIA%4|9UkS|Y{272a{WLfv>^OM3vVYT!=6w$8*Gm@&H1=N#;jjWkT@I-$%>SG#j<(zs{ z(%^nxLx%HVhDeh4;3CU?s3!RUD9C0^c^XWiaLcE!R8d!ZAVO;nk2G{(T~Ih za>2toBW6Z8^GB>g3GY@!F}=E(8M(BJ_KkaGgB@}^IRg;}!P~h~*3x3}$q;zOYVLj> zId%w7EzEKkhZ$E*9;kt128^kiTu$%v@}pYTp|8ytA#WP7-ndsV9by&av*Xhqf_FEl7a_=H9Kibo?5Xt!GRtu-5_~d~_H^(FjDgV~) z{BvP%KT1+A_}c;$%HSmw(HJdhZ7>qFz9p+<31<+Cr3OL1mXU(il%!&CF)Bv|v06?= zRuh1#(sCrKoSUi0loY1nX!%)jSwm_j$ z*b?0_44{rGd@@b6roiB|QreNwk&U6>S)F=0!^BsJyX$u!&T--^#$58q!*)0cQc4)s zyW}l`*A+rA610~$B$Fy7sSz0rH#lvWMMA+&NEXPWp^yxhHt3XMGO+i`$fn?Ja>rK4 zgwiEaiP}dtl3zYAQLb99;f~w=7GshDmGa3_kMxrJC~S44xPUwon8QhN4cEY9RR{K{SsTM_zGhfRJIDFFKgIt56wf|U z8teQ%lm&*LZv~XlMS8PXU$V58gw&2Fi!w8iT7xdjl$io!Q^)*lxP4r=M_AwKHp}`i zO`b%vfxwtM3Mw%?*$&lV_NkO*#gbmRfyFPU{yf#gD!Pf1FHyYHq`9-Oxw48|P^F`q zHdIF;YP4Whzw=gAhaA9^<02*e)`0;;+26nTQps)fi6Kely`DRXW#{Ud0YMcBNSPQi zl^@VdV!(_@1O1otzuz^>5x#uaiLS=4=|=>XRyu+(d1a*0u~D^GYF3Bg_<3{W zxFr~HUGd8q{-oS#30-%n#AIzUc6i3>hmJq*zNT@ENKw{P z$`=~7vt3JZ9m_ALAEzXdqw)m&XoHZi^CW{DbK9@Tl#10usf6-IC^F5uUmnTX|p|@laJCY?kc!Cbc zdJ&mJ7Z)MJey$(*^KLy1rU!~+DGyikQ7xcK8ruH=P`;Qa?8K?UKxt5}O?UqQBAl}x zS^Xpk?$!CgZW!YqpA>)1YAr)Rj(I1ug`}DwR$)KD!@yC7+`94uDV98>RF9Lm6bnAfuEcd*}Bv{Ns|Z*}(IXvG)P=D%dGzuL^*M`eQ;$V-d)(f>Q{d-YlB)Ai4;q3B8ggJS(KDvQA+)-{{UlOatwThXJo^ud** zQ}G%a@^k)HY&6{bRBB{* zF)Vw{?`fK@6VCc%@o$sP9bHWQh(2SP+5=e^c{TV32FEmqQ_;n&s?dV=^6wLPc&mGi&cmqV8~s7qY4u!V zeWf3%2qAdtU09FVr$RE`AbB^LgUMDRc?trc_C2x^3?viV8~9;`Qb_$}2XHHxSuqlJ zH0!frGBytivDU8wdT~HFR$bLogpX6yM89dh&+@O&JukB`Y5N})&-a?S{d_;e{@48&{{Xsp z4R&n0>H2**BmT?!Ogc?Q?^&K-tA>u)RcE-5#87dJkw!j0%beb~G_vJ6vVC*@2QM5( zIEaoxjcf82zlzos3mh@KDg&~C8ZvNBm70goUU&~@>R63d1A>W`(!hp_H0gi zKVU|*!2bX`Qj@0F%JO@HcgHt&;ZtF9RNjas{Gl3OC4>Ayl2RC6dN$1y%;3$Q4uuxEVOcPDF*L2#0))CY9}#LBbm%5rm8- zv7^NHz^fWK+qE(%r3bg}xEPqIG7*B<5am6vTCHW@0@Hi|Q(RL?RoVFRi57_{$01XZ z;y@_Krw1k^*a|Kw!0(b0Yy}k^()i@A+XRyfTZCgu?~vr=LRO7t+iaH;VuPVO;I){FvCE?-aVX`qOr6&&B~)Z!xH!WSrX(cb6SOX_NR@Co0#e=!OPPYHW;9h5 zB=iF#If#Nupcw#3pv85KZSEV>w__X&)q$aJ?9LOldvbZ@!;F|?AL+7wKbrJfF3%Xn z$Z=2o%1F{j+jHV`Lq*z%l_q9xn`D4y08%K&smWVASka)|oRB4ukyB=kdT){dvjC_( zr?AO@*dn0jL*FbE*eOZlZuPE67Gg?m8uv8G0?bKClz8Orm?~vP5Lp7Z(q`x@hlxB% z&4tDA(~J>BOGmVAN{z`suQ2k$Ja$Wgnh^0giRPBYre58wnuXkn1nA}mySFtwmvvGq zDA|;9#uW&TA@y)cpNkm!Bfs=jG&?O`((>(YZtabfkUPxooMdi0@5GRKZ}zZiGUJ>@ z331y_VhtMNJWO9w^2FDoMzOq#(kZA?DG7L-_W*sQVcU*uv1A&O7Mo@k! z&Yf+f`Fil__7Z)1a~cyP)@d1-S7PI){j(E1vS*JJy%E3aL8dU`kE-IB>KAvBX@=8K z)7BJ~=_z$Uc(ZXdrr%`p+cB|1CVWtp(*YcEJV3GIZ{@U-<=al?VM73pCV5c&B#*aH zBq}+N+U1)LEW`oD^?JAT{{XrE58-K^IDx+~m`QDY8`xc4U5ka6lf___GHpW`B`A3z z`&@E?DAa^U5A^>4-G8S37O4VHsYdSAmK{b5)H-Yxc_3R@>daJ$4D}xf_zf8td|Y4b z4ngv*~VS^`+#t(zJ8Ob!u47@<&fd$r(|*FWaj8SwwS+q4f_> z4E~N8eS9+i0CLBHqN=mYX)>|0yA)eEW2uzQR(E)f85s`eiRF#lM2FW8Gx3fYTt$BG`u_mM>i%ksTkXwJ z?=;v<6I|ISw-4%BT&)#7S0sFKSK)9^+8+*3G0fN!^?w|Hqy2R7Z@P?n&ap6z*y$}K zi8Dnr$w-xHQOyjLD!=NCoV57I*FWL({{R>HzLsDnX=8MjS5G>9V)ki0Xd`DHlxiu+ z5nqY6+~rb~Y!9S;JYU5o>|}8ZH4oz3)Rv82((dw0RftJ>D(!5@2P6aIq7LiTm}SRL zD2^-ikK%LA6N~~+41MW#spN*Xzi+GR4{ae{NEL+8(EiCCsr|~`ONWa zc;j@hWvWRPmBcrCi_Y+{3|MgsLGZN+VZAoWGUFtU7}R9SSOJhCAS6@ix~=X10M>0T zS(4;&nio*PP=Zm*L_Pywv&%CfmJo$XKS%L@(r!nHA>Fs*(v3b=^L^|#mUoLCmX~B# z)QU03>jh1D$jW(czYp3>r}Mga8A>-ilm7svf6K<;6@JTPX`e3CFz&&H^($d zHT*xsm}ow4^BtYsnntB*`Z$Dph+mmlnL6|F>;6_zs?cGSMo1qMlz*huV;qt^KyeS^ zRM33g=3PTon$dMDX}|_S1-i7Sk4mE-e;kghL5ChOE(u5aQuL_9j`!h1OXdA;T{h`& zZRCP7#3Xj(eni)tg=$)-Y_Mvv362sZf2IEQyTpvPwbmX{(*>MT-q~I~?Fk`5#F5jb zS;MrI{{U4pDC@C+eOLWjY9dBnlK?-{Oa3~oX`{rb6apK#BXEC?VC2*nJ|>aLX>kn- z^c^yTkV%(`873Cml<}xn9F%^`ZoJad5Eg#EQI)N8jv1qN2#2_0ygQ?_ts(-_0Q`x}Ivg5!59o(eoZQJqQ#0+Vo2C#^ zP4USBwEqDA(C@BjGcD2;6OFN2K*4CGqzo3c1$8w`nUimBfs&0)ZWrvern z1ytQZ7!gQWQkfRA6ix!gr!-pRQk7hqzCf2AN^933fVqwWlBUNZN~!fZ6f43h*8?z! z+L)GVOmYQR!t`twn4<+xOqI5(CA5v(8e}7C>!-JTJPd|4-=oG31n?=zrmJ8uLB@lV zO_5I70|M4@q24Bp?lK2vJT#*`fnzn>BPlT{G|U;v%ws1UtN>uNQ(>vo9wfFVd>l-z za?K#cO?C!QS_hTlJTO?^AT+64o3G153-ydIPOR0M{{YR z#&?!>J~SAeN$3!DXP{IXKA0=Xq;IB~AIwk5kLI#;r+$gjY0r`Y<1 zQX=#KmhF}dvaQQxb56G^Gii3EYM=q*T4bY|O_9_|2_}}lAC6ozH%Cx~eKF5rUfr_6 znYd~Ki)oBo?B#vJbI^xAN5xirAJf#rc`Iej2<2s$Ljts5vPD}doTL5>8M;= zB&&SxrXy$8!DC{sQ&jlUZ?Ew+2%2FF=%}`6#z~&#(!Qu-Ya4XuMjXB@jEDe?p0obt zJ{|chTfwSZL@$fQcMv1g(;-iVOKc=ZZ?MX8GC1dP-Ut0sU&N*a8YqeF^{bH$ZsE4& zA#ld7>a-M$uGRklTDeqZiZ`*BI7zXS4g>#ci^lIf8!t8 z%!m*yh(^Dq{jOJw9B{HeuP^sVZ7S02YC`F?M}p!h8;_!hS!3wT=1xCod?YSUCQu{7 zBe5QT?^`uH!i+?siNEsb)?<+^b#{(XA>ptL!nLRR*;Xx3#CL_U{L#b(!i9ZNP+bu; z>z~l?Zx8#Bb&jm{X&Qun@D*M(_R9`qlh{cIZPn8Xfu)t`bbo(#JJA37Sn>nH(99&iPaeh55KbV$Nv<-hx=~mTsFD+@B zTTOR0#l!Kh)~+{T2YM*m*$CykJTQp=RZ_-4D*h8pG7=ii|9Bh6dylX}O z0EW!088PWHRq;R`FY8ILV}>{oeLPD3UHrY#yrdrfeMVR~#m4F7WmaGHK&=Obayrh{ zo~of3@i@`QD2R?L{x9K5kD8#pyo~7=lSr!MJhBo41vC|1w>@(s@+J{JBw`(w7{+6e zXPP5RIy95d>JhsZI~sOfzUW+;I zsN{Ga#QS9=(~l!uklMY0xrkmsXiXMz?m9Jn^2`}{PYM43HMdKffbbvlQg5o=Dc^CK zoN+FHi4wST8xezK8bm=0%HRQzlz?iSzzUkCzoL11+%@E!?i?N#@rt?kJ_93zOP5f6 zBh&onRjSnp?sj6AdbYdg8HKf!EpKXrlQ4Hags#7-oN>Ts<@|AYu~VL8nV0nnW!kaae^JiE4BMr8CLlicaW2uuH3p zi_6t`082-@^a7uXM`vmh&Cyrcf8eumhY%GLys4%_BVoJTg7E=IMHC-K+3C2)3_$J< znp>6NWuT&$1;cAgg5<4f|IzPnzGXT>rbaf#mKx-3R#20Glv1*-21J&?8wQ6XX$rv9 zU~CN>3b5cp#=xr%MG8_aMgqiyBMKaeYo!Z`IIcvNGAUcNTDe&*1*JRSwGFmJmPu8GK_6Hw6;Z2%X5~*IWUSe1sw)WvBi!H zO|{72wRLe-+!co76w(sr)kr&Kat(5e9o21E1H&-#hZiJLCRb8wH_Sp@dUp6YmYbo* z(@llLX{F(Dw9@rj5rh^%CRUPdmc-k1N^1nQ6gUWSBP38-ij0UYw9`dgm7v97QV!Tb zV@TUurcwiR%OjGR#HMk{9D`$*34+`=bFBv1D^e6FYmh?a7^PKEoFO!*I4@jm20?2| z0ox%gh;3M$sL7C4Ly)#%U3y@)PGM1skcN@tMxi_Scge(`ga!hm5DhEqzUUHXji_D?-e7AmidMisNQ5_=)jWeM}D3IDAC-t~OEs z04_cuUlg_VC{OI;;uQF$PwG4is!7H<1s!(ZCF0*r*?8AhHwy)Ym~}3KR9gHDNF6rm zm*LcK%H%kQb1xcov85NYvr*J-+PM*uOvYKLy|uG2R6LJi`to9O9NPv-4r&f8(2(l9 zzR!&a-)xvNJevm@dAv&SyteD2{yp0Gs^RE*hPz_x&`LY93a#p5o@-f!BKTQoLWcPmA`m7xQw(LinNl$p*Z+1OVzkoBU|cEyXg~&2y-{ zmzNSZ@8OP68L9ldz8+XJPala9TsX&*R-=eejYRvsEnGpY+-QBJsqv4Emb5%p zg{t2F0JVYw10j^XUysN6sF8p>eNz7bN`utni4xlHPqTA5{mhp^iC}`9jSt%XW?$yX z;g#HGf2G6zuVXe3#*dr6vELaoK>v3gMTa(8MDnG2MKWFyn`!|7mPVt21n zw6W?8igf79S;SQ*xShwS!P<b0t97s_n(A z+~p9KF?Kl7QQw3pTdutuO5x(Uw~|jxPNbtP1q(6(zW)I5SvmMdhVhs4SzLJ@h>LwP z=5104u5JbWy2S74M!uY+)ApTBD7|pTao{{Lse9N+;d1ca+j4D5m=Q(+yl0qT}gahm0Rj-yAp*J!5H*zsmKBX0z_M?jN zHOiwL@--h*T)#0JAlw2ETb9>B^9$RwEgiv#JX4DBS0i=gzYiihS26~hDTPa%Wy3gs z6KN?O{zt;Eo3n%<)gs`}r!lo9I?qJ)rt&yHE(%XmUEnXg~-TW1lDCJ>KL z^AjnwjTc&RI_eJ)tzeQWbYbwe{{RrKV@EzrJ8<9gxSG6txZ_+l>l+PY%hr$xkFR$PAyk9QeP1uRd620vSCY#*rV)e=$pThThgSA`v9;%^w$y z&czsf_RPQJj3Oq<=jq`;Q;`nO#6@rZnLCS6^Io&3@e$cUdvKt{6$qp90Yj1gPsNy$ z$A=vG&QT6I!;b;KSEu>KC-YW|`Gu=p$6_ok=@(r8-$1X$;3WdmhVR&ru4t7yh;qQnFj`BHSN_}mCPAxgff2acYjZ%Cs+)s zGUDR$N~YAjuiA4)j?D7EoE15CFoK*7h7)R*-l$#+5@p_Na zk>CDWYTjjn&RYxgT_zR?B$8rXgnt2Q?z;iUGqHBYJvoq^e|UeR{N@^*@QDy4?flkf zk(qb@*d;Vr+Mz^*NP z->K`j3#dfU=&dVT&lJ@T@t%@zy=$A;&rgdG;5U}It*hHCZICvNu>AI$ctG5Pd zxXQ@t!k~cE2YlXm*z@DxeVQ>sP?duAuO{j%b#9T&csc3;`?~n&8QK_lO@`fUO>qWk zXo2CDKJn1k<*}w|vKk<|Y^I1k>%>Y=7wUe?b~re@n3;77b69r+=*dSbIA%*_wkpPh zZs7FHh|b)o-XfNmfK^P7Omkb z<%0mr&^LdU8Op-WRwe{m(1nLLb> zlO0F2L*q61W(Kt75IHh&${*8YI3uv6PMzheYj`G@N+q70Cb^l1FNhzqzp_4A&d*UP z{{TiK_&EI1Ib;6lTJRyG76t{5#&M72pOx|@;PDEzh)FAk*@CJCaIy{X zI1^3r#c86zU?nJN<=bqoQeaA7DhVnMPBiB* zv>^t$D@7~CFCO^u(>RrHUC7wv4r0x3uPDikcmFMh;|GH`N;O?X=^Y}f#Ah2qEP<;ivDw*f;hkg);_K5m$_$6Z|Pgs}`YqGrgt4 zJdF{WZUJ`!wGGIMpO$6elwv(YuM3li#t{JAM;8oIjXuRK=D3dVJ^Zh3<LF!~#gIbd>2 z`l+5V#bcN7s@ctDsYY$C3rN=LSuQyGe-HBPSTPmIWQ?(%A^cy%^)V!axA7`y`g?je z7Lnhj#B!E*j^T_&6<2Vr@l}mJ92xQp5;5U1{%@;^hDjKkApZcGrv`~V$Zx1>K8?~c zm?LhCqwI!YXnZ--8EOQ6xZHnBRh7B{xS;q? zCHQ~I%5vt@$^ZzS82T_Qawv@8MziDHsj%HP`CM6 z9FxX)X90T-E-&^-jhK=>U-2py_OrxJnJU~vr%DJHP4K&#)UtQ)URZKSePe{r`KaYq$ssMozj^Lzi876C8Q1z%TTMdZ;?8;J zjwiI@%+|=G>ni4pH)%@vycFQIa82~Ix`QPN-V{vUiqxI`Xw+f+y znK{?JO4RWG04QW~K*snF7r{9pA$$h@4c%+jaeD4UMLW9)<3I!^Gxk{suZP5~mJA$K zU*~^DY_aJkXmg0`FRzRGOKL4S@~M@^3>czaV*L# z;1W?7bRpCq=In8fOwb;U=z8T%S!b3s2dW@?znqSf%QDSzb1tT0)HJCg0^T%p6U5_v zm3Doy0<{m!#6n*I{ZNx z(|orsvsVBt`eppu^?#hlB(ugq5n|FEb5GUu-G0j7Mvy$D88~p^5<~lC{kvvvn=U+< zq;d_v*-CDB%i=?o4oJ;MP;Dmq*`StX{or|479c48c0aOwKWia^CnQfTzMtzhaEy_u z3r#frH0yBP>soIKrJem3F6yj!64e#(E#sKkavVfMA^Lq^>6~fjh8ac@<-`0aLFDf@ zTSD()t1NdyRX&8SvP7z*r2$vuN9}US{(ny+Q-`L$sQPBZCbAMdztcr_qkDa66wj>Q zdMFB*8aZ6msqreR{8i*W6~T)fW=Dq}FXwt&@rZMbMSoQ;(eH0HOL)!o)z!ShW`tW@ zNT5l}>=&R7-=%XSQI0r?;1Q7F;^Kh%SxU=PNB;d2j3*s#k3Bm1b2;{J0+ zOjzSWG4&&LtD7BnNR9(!@!ZPGAeK@X$G5~5pDJZo1n}g(D~Q|r&Q={XfwFxqd3)TC{(#U8%B91hB?>~%_%Rj?bqd;)_iq! z$|dHtKt!1NqQqd;7;W1qww^AnrBI0E-G62LFdg>@JMJAlf=CH8tu|qda*(jhLQOW6 zaUA1`*^L41nUT&2bK$6oik-w#LMX%$T2i$cD3DpgLQ7CvIUJXXZs(Wis_g&7yv|*HqegeM<$uw?;546?qA$EndU6NNIA6ej$nQ?}Nnt9ybOO zsqjepn7+3Hi^gT-Ba{bUh>x^4>F=HQV|GTDE}9b~ibQ(7U&Qi#sqGH8PnuYwV;INj z^rRDcQ_I(_{+nuUYt+jut^WWU=S7P_h969LT^3H<)#N^@@heC9apaa&CruSy)cUgb z{{Uz0mwrT@pm&Ctf#9c)3j|LO%$-Qg4foxkl03>2&60tq#-&Ra zlVClRnw-#kQ##WD{ON{xhc}*TGa~6%oOimAaENvl>T`<05ymZvBD~OFmhnBuo-A1W zO$2gE&N>0aft@#H!t=-a-|j-gk$aZM?F#2^#beq=+l`J$7AF`eceivtBPJx&VM{{f zt&Knb)AU0wTW++4GB8>xV*qekDPW7Z!D!)HMLOVBj4)djGm%#b2*%VE-l#Y&m9$-a za9Y~Nb-`#+l4ThZSdx_9&Ph30EyfmtUGQ2$uv!dRfVAXoRuPdU zSHS_1!0mu;n8wqH;#iO<>z49z0H+)TrELj2WK|IoxbK8B0T8kghl!9Y#K#^cR=7wG z3rg1&$dxE(jO9g*A>Al)vc{IQYU@LhJFO)b)m-C$HOh_!u25!YxG*Pu` zfY+@?5h9Ty6wQ^P>k{OKNq4guW!{IAN496=rI2?}cFP8$L9l9M0@l$jPT`2jeqvO} zYUJ1GI64L==)`IydMEQ`V`x#Hj6UomQc^W#D!OJy5-ze44?;Ym%tYSG;*GAm|U;IAY2c0~yz?ZKb@6)?y-XL-G4SbtkTD^s|tOu5Q~$IS3l&m)qOfE|*x? zq%%t*qZ%0~HXy5gmHz-+?PgTWxUALeHR2FCi2L% z_*s{~`8CV%V3{W6!^7&9{{X_u5Uu2DU+z+ELd#xj>q+i3nQiToKyCfcxcCOlkIc++10eGpEak^Y>unocw6bf))FQa_%E1VnvdY!pWauki zxlHrooVa*QZ`JAgTH};)a92N95^ra9<_IQFtXP>}ZZn~byk>x_n(=CXmB%r%;>I~k zgXZJpju{P&f4NzCHn(Z1vkS{xo()#wN-FZ-sUPtiF^)Mxh>-sPWX~LN&K1Kby6053 z2H~fYOPjf+4-3N8s_~;B0B^tiE*yCMAOXTZi;Mk>C}5V=P=Fjhr3mjMlF=o%vsH!w z>pL&QGdC_(lcRL_a&sQ4Cv)`w05!A2sSzo9rS$&*GyK(;TK0o4sFsN&5J?bO;4&U+ z<6=kJ{{UN(zl*`N0MjL!!?rHHa z`B_x1b_X_@apW?H1~p&2kMVz+h<_~UDGVB%camwg(*rOKP9&O+N~g1APE4RwqsM?ClQAai75U(Oh;d|w{aGt+Jy0&W(*=iijK;8FCfO0YG!_xWLyMe>UKON?Z_tj zweFjHrN@1wY3%S%7?4XSRFJXRtJiI^jBqf?!6|(uqedrwxq82w6dLPr=#l+M-a6Y| zCprB@^}Zr2#y&u@3U|vq31+!)iy!8-~G~9zF5-ibyzh~e{j5r2^2xN z@nKRXZNQJ`m;Q4k@tk}y{{TDv=k%Ew86HTDW6qN$-{}{G!>8NEEuy;P#Lc});C?2j z^W<=7Zag6V@cQ_Fn8OYT#v~qB#r}8nQ;l0h^7f+&@YG%;WmlDWawH$+r}JhWEk;~t z>0ygem{>8tiWbkw8hxGIcbYz|@mWX@)->W=s}=*}3U^oAEXmq3oOp6WihskC@%$}A zG@~QMANYiZ>&)6+mbpHe3~e3sOX?(&#@?Gy(W}t*Ih_p_N#YYH(01qQbA-gbB=lug zUTw3#vV~)?w$veqe_fV@HBEldu4^)A<&H+>EO-1aDbVl4Cn#|vA=a#Jlu0g_g8Ef@ zNRMBMw&W@+%YNBZu}&xJJS}t5PCId)0p!K*e6i<8^)#XC+3Bb~Pp)q)?8J?^v2HAU zX`3kPG{UlNJfF<^Vg8lB$HaGxhjKa*K8IjeURiaEHscS(Lr5M**_wxc<^KRDDVQ0j z`>q@_`u_l;#$-yoGs7=;)Qz*f((U=dZKgU|z?{z>QWdMyqSc$PDh#4nr!owtIHXaN z9KhaN{{W>*tnIJ$YrC6>ERWP~oEYLUaAb6#C5Zr^Q|(o=D=eXkA|_s_e-{_kANcEZ zazhyPNjW+<)#O+w0cKDQ0S9C5GYj(^LdPZpRm3hoOQzFSHCBj$FDg*)^Y_L%ub(8x zJ?wcVzFe9{xkVJ>R4Km#?oLyS5dLK@-R6X+8@XKc^95dUhjnu`_SNpq_Jc2iY@4i_WQT~fOaHHQ9 zCex>6sAXa|r%{p_MYas!6ep&ho5L-+M@pYiRPXZ3Z+iv1h}a;EyVde;lTj4uyX_WZK=r>L$7&8Jx)%@ffikgMEfG|noB*I&2 zgVjm>S=9CiYmG7R@_%(d;{O0spZr9gf7(99mT)p-`s4o1CS{T-3b^9H)9%khgnN&G6|-f43rsgZpJM=g56LIlb0CMAY_@Z7*fal=w=qS;VZ-!EJw%;ljk;g*3Z}VL~w4X%8*6HyJQmr3e4i^l25zxD=%8fr$!C zF|<=lkx=Opy)jZ07-U#dlMDz`Y!<~$tC6)>S-fx(g*JBa$l4TGoCL8;u8+l)lG7wP z-ylmBry@$VktHgz4e(na5gckUwsh}H0%^ZT0(es^8$gT5jItrR5La}m!dVccROAXN zQaI_pA&?5VSyQQjG~F^QOVnXyOY4B8#X-oF(jI83zEvhBDgk%OtrVkm0AxF5Sp|d` zr4J7mBAJ0Ln)q7uvNpUei16C*t`X$8mxZw&8%-_=hSN=i!)r>Y2LUNN>xt3!a4 zu2VyiGDuWYkhWo2akRB8Ya($!LCj5Vjv9<+6ZjwIOZm*BBNJf&>QRVqzdYYrqn@83 zg#Q5PCpt0`78=Y}PQ_h{xZxs-y8^ovb}F>0lTraAzBZd(iW)TNd*ZEpBX7eLtdY?c zgjTx%GC&fTf?5)(P+5tl+nUqcCppeXa%ErcQ^HiHCDd>g+!`L6V;z~tZfbI*zLQ9( z0Y3<)!nDhVGsDIF7sARUU0M!AC3wo!tqlg=`wEKp_;zoz$0e#D)PUmRh>IN26iAOB7T@Ngbx6FyB=@je z-7Wpf&^v+=Nu?^aYA#oZ;T$B62(CFoIO8rJ1O%EjwXw63=6MC}$}n-xrY9Q^K-+%J zR$RPil&k8;M9lxr=T8foR1Y`z7k81SG_>yPBK(9+iKQzV83y@;EMfD;DN`{HL5XycQJ^6pY z9*6Hu3^<_L}jh2!}wM%RjSXca&`pU6KEDyt4?3_p1A7>+zR%TA-HC~_LX&JbsE8>p| zD(6eL<8JZZNe#`x{q#-6gl@a>f9410m5h`*2@i^6o@U1g;g8cV=fw@FMQIf3*AZLX zaWs;sJw;CHkNT^U#W_f9Wgqt~n4)AoHxkA5eO7%Y?1r^#ohyMB?1Pvn!?`sfmbtXk zVi_Z`5y|{k07);mT?<##&Wh=9`n*83&6!q>QZ(F^ZR6ojvnymIa^i=IID8}Y z&+7jGkAIk%YK4$?Oz!mULr&9$rj%CB$q9JjkeSZrrl)#W*|QrSSY)3TPh9^1(k>wx zAL)NNeXZA)e9eC(H*h3(&?@nTD$C(j40rgy*5iXDGwGvoK8Y}xo*_W-{{UG+>s_14 zTC3@&PJLP}N7INZ5$Yh_sH%Tw_N$iT!TG#=d_xI`^S_C&H~2(jAWUodsk238<_#|3 z!x*%?bsmCTw>5ea2-{)4VTnrw#hy6-02c!yXNZ7(aQ-eI;bZ<^{Jhol$&$v)QS@h# zSl-Cs$`}!`PDkP3J{8S|r?oNV^-4aU;QkNv%i`mPI~T)gUB{bz+vR;wUj0EYELZn( zsA@kJ>q^nNZPSiq!$X5p4jwKEw`(KE8m~|ES=db*UenpcD`j^o)lBqeU`Z^jK;%3= zBbq}jm}k$9G5%|f`^+-m_mT4c6$t#f>Q63}r%xPC)}$FB2hvgj;)(uV`7^1nT=(^V z7u6=oYJ_3OAZv^K@9QyPS5+_=c(Y`u8awSVPo%#IBudS&%~KhmrOdBjCZ%g;V$i_IUR>@7{H1(F zxdn9y)PDU~6VPwOEja%GH!P>KwD=<<4Mcrk!TzSz;LDK_O?;bid3&VTOMK4Pl7{t6 zlrDIaxu=d|c7$ULk`ektZeL7!R?Md6(Hbg{19T_cbj@5cZs9{I1rMVSM^p5a(IlfS zMK=R_S1iu4K@++~Hj8~LnVXlW0ivG3cFggqh}qc3R{$%b5M1gOVNip~>Oz|AGTsPJ zcOc`2P1ix@G)<;Xr>+TUFOwPQZ~2pbUMxG)7-E!G7-tQT)iJneWT6Lo6HK$8 zHtMlND(V+fT*VQMQ5{8JfuXKP6a-1O7%_;GcS$wno~Uo$;>zp~R4J0)Xy~MYP5#iY z`BcwB?7a?Lcp`B~#{U3=BfxgQXz8b(Sn|R%5&r-wi5+3CeMVJ_SG0RBUt;MiCAs;s z@+DwtHsmaLiQ@85QE82{oy@Y?FfmzVtRozAesK~er5)@cqwhBx#B?@dXAx(xv zlqs;tl8R87xUNK&B`uWHoUE3TqH+YGqA(J)u;d9{|m3YPg%dNhaoQW$<2lQfbikT!m=>1|Z7tIUrkfZOPLXQ4T*6S? z1#=vfQ${+9Qvo)#m0iLE=DRM%ti?n}m0Hs8NMppF72c4-B)lz%vRq5T-=~L(cv}(S zw9{b-!)r}}ktH;WfKg=kW1dQNGV*^(>@mYtt(m&d=#|UAc})r zP~Ix+RkmdzLa15|$f>Ws`H`PAW+Ed96xmdLrZhcw>xd#$o*UiAF!{))@~`!nm@p!bk_hFlj(hnn=-0I|TxylhdY7AeM0i z>=^E+=8ZA{%NaAt;GGB4n+!TB%b%s%>H9wd!QT8AAcO!%LvCs z+RIKcQNCz+((}-3StTp#HDW8&)5f2(UApCj#`u6`J`#9<=dO$uv?9`;L!=6_a(ibr3Eku@vRlJU)n zBRBv=M90$H2HT_bX`r~YlV1egUo?u4!rR2C7_5xJy1D&~t2p71#q`Io`_?DdAs?q5 zf1Snu01~IG%X-y)BGJHhr4R-9$*Bq}*x|q<{!oU0#|L9C=-D*pgAUJH#$^#^P8y0zySG2N6hD;~;4ej51GAvi!o(qk?DmJ;CM z;ed>&{Xa^*t&78J_4(uV-iP4@OmweKH6p)GRXn#Y5$XQ`bc~rer@#*n`=l-P_L|Rf zbj1C@0i*Rv3|@np9;9#o00WoD9ISCR;l(-}XVv{5_9#0IX2s>4%OhJrimfs{o~thO zE~*t=1pTgG&6Z`sFaRE-?%`#U5(AeMztaBzrc5MuU+5yct+7n zZFw6yyUP$r&09a;DeJnBLutbORNANiV5E+Rh)9?N!D`DkmroW3{OSvwm zhEoh{Yei7QXLca{mHn*QW!8}ch=CCy#p`nCDDnImI$ues`J&x*2_S%5+ca@p$;25O zua8hW=C)Aaz<79%6uzJ4xbns^V>|$nDRFSL-c%FM6i{BnDnlE3DID}}J^0XVxx{OD zK_(}2{MJKR5gRd-Z~7@6mVxI_FWyaed8w?H4BrA0UU0S9xq(nu`93aLo0C%N<;UPTq^Jz$z}v4T^rYfk<10BLhTapQ?F{w@zwRG}6aL&Co^vav^&nPjJN2B=R z{!t>f{JhsR$b>q6sWDr*5!z_nm7)@B5v_SY*=)_9YhuW5aF3*ZIR5~uh-85T6a8)^ zW%r%@-=b>rK>BQ#4xvTJc{wSBR*ged`?9QEou|!=5iuX;?fh(KgBD1R814M%`c~d~ z()#DlFvV!p zX~IPYzQpy-R!t-alTKX@G5r*NzvYOv?KUNI`Z6?>O(nzujHhCxEePw&DAMar37_(t zaPZ6Nb=dVD9IDPk{5$Zx>Mb?Ao92|UyT1C}mY_XHVh^dsjX!#=(Z9;hhFONQ2NYw& zEPv^L%yyVEc#tG>{{Vc>bbTaSNpRNmc%%K~bvp>y)c*j(W{*C8AUL`I0KRC{XX1zl zVt?HyttSwyP%^mU>V8``V1aG`jqPd{F$TMd%7kcv9m!%r-nl%I^q)4&(x{Q%yUcEl zplUn)h=5^(NDqr2dmRuXJU#C>(r@mpE>`BwLlmpw(2oK;jOg>?j!5vxSbD7ZA(A{Y z79OkR&p26Xs3Dk$FR8pl?B3{40DVD%zUt0bSK0E!YMkaoola*ptGaYwYF$()cHj7T?ds{1g7K^JeVv>iki`lYi!9{wV(d zTly*NZjvBnHC6zF;tu0BQII0XClthkN0?L@G%(*bu#;1G$O;h<8A&@-blc~g2eg?l zRbS1Bb73DqVj9%CQd_OE@tSZ6W@F*fp4qIy8C~>imk4D)lQ!jaYx|DVT+u~)D*pg( zcHM?Pv;A1GJf4a(e#LOYmE#Imjj*Nv*7SiGTt$RnVnU0IixQ;67A_4;3L0@yfh7+6 zWLOm=fU%{FGB$-K84{{e5C%k+B?CN_%E@XdRv7|V(wiR`28 z1`A7c#WcN8oKs8v1|uFDO)VB#1BE;*zNhVwI8#Y&{exDcHQJm+F)>SwEWJix7CbG4 z#@3hc!)c|$JT{&edS?hI;a;}n<$x6MstZF+##%A23%;m4F*w(S-&ZTsD>%{uq)f_a za-$Y;OkrR~`6!0qRXAk9O*RHe6ub;sE-Q)%S;q(}xM8(aTo%YL0|li~a9ULc8)WAh z79~iJ_OUyPC__tRjB1C2cy`Sev#>E_-yiO!{=@z{u@`mxvIM>Y@s?v8Wh4Gx<1jTq8JZp+^i#lkn<|1pdmP55BrdK5 zH;S}zS9BPwfyAp##F1XuLPC_+HqioPkrW=hh#4rtN04P0Nb(77-Grn}IsJuoqgVK48D=CLeEB0F z>(C^(mNKk94Wz02TOFu;amTR*ghuPUzhfo6sYxUHymEf^jY)EWd((e&{WN%4KEcg(25Sq0_f+#zt`n<3Kl@2zR_UC(08a7mUxu6uyRi1>K@?U*@d zAuW%i>2Y%AF_4cJ2>MbfV38$n(YC6$lQmLKjHLeC$zEI*oU<@Y5$isf{y2DC(-0$M zrp<2*_OBMO<*%KU$pqF%p&Ym!_v=i=6ET(J9*_4w=Q!dAjmqO?$J4;w zi;*A4FR1`+?eA<}(Vx(nT|yBU2=O+>gMT-OY`ciUTwhT4{W5RjlqGdyyZ-=*QqRjb z`XpBlvVCnOJW#Y~#Rpm>l;l;vlLk#>a}Xk7vTinAvymsgP z>?%iJ*y3o-mrO<**p#LG4oRFMeKdH#g%4|WrPyl1Z9>}C_>;y3F`5#>n<1-n{#s>* zGn6VOQT}%S0PmBZ9I|7sBaEr*w_26-s4lJE-$wPQM3q@uFn-M`@QQfjri3653F6CN z=CQ$u0Z}80y-Cb&wtiQ=g4u2DC0~j(1K=RF6e!rY5!W#Yt)glAz1y|Z#T@gjZNr!!uut;uS}tT@%~IpXA5ECY`YuK?COsq5d?_Y_uIc&@ zm~Awx%XuTx?n}iAB9<#FnyIH=HS3w$oiwxImPnD}N7XOtqgP@)Fy_d0?<(8gS=~wq z)Fq0G3Py!mK4)t9pZM1``dw*+fd1?stNKhKsIns=!D$YaVR_}NZ>im~$zvKkreIGY zE1LRoulwv~c6_na%Zfi=)BbPsrTr%(5V5kJllhCITx<5aXttH5l#uGes>+~{Yg0@) z`zIuE8Q7rJImDg-PZ|1CFEaTzNAnTBxwnm;`6B_6P(V;N9z3WsA4l3bH2g7<^k49> zpa70QJzvDO=S%Y@gQ43+>0941g;pDN1V04^h2FdE`wNCSu;ZuPfZ?x`Z&;+eW}yTY%pSle&&X`10E??LN=MK%5MxFXNL5X~fAg6n~=2rt>5V zbS*W+{lg^_QV2d7I|EO&GgBQQG2+B`{{U0|ivy-H99X~7TL<%udPSzUZ*`&0E~1$i z>x~}BCa>C3JJaoE^FVS-5sp#9N74OPBTYP<S98@z$d@c zou_8PIB{+KUZ<(Srx1Vx-ko`0U%9o@*56Qi!EHp1$t9b8gJvGHOBv4L&PmIpy~j79 z+PA9(1YoEfg?Ib&pO>aq=&}wOb6sodddgd>0*7h<03=feO0Rk{R}Z}j<~9lCd&OD_ zZm5Kv$lol|3(p?tw&x04u&~^Y(5z?;lBY`ku+hJ>%$?`xZ-Y=M5I+0C_zo zBD`EsgY(UF`#&sB!ressFEkFriDm80vjHpMBGa{4C*qUR zDS8QdD}Sxveeb3ac?N?oqR|l#^K@R zjzG~Hu2`fDHm3b@NZ~7>%ArI!k{i8K@{ZKo z`C>}YnJ!(qsi;2+j-xux!#4>Z>3)Rd6-?k}@vV5mmid8&ZE294QE&g(^pP02s|dh? zqaetzDl9M|O|UUr%#OG%RGr2|mL#bbTo#L1(k@2PY7$C2WJzL57Fh|($zVzyhCr4y zq{AReDNTkzlv0xnfh$Wm)Z{G`uNu;rL1qFXn_(rLI++qvNV^m9rYWV2G6bzPk+pR&TGHhh+G$Y`wh)>{M+GwI!H^2P4K~SBDr z3WvE+dW^=*0aOgOio;==?6?8sw1JY}iOqE4VpoN4rbb55!nh@Hg0!y`9yyT+rj^z; z9kU>8w79NIiD_pY@Nq3S$HxVxoMHzeV{1y0g1K3ZG6PoJKavoCX_3E&~=# zmB!Iac;U6B%ZgP7;{~lR7?PDm!EBdOxM>PyPCO+Gc$`Q`YbcRQ)>Ln{p}u0dT!dxy z0Wa$Wf=4AbwYTh?f7PhWOr4vipEwWmeJz7D`_}zcHlb~^82dk`Jh+F&e0eSwiTus@ zVE+I^I1lkp{fhYKxp1>j7W^{E`!T2QpZg#9mGR4MZ)qCVR|*GqV87EcqwL;}BISSQ z&xigcMoG(%OK&{E<=ZfRF+2YNBz14crdK>&n}?JmkoX6%cZ%fr5>+z%MalD+2MEaqE{i2LW_)8D9n+ac+){#zQP^_jkjJGr$MnbjGaNWK|-^_6AwieJE+PZ$Nria6TWq4wn=sLz!3@@Q$g2`J&ad`y04Kme!^umKaOct^CA+ z{KC0F(Myg|H7Q>UMl2jwWJHX=94fEp18k96v{T7_cHh2xv{7ZPjRwpoKwF+LI^PxGSLi!}JSWnb2cmzMQ?chiXK zV&3OZPlgAQG3yAFj*rtNtig)U2NY-gTlzSdWYUf3kuT`0YZ@+#scLDf3)rTPAWgl! zIJ&Vu*$qCUCOCL}CO7p-a7thZ$|s0_5=njL?MpzuY3-yF#NP`-R4N4j0EQ*Ld7Fzv z4DqAsE%~rUQ1t}%-sj7ncF~}|vA;Icfx_W`F>pL^Ul)MsTB0K)C=>GspPAssI8-Ov%{NLvz{K@6= zmXXO~MA2QjLvaNP#x|iX`#DCBRdOPGaDNQHiMvg!<0dln$S^%SO1rhzrn0+vF0C%3 zEi9z9QJ3tp)}xWG`Mu4aGQ=esjG|ki2?V;g@z{v|oQlss-&(P%{mVPlOK z2NY=R^UXs@9j&v#K(zp`jPn4#{r_m(MMX|4TJ77iR12Z@?!2xJv5OjyMx;??1vYK zf`yvQ16AAGERII#LzKp-m{{V|+_OEGo2$lv8hwlf#jPJC1+*+7%V?XBq02Dv0`R=nrlTSVw zkNEQEvs2qM95Vzn+OnOoYcOJ3ls4y6xM^n!<%vQ%1MmGa%==LBYO-JRoy0()?s@l` zt!?0%e~nC1klewi#zy&Wj%0!4;!ZxNr~X;Fi^=w)gW{4yw@r;dhIU9sfVEXc%cBI^r83SGEg)k`w1JQyD#E#qI5Gui z9LF)FyN*r}R;iY;T%#u))gacq*%h}ddkRZGMw_ay%lVFLb)Bps>BZ`o^Zx*bKk-i6 zN7-h6sqG);u*-{?=4O&v8QqOov99Mi+0IipBg9^Y7~>s)q%#wUZVGG<_T+;gu+qLK z3niqJu}WG0BYNs9HM!{jgwOm)f$>*vR zfXWVOOOuXu5|+RrZ!cg~D+&q@jB?y~$>!aQ6pu2Nvk9Y-NT6y0)TZOZGC-mnusBFT z%$D&=vfP>g5AMLJeSkFo04t7N6Cx-!*&?EX^DA84!v&_FF^bfMGf?MN_@+4UnzOM^XI@s&BHTs@P7=m|xg1-FUxtH|5OWd()OII*nxQXIG)5V!d`AULQ-{;&2-ahOa2AEN&N%}H#ehg-1p=CmJG zhIT%nMOIpWJd|3X8}eU|m+fY5QgKf2)xr4mw-O;DL9%~`{vtolOeT0_xQ|FSw1AN9 zDPN6L00+cI$iu|uBta25FLVgd@h;EP`2Lbx`X5KJzrQx(V%IQ{6Co^7)YdSpK&Saz z=0VhC$r#@creE}vWH`tNYrj|Ze~DL0zSV3ri6nWhB)eCT&XOqf#B~8UF+U$KwAgY+ z2O#0$1M&4SmMG43As!##{&HcX++SS9`cql8Yw<{#Wy5S*KYzZ-N{gU-0QQXOWc7IeKyM{{YI*^O9X} zQr1SXX?FxG7uKc_gt%@M5-=EnOb}}{5eFM;T&F%=(!+9IOuw~Q(bB}EHq1v z9n7-bnajn@7c&+=87u`6Qk~9YX^F{@WY|ZC{U`HUaFaZOW9c#f07#*tY43OCs9}Os zlKvSST-lcqv@uli0Z&?w+R5s2h~^}ZLHcL)amkU?aAiC~qx>>q9%=GUr!J{)^=ai3 z$0w^Yp)^H9P&VpwbE54i3}=W6t{ApX9wkUigj>)x4=d>x$qBYGi+NQZXrwfg)FZn6 zuD!EEk6Soh-w^)*O4SWafFfgi{{S^7(e!UlTgzQ4DB!4(u5O0J6>dC8-14u6W$HB+ zBP@i=mkeBqOB?_v_?X4CK6=w-3t@QC>8~fPaT*ZZ&>FDce~CpiXE|wd4_tqFTrouO z6D!+hQ>uA`%h5!)hSCU`l}*fZ%(1#hPJuW0yJoKrmoYp%Qa{b%j~A(kjN&(v#nimJ zsl{V!YcgBfUl&;J*~5_NDq`4uqCc4A#tgX3r7x==@GpxfjxX;o`Kj-hBh<88H_~Hk zYyB(YWs81X$tRZGHl|=|-%zD!uxomg^j90A-Zbc6xGM z`>D)GYdAJ7IQv9nH7h9nKSI-V%1N~ML;c#rV1LOOjh9nAn{tbdn^}`K-%NXvGDz~V zEOyF(rjZa3S5bnllz$j7$md%Z8#fV^l}$MHBG9`wsG=A%Wo9;1d-dZg1?9we3P z*mN109FBZ)yFg~P)XH>O7pJ=JG1YpZeaY62Ja^pAVd7Z1+yF|EvD-SJXCUSUB`xOA~yg#ScAj>VZpf)YuCPQ-Stx0VOLVDDh^0Wlt~W*J-nWqnxXqF ze^JTEaSLZ5VK6~cRqNrD7J`UU4%GTGveaApmoJJlL*d&8iQbPExw;#v?c0lkLD=Ic z2`ur(LuA?;h;A3KIg2P5xKe?MQ=Z(e{e8wtGiM2@1#FeFB^{?<&u1`_CjS6gdlBGr z?KZC_o_u)E48PrfS;E%n@#-PNG5-J^W}1EcH?WB!G-3ARJyibyO!RKc?QD9uZRyD$ zuOIwR^dCFz9?hPXba#jF%@^tN>N9NXspWd$Wxbf6gb5sv6Y(DT<=Ufp=lyv((glI} z&imIz7VFMBDJ(|do}`S=?EG9mS2rGJ%h)`DzfeaUmab-j)K&-v16)N>x@ zMyEE-E7ajiqTxtX7^VNw^r0CS8BO|NK~gyuDr_(zNrnU|u*j4lr5OUiq1a>zVMhD{5{fo(HrDRT56daOJHD4A}!*nu3e5P z0Um;bGJ_@9rK(`HbucS*pv6$qZgU!D)j{LRCly#wkxZz@!qN&$Q_nTIFm9-bprFg) zhJz(R9!TO=ie+*Xm4!09T3bqCMJ~dvfri$VBN=2$Tahvu0=hLhP=h2wE>FW`3a1Qw zG~2jjOcLEP1S-yZ-==y#|Xw zA?lX%{{V8wSc6>FhinvCg(=tHBm*!MnX+`u1%{;IWZZDPhKf4kWCEFhicKO?IUT+7 zqo@rBR1vU2Won#Tl#bno=DAFzDLC_-=62XCJ;lLVEg)XSzSrH55FgfHAs_1@Bv4ID zG>zhR8E`G}KLjj@l_!er^qkn zWbjDHlE`i(5$>$#t$)b)e$Vq{aS|mUe}~f3jy7d~)knSh-(14?4v=Ww?q3`SBEIT)fmV9Hyr-}hl$4E81@^f0GAf;92ZXwq;XQ@I)DnRmgUNuRJZv& zv9lAnxfAJa`bd<9_vu7k+{I_7S}lM#4Sf((DER*XbWcPi9jo@ZQz|eE7Le{a?-c+y4MC01+Ql zm9K9kheB(MrdZ5zsG3A$)x`jN{9eD|V}5Azy``-7`lK&)B)1W~_V(6p zP_i0#9anwSX2(UXl!3;0DkMfy$lZr089V;~c6fizO|VwidXFXS&N$x#hlRbqJNqE@AFv8(UXddguj}H(sgY*8$srOkgK_%(KSLZD#}5pCq5Lvd(=O+m>lQQ4(p)l@vPnQw#8co_JGaC9 z$03^-6(A}<$HV^VIdO;)AU!wh;Y%(pE%d9lznVWv;R)J8zr5dWMD9oVIg<>BEO-I9 z{{XpiV-&~|CExxPiH1j~H52$1R0DZScZT`v1Gifqmh%zAKz8L=i zoa=I#-~vBXKA-CU09lRd{!_TRnBAqs_D-BkQk|RB2E9iefy~`LxI}P~8UFypyAzN| zRqy>3@8*v&TSW3qu#*~r9nz;6CU4qz1L5F*X8_S*k)eOp{uqBnh|))UPxlH%M&!ywap}e zwPKjmZT`fX@0mJo*`Ne|ujaEFjCn@<)V#6zc^c}Lkt48cG+kf=uj^gOKdPWMyr?+~X=XE--5c+*Fb()=Q zvY$_;DYTbzH^br3cFaKs4miM4p<`A#CeBVZB8%6<6;quS7>mE!JqAi9%P12gLA!c2 zy9#ou?c#~)%MKHQ{oio;mO1d zPgYB63u@MioG2D9&xt*mPQoiS9qK_2s`K(mOO~*r< zOLsg=mvKXYpskVs!iVTMM5!W9fU@k}v6kyC(UGufSMSP5Xplxi)ByD!BPoz^2^=LG^vFvea|z<= z6$*wGQLxC{0BOm-)ZfPmNk?h-Q(DZj#MEW`kFmptQ9Lsff#H-~Jyr;1iHwDU&UEX@ zFRi^)*}(neeboN|O!VH#?RtiB)x4A3i6iFQ zvL6Fq4D;E8;z;+(Ol2Xv&$V{6cp^~Dvb!x|P1%7p0A}A#Bnj?t;sJW^mUSCTT?0$9 zo0?p#JX!^cNf|yOM?XzlhQxiW>H8y9h~eQ923!3;_F44Pk+3$d_C$;bs+x}xn~Zq` zg@+DMF*H>{%MiUzDO6L1lmF86t7IH?CcuRwfr`e+p-qMaDK|`sLKL!xYjo6{clDG>GYz zrK;eyaKM$=s@EV4jO9U8DVWx+`gOu1YfXA!VBw`hOurUlWgDw%HpC^m(+#V(ISE7+ zSjkMroGFkic#Nvj*9>hG>KrzziPo7Yl~&=l`H{o2xF{JEt{Y=%Ra1?mFBCYXvbhOG zR+Y?o3S{M7@>s$O@tG)GF-qZu4#JhKl+37VnOa-RVui2Lzm7&>EI-UTqusf-g}Bc3j@BXfGou%3yA>fbDKiRw82ADu`AFTfXu}EDA=qsAAU7#v0ZzFce@rJ=L8WtBU zXsNeyaQL7vjS#H5JcoAMAawz(>Vovr?IEdSRy}vfoYE{#qEc0bNL~;o!+M>7$jJ39 zWO~T1DgdmK7C*|H55EQX1Owa@%!->vp)1^V`|?$M*>IE1NU>_r5^1?PDrZ!;(Us~# zw*mH>s08?&JU}Om1P$D=LZj7XW?@xSHQU~qemIlK$;A^RvQajmjc})kjymtukPc=IVo9dDu6+>P&Ce*UR4O%nIXrlGU_atHZE)`< z%AsWLtv$=bry001s{ZUEuOI>sw?X!6-ys+YPQM@3YY`k&p`oSK&5gX$-Fk-M$$^;^ zJaN>9Q(7JW0F>nQCNYr!R}aJ$WD(0oT+h`% z_bqu~CIKUJ{7H3;_jdZl#*J|V_m-N8TZEfn@i1T7Ek!>@UzRbJF_0L-Sp7Ud&uz&c zNXQ6@ho|}|iw$qfGF}ZZOB=y!ByBQXunj7PrzGX}_^?1%_LnQmr_LkdQR0=?2k`#@ zS*J86LA|Fqo*oo_r4-(^)YoKvPVpYxG(->s8i5+EdI6MTkf0;=!`JHn0DQPicw-p- zaP@k>-z7RlznQd%_)mQm=7Z`Fs3h>KNQz(goEZFEf7tQNyz{}7?Gp^u>*1HD`YAYJ zIg$zSEBJjs>DBe?EkW;^?g_1K^p~helkKTBDOKLAz8PMZBm{U!lrlDHataY3#(%}c zsd%Vf-D^Ii1pR<%{^%B|@!~Eu2c?uA&8VWj9hJy}?CAIX%JyyQ8O z3fJJJYqF1pa#`}_IYgpAcl5$B^nY0bGlcFViU_pOB9Y*}utUH{>ssDL@V_EE5z)V9 znNigc3}@fNC`l(g2&q>U*9u;~YQ31<+iSXI&E246D6afwStIy?L(`6A9TZ0lu}(3U z`wkf~mYi&H)GPfg(YlVGqIrgUdz)#{1_2rZ&XN)~3d$%pCn&|2E}R(1f1Ug*ic*9~ zkU!Q*t@Nf%PJ3%xRJo4mt-FQz3KS%eYe7%u%*kiC2}tmm`rLyd5yW{WdQHEZ*UW|+ zQVeLmoarT6+(aq9#Bn=(IgOrre+JJ#sysj5aX8wOjKhfRKZp6xMvu~hKTZ@?H2B>` z2`8_KnB0G`!27_ShqH9HI(NHSX`#883|a&H_WB&0ygnp1f@ z$tY54Xi5H=m5wwV+)w}`Eg6JsPuc60Om5MX3q*xMB@b7vXg=((qfMIkCHjOsmY?TC zm*SI^f?KAR5%Y*IAblkOH%j)*T&9n`!_6u__9NygUP%P355mP%cmbPzBxqB-(8K{j zEl9%+w+E(V66KjKXh`1(l0?@cf;YfQ33RX!IjG!q`C=u}V?K&J*1H}jCrs5MyLgya z`!XjOEpmVEo7z|edN}%i6b;U2<%6J!-qWZ z%ugBNm~k~YBbGce8zowXlW4LVxeIy+eVgJnKV$$aT(=f^&iQdXjb8nVshxxH}=OknFy*tZ|bw8GL+q;J4HN+xG zSPmew5^F)7=ValIJv>B55B9ivn=(f!{Ceie#QmFjS%|I_rNWo|l~U_zO| zg^iIyn`BB9o|MRx6f=NMR!ah;%aA1$rpu5eX=5%#lv0^otd*sOG6bzGE085=VO)VL zOA6&=rk0h+6133RS48Pjj$1FqQHZglZ_-c8!KeEP~lZnh;_@c zg{4DKGV?8vx4uhXG8V1_7z$SDmMexTxM4$y!6KEpNlQ$~ zidl$N9ZA?^Whlg4j|@@;@=LCDxRR@EhF1P#vi|^XX*FKZV}{tr8UAiCi5zJ~{g66g5lD)~M{~!=2_P~g1Vnm!@#OSH@ocQ+9U7&aavP{z z-dS4`u>mtvb|YYYvdCkUx$N1G6z9*UIhT19pOL>30R3NJU&^>B9;FQd0h8ZPW_p6IbSlBv~ zQSg$a(NyloZs#jGBz9`zB?Bay#B3sZNpE!{dabcYqoo3&1L9+sfsF6`Q6K5#*aSI_ zVHKyr8e2&fw<^NbHDOzPW$B{;MgPpbpadlexaQVwUA2SDmJaEJ+cwd)AK7&(f6C*M#T$o& z2dZCD+x*Y!vcm#l;n(%Q;*xLB9!%7uZFb(s-A<0aj6BZ-VrV1+plrkTzn3#VHL1pY zBQ6pAU-2nCd|(nktc&v=koOU2(%IgnqG`bg)j!>`OIjU`Xs_QY(q|Dl1f$2|U$6LM z6k#WdRu8C|aeqhos^V}geGN`wblNvFJ?aq{QtWu4N>KHp@BUUpht+T#J~eQ|>i+;c zi7*Bx;(xvTaU^;@^g`x+Qu@YwI9UvK%^;$*E&l9J@~iy+02dt1)M7j%9Az1w;{Lz$ zT!ZTrImL9>w)#@(x3FC#*HWqam#su;RsJ44dXPcmf;i4zIFV5wUk~sz+aNKLJ5{q; zETWbjGALg0%Sw?_L=1isPbzOu_E|;@l_Ctu;A5wtOiZtZ2O8U2TR~;0SPS7}Bg1`-AMhhml9_qC`*HkaOD0ZoF-D@iQ%+OtJ}>L7Oin> zX$!*~{<2K>Fs%<5{{U}%#K$~1fsq7`9v&HgNvMoi;AC#U9)@bLtV`)a0b@^AP$*pZ zoYI+I<e531wwKkqb|>KM-r18l)LhJwsHXOWfJF(X+9Pl` zrE?Zx!pae@fU37jY)=0Gep3^>jtUa>c}L7{4`1V!<2%!KBSx3mIDup4z%LUytE0)-{n=RofhhYssT9$^G4GUQfNGRMP3`1`mzZuWCh-Lqa_)XK+45i({HyyUOxFa`j?Fn7pCA4en%^nhN;PP z*5*iF83xQc9-#Ik1Z76UgQ>zY#*4%})urloI{qmFjS^fB)3< z!9kU@(!&_QidfN%6pB%J&P0YJD6k_UP=}P{31UzG_`JN!Fk7H zmP1oaf;u_T$6U*fa9M>)3^tl?Y>6qSS0ZGZRfOd6$ux+JkaHpu-BF9U%)n5)3S3P( z;!P@pxj!t%o=Zy6mD;Kx%V4URZJ|nLpvp4Jf>P-oubPaLvXxY7jJgM9UJgwS?TTB& zYO+P!D#$HVC_&6rsz!IlDMYED%%H87%I74wEqBO9Nu|MZz);^2hSjh!w5ln_)p){| z>5`;6m}y(4G?!o|mYO61Q?MOQRAtoiN(SRnRjR?o2 z{CUWR0(tC!m1mu~Oyu}4Ve%Qt>bpZOV{ zY%#`5DB~qBxYd?~E@VRkl?^fiT}DO(lk%y|h~f@Ra0DaGJJ2XBPe3x!5F5lI7cHEJ z;<-MW_CfZ~^uTft;X%qdM|DEVidH2Nr*Jx-naI`iVOP1`VxzgDf__;m0g)ggS5M-c zVBMvkt{^XQMHER;T;|zkpsxRH?PkpIS88vc6lcln+J80*c5(Id?)$xQOjd?QO#nC zkc)&YQA-tS8gEc{u1ku}?D(wiscj6BN9m-7FdKMXL0%vl_o3xnjN}2f6OabT{{T4y z@ymN9qQC{e6F;hI6@4-VcKxmL{!tRYSJVEPxS9Zyx}@h$dD7-d*xSP-bqWbu^a{Pd z;BqnJ1B4Gz1%Toas`VRFu(pMK%k}uKjNYoqBoQ|#%wSPTr^E0Q@UBZN&x6264Oi9t z@A&f^g7H;wotNu3`f6LjVW=09;eioN8vHbo=z)Q*?9KeS9X=_NXAh_TC2+=EMp4>7 z#r|p&O|Y}k^(dp7Z$!H&nGwDz8&KYh7v<(OrFN z<|`@TioX+|i<^�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 z zc8%=gVxsXjaV7Z8r=e4QiJ(*L%ZV@+V_H#kob8 zHJDAU{F6mCv>C5%rU%YnKcM^_Ze&^lQMP{Iz%&9}MH6cG+r+5}xZPMVo4A-)vN;uU(BWt^aP7`mi( zm{89@4lweiaCRJ2<7=(-$WQ?ZH%?NfwyQ^r6KlbE%5D=3P(p+*GDSXI=jRs9MDBFLK?mqTC^J@%g zweUW|+LQ#tpWNsJsr+uze3gyxTt{-b>Y2`1@1=}t_eo=PUkXh%4DEy}wE9pD%&`fR zzwq3E_;Js$>R6T0U+6VpT-ShR>A{Fw zE=yrt;C-B4NAh3C#wQ=axT^7CHf*XdIGCMLx(jb-@|ceO>J%t$F)ozcI{H7yXsz&T zM`{uH{>*%}ogLB8T29Q1?-az7;+{{*4BkT6)yj4h;XL{vIhLmM{YKjr>jodoGmdtl z!N*T=J&NHee)WuYW#z2th9xers0=h5O}KlYdLx;Al9{$z4Xi>0OLz>C>k^&b{h6lQ zB+9%{4n+ysef^pqIRh1C<18<)TvvlF`CI_-IAwBj|8HyF*QV#2b*#96$nmX$RnKg- zE>)aSmC1|iByq28@L8ZCadGVMhtG=(| z>Dx)miSq42wW%yRuQw!~%3G+_wsispb10`9gS(7?>Kg5%(U02+IE|ZphQc!PicfyG zh3W)6{RN~++tRPgFw#VMw1!OmNx)4SCigX%UmB-$Fg4C9VB1J*hV)QnE3>f5Ibcv1 z$~30FI4`%cOr(Ojt@*H?vZ}`4wYN8%RZG*yjc`+K`!I`7HMo8PkbzR*mwf6XWT^Rz z81t%X*%axdQa@jFSeHejlpH?i^s(QTC#IWzzbrf}YfmA3|%3z|rES3{mC}h{Djlgx>Np6PJIkqhn!E z-Owh5)83?qYiB%#csAE1(an=%rXTpK|F#aea<19rLE%5%zIA zBKgJ&h5@R=k$kbbp&yG~G@DR>%we<51nFv%E0x(12wN3FQ!|REJq4MZ^QSb~lnO(Ng5?db@s%X_r zDHz5kYv5VCmTi*fy=Jlx;0GpQ-oM0|&p?wLESilsl*U0wb-(O4h+kH4&)JQi^$5u@ zTUp4H*MLp-z=kaX5h8Pnrv(ccS%Z#AbjIC8%Lka48bP=Ml4Tuck-kVtZl6#}36=HU zY|vGc$fyURlSBX06HA;r@WS6IEFzqHXn8yeayZTx)e;Gc6FWvmJePfSs8;IXTtsc=4W9 z?B7OZy=ps+|D+W3B*3V9FC%eB9`gDo+wh9N>z^-!PVI;GZO-fEIDR0SpJps`>B(3n z9%KM01|GWcv+QkvkAC)VnQE)+e^VlxNxmOM@e|C-rr)r&efkk)_e~_-o<%LHGSNi6 zT3S7c@(P=Z0gbR)SjVT*B$(rx(+td{-cP0E!)$*H&~G>3cLsC~b>EQ6O#*0+wV+)P z)sB&kjg=2ViJe+s9DS_(`L6rs#1p0I-|wtuQRCjqY?|Z=A19Mnd}j64&QPOphvsMh zRnXUY(NL<&3D4`UO^77isoUL z18X1NtHL-7(ucg2Z?{Yqxf^MKXn~E@DK1CPf?o62fFcA_p>Pf z4&H`ScPgoQN7QGSX3A=a_{|7JCFsK3v7b0$koPAAy9oF7BP4RPTiR-Z;;*@y({L@i zNgsQjkWLD0u}eYp0RgJY0>#$BWXTO3tek;n@ObSult>=PRJl$9ue>W<==|E9Zz!OP z(bmK>aic5ap$~1vOpTOkb_2_h9t!(N3R#N3bQ&=Wvd9|jx9+29w%8Y)W~W+yQAaz+23*k()gOm$OVp3i z+`NR6isW$hV{oTxp!q4Z4}aBF+W|*6wu9wSX#103@t&ls-*4JLfrIpaaHYgaa_>qx z*j|ACMFjb8fhxDu`tMp7v&I=l_^g5e3m z-+SDS>ubJXZ^|Zdg{YwFn3|B6UxuMGdBIqu1bJ0!+s75y#ZapoN;TfLWt~B;7ygvj z)M3lnphL)4+xUm9mA@zWMY#JcY84eb>!M6>BfHy5d1W}(DTQJr=6Pu7{<4e4XWwrT zk^4ZFVYeMH{y_DN@{+${l^{v*wDSJ8;XG6)R^XI0{ff}rU?cd_B ze4n|{9hMqPS$^r*|8Hi%)^s4sw;>BeIIudAcdA#0niG|#Ni1Kd?iX9~`{>$Xa_vDJtzP}{!K(%8b#UbxpLz{sqg z>*qK;d^ST6TiS~~@?;mg!-=Tk5UQ1x&IaS})OKVx8JS#6zC=P9J$45*JrBNNG8I&AUG5`9pBu`6Bj1Lx@3g5H_AtsqoMKX~;iB)5glq#;w=e?fDj|I1kr^brbcT_S zhmI8$?y^GJn#x9DsFFs_-Mo@RvQ7B3Bt(m1vrSX+7%3FRxB3UDRlE~?OD1Z3u|`MC zyQq>pkv{Am1B3we{(AHqHL6h5ks*>j&@&UILr@`SY73B3oPLtK>+e%zUO z$p;n7WTJb!i(f}V}P##YYdKc+_B%i5l zd|;Fx%kb$O4f;|1FX27@c;zVSs~{66%=-OjZFWwPDxW>YI?}eR>V!`;(JzGFmDjU#RBJ2pWaAVqS0@6tNpTBrnF{10+{s0leg~mN>hg8%V_(c01Gvcr zog9S)?0}98w{mAI2hup}f&r>s8p*8GWG)h}FVfI;yV*R!GVF2?a!=`92r) z5oi62x8Rp$=|~gl^a8yv)bAdnSXju%f$yz5CvUOxhw^90KKogbNoXPPzwVoDd(tH2 zr}BL`5tCRdIgQ6+qNwKlsg&{V<>ARrI=yw-Qo)R>*6a`oL<_JwN+haqyqWSqp=Lgt zyg2>=so$#lGUE)(FO;ADAkW}YYNF$<_~e&s`3G8?OL+bMA&!{ni5j!1rdTT=Jbl0n5c0w=@;&G0^q2$asI))_@G+r++ zX*JRqAqRr~`S)^~^qL(Ub|Vt_?2v(GPLgmc9*&2IMkg2E z?C4nYWFAd^4Nr(r55BajmNFX$F~cT;1i-b=7Ziic@qPW+^J}8d7t8&$!vpyKqTUSMicNqIG4Df<00EYdtE`bc@#zh17x;hRPUb+8GD#403=YyvZCWr!a=HJs*%cx$ODc`1mG}+Sl)uYA=3sG5ub!Uh zY}Mf~#3pSC->Df}-1konY7N3NDGPM%_;PV<0W=r=0i~A1p!$Wrs!%bdk(T=ppX(@i zJ8gA1ki6Ly^2@8)9s0Q=xi~yFJ!&z_ijxjapS-F@Ma2e*@W(nVQx7cM>p_hdk!x3N1CKCUc(ZLO1qcS)nyf2xwldvMSl``-A^$-& z?8f0|It(x)ezbNh7aiDSBF+y%ww`t#-}kLd_=3?Z;_PR7dgwItTOIbC|9;c2=n}xp z!SrcpAApr>@nJf>;tE?F*bXd&`&l~;%(tC5s`#BE5|t9D=@LPo5HmOB3iGWG8%a0( z9Bc4mS^RbpY1UPUb4|&A$FM}pL~OFT!jHPQY7G^VI=|z=5;}-jMj>4MPB=uGLA*;( zN>t(21nt~!)jH0U+2RG$BTOhn%+@xeYk^U#qv!_`7ibT1J*ucx zPNIFRn$cK-G?RwOnMy*%-FX^LD!Hw3Db*BHbp$#h)i$cP0K)(yhw7`LSXee%04Lh2 z7#v9Wc8c)TM zaV7@e$`(J$>6s*xLmy#o%28bgYE&}PmfRImW!&k%F>ZJ+`=TEb#c@3+gZAp7;Nd7H zh5uS8)Tv;7biU_0uZFb8WX(ArkqMYw+r<<8%0I>Z)V$#z0SK z`C#HrWY?LSV1|$1ViQbHL{OE8d zi$uk0yQj=feGfL!L&OtECE>%V$6kCvFKjCBR+wKFA67CgfTGD$(^OEvUszvW0PRr+rKPyiM%ycRN6Lpu{~Z z-)2zZI_?N<7g5^gW!Zdt`q$U_O ztJ2x+AF5YDG4)$gPTtDOAxKjfvby)-ooTz}t9Gf#*U-yb0@4lHg*v*rSS1u{UN=>njOL%8?;jQ9 zQe^k_{-6XX670(9DQ8y$OeUQ0xtv#U(Obj*7Mh=({E@9l4~~~S5RaaI7XO}ByJC0$ zQC9TEr#Q>V#=rOe>&cBRwQlCm;6Uz9Hq>=i@KXJF1)~U%Q}b>*E|zrTdOuS}b^Fxb zh5oNx-FWpZpGnI!CrcjZCUU+EZJ_7o&k46K5!6}(zWb9Gpf^g_R3&FfCH+6Ra28Xg zMRD@ww6t&s?r~g1t&+P0_`N&=m@j(W-<5y~@7Ze4C(;Ge{%J|kTObENx(B*&=0yVVQnos|iKg>}xRbb_#57R(Grdmy3zhp1xUJ|t4rpHe{=seaNCK;t zVBa_ZMlMM_6BA||91_tkS7mgFOAkE`?^Vu@6sx@CXq5GSJdKhCnr3HPIyZ@Hgi$dy zW)b#`EkgTbUJONzbO6mG1vFs83bq?BU(6!`Ft;X;i@&IZIaxY|E+YJcQ=lqCYTh?^ zIFnbQQ(=gw-N40GQLGxo@(N1;PY~yq*+7*&wLIw+2hs^2wHY8RjoBMZ0bEA^A+I_{ zjsvI_H!NG{xXJy5uvZ*X(00|c^xsvb7Gdl1PA1=1&by|zeNze|81BlUW`x5pv4LH1 zU6;mVL||KWt6P_a9S@okc#memYgx2tek>sgMr2@WVqdc zanU^^l8@9m3L~nI#Vox6VS+9h0o=TU7<=fXN<_NBq9n5kNoJ?Von@ni8X&cjX`35d z4-fSLd%b=qp7(t zNsUi7*K=_qhRo%Vn{`DUkA*)Q=`-{1#x6(TlU?{#INEem0_5GZZwJ*lRYh6MHrbN& zsQM6@61|%sqhLN}W?L`;tcJu-NWagN*0^JexAUl3;W;c7DVYsut;S@c*)hV$=QyYERoa%f3gF!8>tX}L2jtcV2jF-l*duBz=!=m6cySNSqQ ze)@f|hkLd0b_5Mol=VegK1crb2A>=fo0_rDE;FJp1=g}(QrYm2wDxJKsdBM_i>@cz zCXNMRAwCS&Hs4EOZG1jMtQ_P5ADO~1L`9NR@y;2{#*J;efKTqeK--|$-sjgR1#BKE zicsTawkdjXs=rPb<`nJp*v>nqI>&B6_Pk_PwpCO>bM&rPlU;IIXlZ;o@lNH|?;Lup z{1!Y%2eRbjQuafzDS8KyCJ4@L#8;Y(f10HuLh-m^ zotD^&ZT|zgMY1(bp4>_Ts%Q)0ty?)ihZ2_4E@_?a@7?7#{5v?rKM)Vn2&LSs*bIiu z!}RPcETY6{mdq|B39u`4%@U5D2Ni0#hRU!SoV3Z)i?CMcU7Ei~F z@8YnHWxHJF~g{0+?=}7u=|M!_ROF1?xq-MJ=meH)y z%Y}Qc=6QC*nhoHlq$TPfoqmn@zBaD3)popA%<5NUweai1l<1nGte=iHL+KWm`G3=| zBkQLIBI>CWpzs<(!3eK-K9YYuKnai`uKIL3?T3kKVdm+QMD65o*(v#mOvUJgr+4P% zP#{L4!Y+g={P9Q6gRjN@a9LuZgu<(K)(fPsa@M<`LZoX>B2Zk#`t@DEPE!c2o{R`Q zdK-PP!EbZSV`1$UCa7>Cd(iOv$4YK0zoW#hwXOC@;k@iA{ZyC1&v<=XY7StldveFg z6=1SIg!uR~N!2@-;aw0Ws`u@!wnNhL%&#VxO)TPCK%iIWKm`(Ih&N~_>a*$6>tUlE zBhcbHotKfM)!72z*fJH?4NAZ^Ez7xPd)mo*--4ww{?+t&TzAS0M+vdNIP zFfn8@+KmxX?S@h{xrt3gW^oCYQuPSU!pvy9>VT2t{KH7l^or9|EKjNQ>S>PBg4077 zs4x8o>V^LU_13GN{~(@#kcZ4L4Pw#1^e_l{G{#M9Bo#=PTG3m^X-naTkfvxzAm2?L zGyaq`fl6&UHjp|ymS%6TNGbd|O+%{D)N+uVMB~k77VVEzQLH=Ex|3&;Ss%YPt)0pWXUvE#89$q)s_Xd^Rz+%vK%at3(9`h4i%H| z)-kCv9JtA>I01E2o8fSp`45w$H4avlj7zHSL$OYYe642`FcZu;k--%kW^x879bPMu z8#5$woesh~Cc+@xmaPyr4q_tr@%v$Eo(OxxTkf))7$G#AY*%}>N?w!3|AQ_tY;G~TDC460#wB2Of|B)JJtM>Qvp zy&Eu;;Y`Lhr9e-kuWkV%Q_JbrjBp=hvIGiRGgIHL@4xOS%!%yN zGMb)|#PgpwHVlu88Lc?lhVe8hpN#`??!L60-i*_~JDie^(b|n>7t-kf9zs#@t zEE2;B~u;2@1;OLMKOZ zOJkP2S?bqnG%~fqx#}gSZY}XoR*K-VcofmkP|t*I19H2Vw`8_3Sm;V&GW{+Cn#&yi zt~bNdmz{j)ov)!GO0KJn9wXj%o&%n=DKKJsUN~uYDNoWoo`pvkCt!7&VU40dr^Phn z?jM{W9t3N~mwOAQ5Fnlw6B-rvB1=g}2J<@`iXzi7&h#qzelMxdTA=X{7jeHd>9?vG{IjU$?-;Mmi zIny1F4RT256GT0?Z@rVFQ~fLF;li)Ol#rhVJayeYBFRFlMR;)-sue>h*pyx>i`dOL z=c=_G;fonWc~h5Cx{}Guz;E5(zKL!#V2404sZS;Z!CS{qx{A1B3M$l-)pYl@1J=( z;VDXxt!b?rBg7O$uysO_aJi?F3Mu`FB&Aq<>CxSu+uV^4JOm}G2rS!~O@?{8ChWoH7Y)vW+Xy%3MC$76GgNDpuF+;{Rh!MlSOWwV~!4OHMES z+r{T49Lzdw%5Qv4RCxAz`MMb-#TVheRloH^;6-44EI#T*o_F>opD@;T7^Q2n?+))^ zWe<@-;(x#WQ3qWR_lHtpey%GrzZXB8YW=3~SL3$1MOA!>vyhSx1P#+#rrTISIGx27 z9|Q@5)7(T*BowaZxZ47YKunD9E1wd-VY{a}Iy2>+`QQU?;mqR^w$wHQ1&5DF-t%Ly zLl(_`iMHMvf6tJpiz<0}IT0H{*e8&wSRAIS_SW*S<$HRPR$Q9@NCQ2AGF#thVW5o z6O@*!1$BmH%>R8qpWi}WJGs&PNNUp>z=^C)b1bEhK^r;F2HkV+?a4=Tm?*=dnZ#l9 zd}lKNtp+GpBqn5q?oYV1asp)ew8{WR(vy_fD#X>Y4Fb-D&C-(LT&a{H)@fKW#%6^8 zd5q7680xS)zCz+x5#s+=|JJMaCf9_jSO&UHHik}Fe@X2n_%slPJ{}SwBCT^N&pxFZ z-&f}H#JG&qExKJy;#{XlfGjVJ-_XhwN#^i~O;IUmtbmF*Q?P1Dnk1*06hmWmn`MIu zzYLYpI=8ltN6uTpMu7EDTQNK6Kr*6=w;ub+9-uk4y0SV$)t*#}rL&T_m`g^xDeAv!nh*dX z!6t)Jmu~dM4ezaD)b3#^D&>SUu2^MvPmZPe!2IcW8B-UPNL#aw5$0;Z5mQPB)jNyW zJopUbWSZZKiF}3lP%Br=jK+PoGHJ7HG+W#s=5cU_Sli=RrTNHwtrI+XAq>r9pO@`p z{%9|WNWY;LWUw1GRl%+v=J#CjwvF>x)fac(*Q$;ZuKtC3=~YIht}(FXin`hJo0UM9 zsEIrYz3$f-5lN%?IzB<2!5GJU6(v(|C*Ibt%c%u@hG}RqDDSBxK?>2FGI7!wQ-mu5 zS`o+13aHR05l`9{Vky##?XT_49_B6kd87&o!X};sfQHzg3PKA#FGsfM*6d!jt^$g_ zFYjAyYyp@|80br511oH111@S(NDU~xs7a%>QpK+o!nhs>fQeR_m@_&3CThQ_!O~?c zfRdpR8G7U9qn*K);J`JCQpkJ~cJ|2P$bw|>luF>(Pmf)gbBDLNjOz%=u@@|{#GLD@ z{uNKb(oblKJx!eoCmJ${t{q%Su0T7fR_f(wH zn)oVBUK1~|>5W&??G4@7nh90x_r=p1Jk?rWgG2Gm{#c3ExYhkCr!X?VRrx^7wK>u} zAqYAe$zV{bUc+i<;sV>y&wJ;zkddSRV$HFFH8PTN0?nI0_>`bL^fuEW$IJ7z5Xb=w zr!UC?4o4v5=RrM9Z7s!}5V^ZeOi5nLc=#NWyK2WpkxW{dL>iP9h;OgY56DpF(LaT zyPn5)T?@a=jn-;WnDPDcBN_WB!Cg+0QW{`=2E!qB&}xyt9)!4m{pB_&Eo}{Pw2NBV zVlUyEbeh56s^#pN9#qm2y#;rl>FW>XZ~k83p_M+l^?iG$^H!mdd$)(~X(yyklo zkftHjNWH%}{GBF}hq_J#aQ>ZvyF^pq*o=okdxrCCMr7F6v?}qT0bu_{tqa{!8Pi2i zrUC;i>M(L?gpc*%x(@A-4JYQSXrz>V+}5g~J2iu!qV=Um7w@#)_EV$AhyE|SaD>5Z zKFQBngp|m`XlwKr#P`jb^+B1?&eM)oNB#rlSGimztQ1wW>9eqm;UPT9?Z-hJ?ItlY zQ}`~&Vo_OApaShdKX`lcdI~bp>P`mGisfbxku3RK?p-_^W$$2L^NoUws=DZ|e=h5( zj@Kx9f6Sg!Lj|FxN|sQU&^$8`zHD(=JyxLP&YI$V_L=82pR{107UzMQ&895>DTT8L zN3?Ofh~gfLTGw&Ka*m6}RgaR+-BH<>$(DqRw}C_nj{~Cjhf%kAZ@o#&Lv3+@m9L#$ zAn+zS5&H+l)9GW$d^r;ycC36=Iqoj&<`4MeJ`Js&(sQsd>%=%N$h(ggAC=k+jp2x_ zByegTqIfm^s6cs%ZN&H_8m66mMy0mMtA&}md7Y?U?oR(Im_cR+D+Y-g_ILc2ge+1t zdk3nWH;tFjj!oT8JZz^p85QW_UuP^_H<7AP4woE7yHsVnomEM~2+2jX;hi@yK%I27 z)|zSC2z$21dgCC-Ms#t9HCO*~``$I56%)&AV*xIuNY=&QUxiAHW=}}ba!O-82qKa@ zlW};X{Wigb87IrxfAtyTFL0F;?prE{!o*FMU^3>mS@hqTaPvwj@AA`-hhW5ir+nzT zTf^Ozk)JW%|4tu+PD8tu36&9TNdfQ5WeF&Bp?b<*R?!BX@gW?g|B19PqUqBfL%LNo zOLF_!|BaIWjT1vU=TxNd&=?ii@unVjUKmNp8^o1xSE;du-Ac2 zrjR^Om2OU+`9kUFu zImieX=LVRG$dW`7eJBVM@!-ID9-XEGu>aVlz=oqeHH4i-OJMn7B6SX={mIQBB^BS2 z{ZloMt$%z*TXy|n1YvYrkdkf?V*fO6@0a4l7F7}a|AO*&EpKQ+P|sHKv@jkIoPF{0 zpqS)Ev?2drbFBK-W@Ropw_=s*Y3iv4M*?7ps|m5DsQ<^*TSc|mc3s=JOK}Sx+}+*X z-Q6Wnq*#DLaCa$Cw76@F6bo7?ZY@rMLW`GT_kZw z>HckcrO;Eu{1rKaWXCs)d*u~^Az&`@_mKy?^PVs@(XSioLc@;`<;`xascbKt1M)|If9t&lGNZW#YJ z@mJWXWJGZ`zOt_rDTGPY+&HE*m&(b_YU0yMZl7?)L3ZAPj zUtGGsl4;ehfIi}D%J(c)z#L_p=+w)F5Nf5KkR2ttnFkRjthbaXT?o^ZUJ3euW8%rAXC#`7~Om>AC~N2bHQ^O-ObH z{w|@?7@L}%z{H}JFF$XB{QTtyoSD#<6$N5@H53}$m(u!|jF+Grb0#YE7~k>xa8*|M z!Brpc${o6LPB`@)A)4w<)R^7UJcY7r=U90Yt<5u-Ri<=qE#T;?6 zXrD^|qfeJ52T0^$I*X8Z|2AWz0 zsMA9YH_uV)=G(EN9|e%WdD6I)Sv3kf+%}A!BF_)71eAS^?2e|&rAv|r0es%|p(W+m zim^9|xL?*4QoaHLlaHCTbxz@@BHsXc=DT^jUt=vq{MmG!unk0ScVmh#ri8e`Q zO_u@>GsTx#k3*Y9y=A5Fi<7{PSoPVA^o^2K;fg~?uf~DW@`ai8DmXGsV@R7*A1x~KsZ;`CjZ-yI! zW()bZ+}h``1SaY~akMhljA-sXmz`xH`0dk_0w!c=C7gFJE&mP8`|5AXH~AP*>lF@< zLuH0Y0$B;WfBH0goZK`xC@96`jBFC(zIIvTtx$(W_3_w0b@Wm;XWnu#s2mC+Rt2OS_uDxM7!uwupuf;Zs-5b=v=!Wc@!jbW;#19@SRdhUI^_w%ix><9Xt11&a{N? z(EsLtrr&;v)*(UBo!VTrRo~%d(zAjqWYFg`S%Dpv996vt+4(yys#S$18i|Kvm&i%f zU6+!JH898L$Cq_9OR02XIyU*AS}yrSCtR6Nh$Geh#Gf<+My;SCM1RB5t&6d*uV2*YGcU3dfPLx$xjNjD8YtKX<_+5mz0pk zi4Pt_t2G55_qV zSii}eHh+{pzT4)u=$uggIr}Cug6TvrD~im~d^sh@T(mkl@{`G(3M6MLfWsDSub;4! zi7qp}c4X)X1|4gv@~FMRqP`$sB%+l6F56V&*$t{4BtA*CGS?v9{#dZVzEM2W;#08KT=nx~KG!f&KE&i67&CeVWqoTt9^Q#OFu9lNzHW`j0Gw*m> z0cT1{wy<9r8blPwDRF5Im>ZB^s+z_7g-Pnw(;ZwH@mp&$CAubZYHJWE$7i*^C)siq zQq)5)eQ-wNO?l-L4=qVHjCEnpx^`6~26xzZ2<~@^ANm!?lTE_G7r&&NZzeQ4KUxTP zc_^0_G_%%ylPQpWZfFNZiHwarJ3l$2g;`q4tOO=cQf{vIWwDUGHbWI*u5tbix3d%* z%VJta@^;AG*65^~R%Omup+IR-QS(MN^vy2B3ZgE;W1WaZe8@v%Q$@6|4Cj5xrkwZQ zaY`vBg*ijj%;XHcPSt4Jpi`6XkX4>K8U29#1MYzj*DsmgxwB5#Ruh*G3v>jNfQ(8) zPh}+A5iRm1sCGz9QelWE2Kv!-;k)V3ADn^u9L~Bj{FKQ@w$&=}9k6Qr4Ni<*rX{1@ z%b$m-z=dyHC&Pl-Dohi%OgY)gCeRHkpS68E+Z7yY)@n}!&ZQ8YE$ z)0eDBQ<}EWgSIb+kb^mHk9Q+I5D5Mq26hU)SB0C_q8gWa+d{mY6yneBur9It6oafZ zgK-boTgp#yIbt^Zli*_Bymv|Foh8#jta(k4gN{ZaQ zt2y`o=oL=>3gr%zo(^O=x`xa|?2|1&i$QT@_KLYzS6^(XRURjwWxl=?2JZEq+3h%1 z{)#8&ebgl8J+r8a2F&x!P2HXLqP?=mjl;`g^l- zG)pn8r6vVGXGS8fxV?w->xcmMiVRB7G4|*fX+M8A9XB}zkDete9S59LHg|2zFtR?w z^B~sWcp6!b8=1rs4P^mNu0X+s4Vy>0;1`}iD@3)^TgAvM4y?9k51O>F!4)P#ty>Yf-q7kiHg|s zS?K3fG{aOaFke*%2Oo6XwJi<>jeI0h_dFJNjI>p?uCDJwnjuN9-0cE$^6hp>ase%v zsG&9W&n!X@UNf*2-YZjec4tYT<^rPL)!1eo+=^HrpbZ54-2ZMi04)O`_U%&D;L&7I z&E`V7YXan;zWESsh7I#x85hJN)_vABu5KzP{j3Ze*R}U$Q_002R5vHHQkWIU7PyZC7kZt46@?5_#Qt{vaER(T;zPz^hXhKdu^MK_K5D2G48vE zF_{+cH7hQ{S_jI|iHPIv!Dq1D)0KPC%{s!Cp4}n|L9wkXqt%R!X z_7X6J2i1nSJO4ta&kfMFkqL$Gr71WOq$WQrX_~D){$7zP2 zRu?!yC3wtzNLBa=qI$NO{|_NiGv{otBT2WHhePqReJA6h-;8|UWurRTqbN?e5iK`2 z%d3O}5ah%5vJCKw0aj6@MG`Hi%AF+_V& zGbZIl&M5TyR`se+x`}lMiseks9I92-Ln|0*aob6OOy~oe^4Rq0fY)6YzeeYSL$l5V zoYwnGvkY=Yccct}&;FU&U>ZdJMeT|DbT0txT_$At-dW>&##3a(|d6F41!Ii=GARt?F{wSuutDpwP`b~=1_Yc=n z33_IE;G>OKJ2qOic@_jD>hJ_T9b9^eyD3g^NG0g~6!#p>7!n$MH#75)99%J$sRyV1 zp?T3W4`-u{-*e5OKHY}-hWDS3bNY(j#EnisrvMHf{MqKm+;dXLVxVQym8VQ$ODSk4 z6u-^yuB1LDYvlIFt>5Hv_)+qZpfVXQd5Al}H`WNT-AeqrORyq1oV zmzVLM2Hjs7k@gO^a}H4*I-``Ve$k%6r_Yoqq$?(-A0^urHs7?&;j~Vq{epGKb^e~?uRbC{z1%_`6j!_`r7Hn&tlfz ze1p6azXhS!!0I^-rlVFxs+k73bKX6z;_H>@l~b6MZ2nZM{0Z^S%V^LJpBpo{KRSAY z6XWu<`!czC>I5Ij`n!85-ha?`nyEKirvLO)3yf(C(^n;Djj?HzzktMnRk4_!ChG#1XMRm zBGgLMpVZn&W*Fs!bZGyErggO$O!-(*e!^e!q7p3tpSnhlt1oe6PnE9)1M!qkW*3-? z5u4I<1e=iba{Q~7Z?mUxD#=f89ZQfVOlX*xTr_Kl48;bAbUJnn9VT4KmjC(upWlTN z!8d`AS2y!}QF4BkVQZPQ!ZddR#D#>2=HE;-A80j=r5+DIavnX_K!i^# z^v8LBzP@+@elD4MnZ1{+Z;wJ7pY$%6!}VT%KMc<3(nUQ@mjvGKs#Tx|2uhkrQLimoesEEy&v+CimQS?hh5CUF+nc!mnFX=pk+C_42>FjY+ zW1|Y(M-V)@b~L#@vv665^ykBsN}x+X`*0f@il^_mVZL^zM^aGA-Gcx>5$asbXDquB zq{h_|Cc~LTjpnmc%qqF#FabtV6%IVZ=-@=sU+8)TmpLCr)xY*B9S$~v$f~_y|h_du(wP*(Ze7tK4ge4vzV zOvCV5GqlIjiY75SQN#gOD6nKqC?3`3jrQEuK( zu_T(#y^_wOWoEOJw6{+CR}IzZmV6AXttfS3eNgTE+l=JspT`7*P0Jy{Z||jRM8I~t z_iu}#AhyOIE9G5@d#a7UmAb)wu`1lJnHvr6igEu#*!8E81kdwFHm0*TBk~G4`Hv&)ckR( z-Urar$eAepLWor3ZqD%RF0+SQaveS*n+)VxPBfm{}S9M*#vsb`9_bFm( z;QL>;;nv)l{CfzkKePWu@k*TTs|7XH_@*;g{vi>se`lmh z9N%M@MYq z{>t5D7$1){TxKEf8X!;TDHtxk$&uq4VXMJdYL$5Ol+K;q3a_6nzBsv3o+`6}(ESdZ`x zz$uBro?`Mh_a5;c0G^`6e^Yv0gK0$PIPRh5a_%2ixX*_06=0ZsByOAfu4YeqH$~rJ z%xTFptX9iq)5)>)Ts`aJ9LU|?Q6HagOAF`uGdP!JY&OTU63!|k=BnXeNq~T&s4)Y2 z((L#-{b7G4>79<-qgawg4bhOu*z=F;8rmO1U+5BR^5MbPn{9Jc*KA71NSA`R%3n11 z5zefXT?^Ms-5P`jr^On+^?Y+{P+|Y|NrYNva@vkZEe*1tcI$k0)4so`_t2V`fBdTP zOY0Z&$Vxt43FN$^4LZE0uAZX@>?u9-HP>$OdMv?2*XOCSO`e4*KElZtN9!UL)5~eb z{}xYMzocx73y{Soe^ykXqrO5B9#=ia>J*uBJe1wwtiP@ zyts{qH0a1;few8@luPg%pE;1iT(;$C7Td%dJsQgZjA{)mAxgrGEL5tAWyv_CGfI69 z9vW^b%U@>s; zig-p9c|wBfeUZy1Hl6!s(T-(ywUa2NF=*H(Hn+){WRCZb`hUzKfF#*(kbaKF&~Qj53gEG=C40fB`s4&J0n2 z`q)arj+zlqpLN`~_YDzcJS#P>hI7STa7!XpyVR&+=N7+8*cKFeM7RE#iW4Cvl~kQf zk1ZvE3emES@LM}5r8N{l6ArUSyDx=zA^e%G~T6Rg{J{M zrC;rowXHCo>q3w0rWECnw$^_X+vBJZ>PT9;_!fN-l$F7mO78OCXvNhSFS((&FI|Qs$+qBIZ~rcRsK_ykiz1?-=aihSk*~42Tf@zW3n$);6*aZqW+sQ zX=_iSQbGz-jt>2zJ$Y!*WImi?AH^aaGD5KjTCwV{sxVf*>CsahYEKVA`WEqI%Oq{l z9!DGpy)ojh`PAP_1{wA~OhNyRfWp4msD(;}f?_KQ08w~j_~0=m2f_BlmA^-C2@L66Zt>9|ECSk__!N0+oI4$Bcr+h({D8KPd@UQi? z94z}2H#o98j8*?Axs#bM>uCL<$g5t2$EUK0;N=P{{hD7o>MK_9;WFDdbGXF>N24wO zz2CV|RLWS5O&=j2pU~lAe#q(DRHq9>-|I6hj~;w=G=sMH4xqL3@v9^n^E@=6ncipa zfozrr|FHYH8(8pV{(|cL@cT(etYXkjQZw?$j(l`XF`RQhQpYuMm-fWSM)Rw)Tqq}3 zkPxD&y-y-9u1P`J{`6mM8nGda1dL77xk8pm8pNj)DA}$4&qf6u@yfn{Z5kAeZ&CcH zwK&wW`_n$aw7_1H!Lqm^*kv~XUb+l~))_VX>?CC*uH!aPjfrBJwydq*^*Zs6>e%SL zkdn7dSsnye-72Ym4tnGAb2x#rki5kB+qB^g_?bcg7~=@9!$E$#%s}@v^2FgO_{b5e zv#p3TEG}kiN=Zoy=)=TV#HJS~{f>&OS~up^d>6*&&BoJ5h?Za2k>C+RTkqONutXR~ zHPUSndrR0zx&q%j-qI)@sd2oL%>TWLr*d@F4l6O$p!!<%m$KWwz*@bhG^yc%1s{m>F#fv1Dq0AE>xI-~|> zY_7hk2=Q&xbLxfuDcmTYAgK|iVh76Ee+W^tO?h&X%b3f-fN>n`Ij|SxO%`h3b z%%4_(JL%bK{2(WhGWD+9Jk%3^P71wUDtGauV$U68lK$!UFFxRk0|h)PsY@japJROg zLs(QR^SM2gweP4xe{9R91rlRI4K{WWAg)8n&}EO8f|2K&chzz0*NpJu?MIs@%S;2# zZo;L^GaZB8FGK)@OWB`UUuKM@7RI`tf;dd{k%|us1~HRB-W2NfvtdCNw&schhZxis zBIh3t7yL5gTH=kyCUtnk5)*zFrWTl&%6_U&q%B-h4PJcNCk}tZh`(2ge_iu(_#@PW z^C(R8idG-X%Nt{W32TU^sGFxJa!}hVU|`EJca8ot?GML?!TqMvk>nuh%07>z$LW-V z*D103DBC%K{~?G&zG(X|{cJPrx%y)L7h091`B`!f!{n{9w$iVnCG<+E0ngAMp=$%< zBh-#dAyqF`PclC`C_!0-DzdETvceSK<&hX7%g70}|}HlDNapje9+ zQY{W~`8%c+k-0Zau^O&8F(i{0vSwVWJhcHp(D;VF4fB!kAuYD@-KPz6T3I|Wv zPt~v$0oMFqCH;QwXvYVDpmZdXKS5~*o?f1NTvEfa<3mAWEb9jrAhf3T10XxMXo4jy z{w$Ohmb_pdWQG|Yy~sAKNT7<#^73O3O|)Z08UmZ;S_dXPDtq}3k1oaBwOCnx&f1VB zY)7OAN3VAx0APA)2*?Vs?5X7D(2D}IT>@Iy&m6D?q%vK8;VD3zRSjUNe*yB|ogOa1 zBTM0EQpi|}L@JfJ0VIZx-7|-R&h%AWCi}r?p%aRPib7Ub1<63kGw%kQnSp0Y7s4Lk z4zvUwZ2?NB|80~DcsFp2)ku_lqsR61`3@T6u&oP#1A(HFH`QWh~%z37r%J zCx!S_KqO~%f|ybh8sWs?R~j_@G3;DXyUQo@#BHTp*y0%x+}lw)Ho+b5%8Y)mD^ z;V}Mp${+Cv-mu_6SJRWoce8u3J!L!Y)4mq7xC1dJc>E64X(>FnY7czSF^zvCs5{B3 zPjlFVf#uO}w+DPfw%tP&^ux`V2%cta`r;nZgWk6Lj%52hOmSYWKF+}f7iKe+51bf( z2kOEtBQ0*z`@xT?+7wstlkAF@*9F0J*T@H7KN>8(eQ7}#e(-VqsDi(k3;jV$^il{B zU6jVHl5M%7z+xkucYqtcV$r487UkKGb~GkWv)7nDc%nc5l?=`YXVmG` za+XP4NVR3kJ<+yjn^^fKu43rC7wD_!S0VAj2E* zvTX&Z4!Na-G#^20_RC95MC4iQw*Zw?6k71?v*(AVMu@u%#lOzXGc&B4q^fIM5wVk9 zw@bnHk3!E-=x^W``Arr92Q#ZMuN}~N=6xET;_J9fXq?J-g&|OJsf#%+~dA_}LLHX2xb# z19-|%^6({xZJ^X3_ediY@|o@8yD~KJz%W(z=C8A{q%Xl9pfFLI9wWzi%MG1*amO2$ z6BI$$>%JvjSd@lQP(jRWQ0sn!z-6mzu~@f~|&6o!uWxmTf=1UVgXMkli3Dzl*?CXGc&r|pEG=2Dp+m-)E*^o_{u)Y7N5Ua>A0GHiF^H7krtEAlF^)aS z{En!W7PO$&K5u61;gv)U&OykG>jgq(;Ch@2u%4KA$(=-F1caiEydKyZwdNeDdKL^c z5H`f(?$a5&Ts=~eth9Y~hW*nF^C#IwP>17_Zr?cO94G=@S!X znwfD&4Datv$VtV=^H%(6JbbkI5ByD!pgVfqf&|Cpp-WxJ1(dVuHnZiAJ zsw^R-qc+5)VK(#W#})Tmp_y`Ff1E%g!c0F9r>I`wGAGBplY#3*V$UZ;MfZ@~srPC1 zntTBk-tW7l#7ir1rkvdt#p8NA_Xm{_I&~6DRbC)IG zjV-OFOzAUc=_U7{wvRO85SL{DU`2Kft;Mvi=g_Lz zmw4uu4tomY!~~WnkGiP(BY(Q30;Q(&du4QQU$RRkY4uWo0-2VA$D%> zzfnkO6tE&55J%3a-F;II=r1~RRwLm2F_L!8cv||T30)WeRA3-_zCcor72NHA^CSHI z*%PJd#az{svRxTzuQeb}pc*N3!O>Y`s7ddj; z%OXCf)B5>ya0ie3759Z$N?B`5jt0s6xBRXtVC%ONO+?Ni zOEhffer3fIO;` zeIP#^;i*<7%RLOl!JlzSiyu36z$i)7fNvtALgj=U0DKvi(#jVBRSmK*57UYW<2U zA~&;?97i$)6o&W}$|)`=ge{!>-W*%w^3WFA!QA)qi$b-q|`i3?xMH|yB> zO?%Tcs8>b!o%V#NrR&%3VcJS^N~FCEL5`c>2&fqxrurX($iL(;$Dax5#Q2!rg5`^4 zXXxsI6lr2+EtS9C`+I_kC1Q^yrOiYg>Dy`4)wp+V5^BrNbYRX7IUjKhItj>g#YO7^ zeQ@4=_2l1`V3Tbz9i5+YFmvMk+CoeEj4ngn=ak7DnyPu^l)lzSn^u+l?Jw-Yy2wZA zu*bZg*pRnbHzL#-PLnAqX`&a%w>X62D1Mvrtz#A2)vg}(#w49}ssl1!6s;|9{zhdn z%x2M@@(mI?3D5{4gIcB{dM6s&_>>by^cy5Z)Ss>v38iF44>DD1ny=G+n6@CZ4!CQW z0#`TcneG)1>OS3;9T=I+4%7DqB@_hgwsFv5&1#peLzC9(>|9_CHL$eBK6}q2(j=dl+wg zygI%aQ%e}Nlin?Hxf`|*qiq>&M+i!DWu=Naj=Q8<>c8;(_z$5FK892t=xFYUf}POB zwbL(>f!eJEzBDk9$J~39`ZuaDERq?7zSQ1J)lMEWj4S+dhHs&%;p93&z*rG+Mu`Rr zw7JjK^;4Ftbkal%Rt#4u%ogsV^jw_qD$i6&S|ku074Ivo-M2|-a{;#@@H8(EuW8m8 zY6krnxmEJZiQZK@Dq^VXYajYBW!*2$w6#;NQf>2tO;S%1U^s|5t=TB6IX57&`?FOWhDzb>p1b0k*X-HiLYy=bs{8<$An%k;*<7MpXEW?MH=+N9NeNEz()I^hA*5XT{h#KY4i1LLKgP~NyY1f z8Nwu7m+uNW?OA}$IavuxX>#;VMN3`Yo`YDu7BeMCNRWj2-8F|oqD$yj*KSm@=eq;* z+%KU*vDF~OIxM`KnlOiS?VlBSX<#615v!|+RXj!;f6dm9BCf1;j#duyuEO^-!pU^C ztzGJ`ZWIwYMqQ^-F%$+w4*AdnY(3+LW2L=be7ub(4lC^Tt{?u<@)`7M{SBIiJaHRh z3H&<;nW>#WKdE^j?pUsv;Va3lo_McINgm=Z0 z*unyBlL4jhR?<}XLyz0sE)trG9FMjb&0iKpA}?%`M82h*-Bp--^F6OV)Lit0GzM~s z-qM;}%OoIr9rXVC=DZ5v?_`^)L=#{L_zvUA{~>6HIKN$&B$wU4&C6K|jA<)!G!6-m zjgd~t`4o5=q`JfvJ}dq#wq*Ai$G!|j;Vm1{tmz`R2L}eZ0%7Gb;7jdQ!sO4Pa?0Q$ zB90FHUc-$im}pi{-`ieDVy%tfNZhoOS}^x$@-|6P=bDLvo5C{w>Wy(ZDce|#=bT_W zB0WTzb5`p)&aTAY@&F3sX0DcQdi6l7TD-ZTj6X`s+est%dHrt>o%n-wjYbxXaqDVs z7GGqn!fF<;gzRQ^ctP!$gOWh!o(Bg$Rw>q2pmCf4?BrN(VdqwC$4bfoYU&Q~b)Z4_uigUpydQcAfo~$su(JYnR!>>6?O%hB z2th_tuY5!Jg*|&>lf?kZq;_b6ry9-h)V^ayxN#9_QH8`yd@sE*s>t;HD2|tLMk1Rx zmAMazIYdD*nU&ooOn3|^wlxkOTKYX+ZrX~INUL;lPTNdgj=}(#A+in)+eHg9;tF7v zzy2fF|6?m?)$MddcJAM|$+q$tsvh$a&L{-~5Hz1u;lh7Jg>Aqi>%mQBuK@VC5TPK_ zsUmDZP0#}Xm=}7yh`(wIM-zXSq-)`mwKhk>=2;M!l4`tjH)ReGMgQgWe8%{qZUY=x zVu2vV`9SA^XTpcUxCb@EYSpgqB_v;H1g)b54aY`G>Ib_tqVf>*a!(AO({o9`9z0{<;D;3LqNe; z$xb0weW~DO9nXaE(LGdwMWK^MeDsF&;2@h^2j_)^Ut&EWDdZ*lZu~_OYu=1Mi2TsI zp*2Ep`0@+6i?|tylx)(aLhfoTV}%y*UdAzxoejoxM*G?MpUiM9E{^yP;GMxd$w(Y- zIDEi_*Vt;3I&NCv<|<_?wm?ElaCgiPq#Ti7mG{SQ%PsJGRZq!^n)^cGlWN?auECyq z#N8P{oQlww2J;5ZqB>(P%E*WK07WK@O5o4?x@383=a=*tacPdT{UQK-l$l$%p z@{>})%nDc4SP-IeqVFs!xFT0x4#hBbn_OAmnWZ?QF@G;RdE&+A!La0kI`D33LkDL? zeR@JeZzO&TCJ`;b18SAGluhWmbdc;V+nzNUUclCfuPA(2ODCk^Crd#@QX~PO)lTza~)s_+{YV_~+f@JZpV0HCD)BGy7^rHVEs0)uC zB&Sq6Oto&|FNh2M#BLKqQqMo|mGL4_NoWR*KV7C(fWu|ZDqj4}m?dhAODlvp0$Y~s zRQl4A{pDrfdrPU%Z{KO#&82~QcEVZnCE+}KUS77{N?&_J_+njDFqL+wcCF>3>+sfa zW(MEPw8hjz`tUW{VIx0VXT!m*Fha9>!iaC-O3vta5j2e4v*`!B40N>n{~?5|iJoC? zK4Ba3)UVS~EPJ@PH#3NF0Z}zU-#>X_KAFLTo*29{J~wtF zK{hzB@_0th}C(Nc(j+?P845^&tpJW;X5GkgIGkSgZd*jd($Zd<-X} zPh_3-Bc%D1Xi8?q^O6DoRXI{ep>h>YJ?;YRrsB}^*V5Vzf?-s57&@o> z_?8B)Hb1wNPOW$BQNqiozOdiphCIilM(B_}86dlgzWJf&^mPu6=+z6){ZCxuOfUuF zv!h~29+&6(7DI@4@{C2gGO~NB#JP2W&D+NTx{z|yNH}DGX*Gy+())8+s_b~q{v}qh zBV=6hnhl<+c+DNkS zwXG{6UQ;E>Tg!%Fr=5+M9qi~(pB{(94Q_pc6C=cKP+6>UIY!gTrZU-~_UbBOKQTIJ z<^64&6)u!5sX5IG#6hF_e)W)U?w$48QKxaMawYea#>`Sz0Qn*kH)y)uB_%{jUF)xa zp?kld?s8M%(fPp}`OQX6O*t%9=`pvvuIblnLn%-q?^k@IUW1oB^Iugc@_#L$8a^7a z9IiPEvD9P&F-eufM?aP#I``accJnV{1^3}{l@cbHYKED|B-j9WUoHmHkdj2}3Fc3) zyjE*-i_aNjpeFzG*O@ddr{(BpfLL%KXmRk{c0JbB9w2|#_evPQ~{53 zVRx`v#_;gPBj>G-WX%F4oi2$`ZMELoyKcPsm>LWnkR3PecPQ;GpiKfPC$w!0&8~WW zgNW{-)L}4E2f^dpcCejPkx1!Ksnw?Z-R)qK0Hn!a_w58zw{>FHlsK2L6mEo7#8W$3 z1+&&ZA>-3oN!lH)$%8i;l^{Jq@Ad;5_j?eRo9`P8)s(c_h3swC^ZV~fbTYHP5X7;q zD<5tPl@EXKzB3sIB&rmeQTLLv1`3|{3rq(n!nK1QPH9gHV-(vw|6nKGp9%iuc9QuR zMQI`p&@*}tWD)!Wx5D_s)}_A9n>*_A~%!l2Lz`fv6B zn&E^l8K5?wg)M?lvdMVaxs~z_|24y84F79>?ezSZ@(n3S?eu&}?En-`x^*w%8i@&= zS*%=!Gg&guhzn9Tl}`p6);_};nXQI{Cuw>Q2&ZT$&p!9E(-cl6=f$ULc;L&_vR1V` zzPwCcx2UOGZG%na+Qr&cpGZ04e&+Qr4BRcZ0)v%aF5863OHoKuIMKRi6KH+Oxdius zf?dwnp}%3*CD_9a%=7oDgGNcJKJ#@M_HYXq{tKAdf^--t+L;4oIq~1aU`wDH@26B3 zn-BvL3a-^X0N_p?5W};o7I4K^Og1FSTCMwma^A2$s)|2T9DZMT1Ve~QHKl0bNzXbD zx-UT5A$0v)RYXFmi5j?lQ&l8+{tvpS=}bU~s3W!hUz@#(voLK(#UL?0>L~$5<)ND` zf}TmmE@jogOvO|FAw(|%RCQ&T+$9z*K^6iGf2#kC@Y}isyi+xfs+n>E0Tz%l zeL*~jV@^n0PBSD%DLu_^LCiCTXcOykL83#6+1T&Jq!(lSJC`b zgmeMZ)~_-`Ml$9S6N~E&ud;o-;|8>dJ}YenAyx0urVU!{!GElJ*z@}DqhMN%Z;7Q< z!TSbY#6)+OePi4NmfSq%@^)@Fz zoaSCA5w*gYieh3ex4Ql6pL&gbIh9dL_ij24vt76mgJ|`2>Y9oK8pK_yhuyFf2z9i8 zOR&ka_fMT9{uYWT|NgijGNRXrh{vZ4^^feCCW>Jl)&P zO7+9;a}<$w|Fn1%)rre*>Q$wi`NXYMvOb-zHE8h?~c*!kWwr!YNe9ZZgK`=jzx^Ux(XCceRoKI@^fbh0sAB z1@%>It}HkRCzBQ;3Lbk*FUj8(QnFhO85^@jRAfLHd648t4AVvS6PA3byW?)5duG8k zkA&yWn^sGLZyI(}=u1#`sTjW|Ab&uh^g7Qw`H@5;$Ka{f@d~lxl$97}cC-1$vyt-q zxtRmuR8$Zxc0FH3*d`A@lB2q%-V1Q3Eg>`K+#=KSTT%5UVQptwwYv4 zw-Ef9@4MZoUwXH(L+?ly3+eT(%Dw5#TffOq`r)BE*I<7o>Z;bDKHucg$nx^aESp%B z0Vg-VUAh9=stGs{L1g>P`c6lY=(Cme19J*7=}v3`l~+#JhvrnHID=tm5RoUJ%L&H2 z`HNH17Bi{-a%$}c&7rIP(c3+d>Thk6_Ssc_&#V5PtyB7Y89OG6UgymnHELYhU_vo} zQRW6U8BFS00Jxn#E2h8&tR18hf)Vpb z{&r)8e3+V#R%Y(_xyfC_6C2#SgFk?Wt%6$Hkiw|z$(x~>?8>sCTzZ;jtW{2per>?( zf7lo&Vo^J1f#;bhjD>D1j#zlbwXAAx&~%C;x&eQL5D;tkx~RPGU?(rE>1+s}*4y())<2x3ovs8e8?pd{h-{R7@nzbATN4 z=wN>#YnI2$_^c3IQdsgn@X6n;a@lDSc~@O`|Dnf%KQIuK11HFeJK297^rtwMCB5`E z)ihMaU~Y8sr9@S#G=Cbkku*iT-2P8ds2NZqa4ONy|4lsXKT^LeEfM}cm_6w7g z=#=YK-yIk$h6B>8v_J|hQNct`eZ^S7RT{?2mdDO~MR0C;84iIc&KMBpkHs8gGK z?Inl#`crQ2yljt|Qe{YX#+Z}e)ra5}ek&b$scY+MT-?E?(QBOTHK36AW+y=`kzq9=Vj0uD}f~nKV!do-{&6oCqMOP93wh(_IQY2%X#wc=Z zFrVahSFJxVL#&10ueI&fXb0fu`+w^9o2115yL`iM=JD{GdHn&_|5WfRZ+>4OrYUM3 zW&^{4nl*db0eL4ba+kU88`Pm(BScfK1d8pw`nY6uk2I_ohD7c+!Ag@PyUr7%lnR`J zRAAY~hq5}NFG9ngy*In}T|B!tJIp=InuVGtRs!5TSc6b-l}TGkZ92K4lItrvg`hle z#JL-`&{#|sTpk~?bAia4{^+#kfgk9_lQ>O+@cnZH>a4EW zk&(N8OvJd$IM~z`&akRv-$iMb(Q*LBmrMV*)4JlIoxj~3WU)9#`v|GIw&5LH2x!dVTx+U1~X@m8Zp&G!5j~rW&m9qq} z2-Oa7+=}>Z^1V~}j?(iNapt;_O5H9U+8`WDvzF1qZ?{RcMp!ETV242IAU#N3=O4ljF5LD{f5P)7M=OyUlaJ`a4M#R z;_h8&KzCW3RIV;icA2MlQ2G2|pLnVPsoSj0%Mps#C9MIOI+x#AZaeAooW5EKOP1%Q;7RtFqDxQD=UP2NJXA|cGnu<~ZP`(6{li`w5Y9Kg2sY1j_>e%Yh(T=X! zwQK&=M|cGeLX28gi_Y@3c!f>UK1%{qM5TjMS70%NI|`lT!k=?la%VD)znjC(Tyt(P z%DdydGYEw@a+}_GCGy2oEmtBKL+_OSUSuN5E%)iJ(syR>W>>^rg9k%duRbblxJ?wd@_!n1^i;zXe-Otih4In ztX@!HzTLN@zDFF_#>YZ0iwOW!V_>L-`D}9OEal0gBLsY(%vt)4uIv5dVNA zdmTidrVaLr#y2x#Yb%}aPncCnO^AGuoN~Xf6RBL0`0hb{2+$b%^6ZiwC`*W()0QAo zg&}oR<=++DoO|@PkU^@>v(C7Av5ESC;vq%6yJ&VQm0F$N;B*ku73~ngEOpf2D)wXX zMWtZ(yC^$Ny1*yXruX(Bmwr=XsBJt_9D?TO4hzMvZz8QtZ-bLLB2ODsBW0vq^A4wW zp^=gwODrh`KR+7%oIiQA8|Z+*whQalzgq~Bj3i`BqfQTUk{@z*u%%F=KhiFOr{xml za+iqB3t|e=B^r4JgFZW}XW78+dsmaU*vP7t)1_=jiKkk1>-tA-#<-e*=ybXw6xx{c zrNL`_F*(Vwd>`^eWQK;^t zLHjomhTuQg4&4&wzqE3cgxuCWNXdVHU$`9?PpVJ7>F3B}T7~)LzB$3XX4$`@^3fi5 zFOP;+{Sk}m*?!J)GzaOGrUKCUL5}6tRS$>TT+dt$YdZ*-vThKU3-9Oe6`+Sw?D4tW z*zdcpzHykq4YDfb7DY*h&qyF%>ynU20-#?0ZX%>8=6Cu!0|6o{mCMeK#Glr;LSkIv z-jfeuJ>gO;*D62m3Nj1n^5M_yW3wZI8j%8J&Rc}rqfusKyHsLmw9>W81fWD&r32-N zu7kSqoWp8EXD_@Vm9-7$vms9gpEw zJB7BrR$@u`_oLDko>RC_j4P?03(Gh?I;m>ReJ4sgVxFO)_&w;tv%D*HHNV0-eX)bZ zefVPFHVEx^#X=;i2`fk?WVq%phq_w0w&fWig9cw67BTl$t<>ppMzToJaOw-ZQt*c7 zo~tb{z820RoRGTK5?l#^HSBCltb7|)J~zn`@>IYxje6p4{|Ast6f(Y@r-s)b{?~yh zvPpdZSo3^PvHI_ujO%< z&!F~ZBos)i(8Q9OG8`zj-cXlNr_38UA`=mmB4PUdReOz3oDXD=)><-pSYmJi{HNeC9G@T(Ec605*CyV z9Qy5RQ$&?eV4*_3%lER+XpP6LMD{jXpUaDTXuf2UJ&mqfR>urnrNE@Y8e&vU=8CQ^ zD9;oi#xxU7tdw>&Q|oFQ)RT7y7N3`_nirmc7zaAsGEGhG5*~cID^#nUR*hPD%h^$e zwr!8hMAWj;Fq(yvVga31gXQMn%PY+A=c{0*dr7~I+7{9@p~W#ye=|P%@XA~)*-LI8 z%9k82%AwGMP)CW6VqD7{5xA%9GnE<)hHSVPiHnF9gdw-H>;k{o-%}njhh(OvdHa$3 zjGTKwR}qPS-6jK+ zSWAt2O)9FkGYoVo$HQo%?OU8+w&fI(rI30bXh{0JiSs?|j!jUMo9e`urjFNypp)28 zn!Pdj=D{c4eu_ssBK0a%GGAn|=#x)Uyr7z}lsQPt`rMq?po*ck0bjlE_NB2}3HVwF zH}1Z{$8C`br}`}%pUp$;V1fBraYm-uqO@MoonQ|tv6qeqACvYQ$^%r|7yhKd6K0^f zdDf?@HDr}qGw(&mA*e*J|qStQId256t@ zc2q%CQfOPp4&Ko#SVcWIHo9YLg2tqZPjVmC?)Y26RQ09Qe8bMTJBcI$`g#ot2 zdz5*AuHW7;W;%LCdRwW~$Ju!(n#A;y|{5rf6D5-CdDe(*K>m=e(L zS=Yx-^f!_NhWk78RpoD0g>erODr6w$4%f&&|1Bn9j|M^4@D~QgS`v(o_gHEME$!(Z zIno3wf`U{yrjRZeL!?hG@qos|RpMT5ohD`6BKtSx?TYYtEFHG>gs`b8RmM_fIF9bW z_vrqV$Hl8}o0`~o?VqXDO_Vod;c|Uu&OWFp&|dh}mvwmv+2@^#Xu-_f>6T7Uzmlzj zBn8}&$4QE-Gf>HjqrFKJhVNw>B|8u;2_M_V<_FHLJX`(J zo#i{$?7ib+t-nd3T}IN3)*JU_5MZIm_07)H6r}a~i1jImO)xN8k$kT+sWz(?ErYFY z&&^Vw7}h>e0jBKEC#|eQ){pC9c=wCrsgbVPBJ$)pCV)g|Q@-ww*Y+sOQY6r`#(;q5H#rDlwi)s98^iU%-^8 zq}hV|p)c6~Q;?v2cN#-zDzfj|7Ca&?oMY$wsI>GCPE130%xa7)yYvw6@*L*kaNibH z9nB13IKQcta^j9rU;J)ay=|`3r;74aL1d|>OH!*4W|F&W;xl%ybaK#(=GFe*f!tqU zOm)Muq`?8<@a6aA@sK}x{dC}5X7fylN)Sq>D<6!d(&Jh=xMW&flWY%Q-ouvyK!Ifl zO>EdOt`#-)XHeI$!6bQnQwv$%^a!ZsRhYKyjDplLyub1@ia$;-M5ZQ|xgMr3b&jg$ z3@o*rnf{sifax>AOL}8>kx?~o-Y^hcgj|-jqq=ArtisBMr?a;aTPl(=TKJ)MIqqDt zT0J3c+!V!t5;p>&U{O7>juBd?5bi|9k|AxX)gsG^Kys=TavoZ|<{|(%gtFx7+)far z{?U1DA5759?6Aw^xvU7ZmK;1$S#%>5OKlj#qmvG>rR=ii2N!PPSO$5!T*p~GXHWeD z5S}VI$s!(@s(GlMy_|-tvg1X2{sSmEz;0i^y7{#dt!m2B%nTYmYE|Hn3yS<;M_gEt z!)6;{!W?*3xn}tiP{2jXB_INlmz7Gb`(GBI(-%}%`4P(^+?TO=m@bJlLs38*^+nUp z^=`d=ejggB^z`YpT4big>S%5zs67An0$AlC>TG!jMOXUm^DyYI^jC`7`&;D}c}Lmg zQ$NykQF#B<1K22?O6MaTbD%?A>e1Y!{GF+bvyvKc=nxi zSxgGn+lD1zX>S@5!&hQrz2&y3t;3vrRZvU!s~a6*Wt}VFqne(Y@~o&Q`E=K~X>x;V zI1jJ{X!Z3mO+)J6;z<&F&l1`kRE|IqMxkuf6~?6=9p%Zdl28z#sBQlFe=as9xLL=?oKu{7_p$a!FG#T0H=X{0@?c?wz4GY zAI6(=E0%~OYKd*9zA%tLARq++88U;hi^vs)yfsoRJo7Y8wT76L?a!NB_4}>^#``Wf zziIbf>svjNt5@tougpZUvLPDTbzQ=e5;5CbY)%!mI}af)+4brXgYQC;lH}DFU!f^oBt9^_%R@N4s@3-$ z#ZqLzGs~%UKn@Oe6R>W4c|PeTWWCiUKY9{-?+=+EBA77#v$hr%k6fp`>UKG=p+VLf zSTou_-(3$&!%~47UaITYngrcg14k2c)p4&kgg#s}qp{}c-&vN%*ea`vZ6=bhO zzC~ct33$kM%Z$+#<)6$;Q3=`PN0=6(eLB2e4(QQY38-zFy(_O=$?a}dAK`Q7js8nt zx!lCeu#95mO0jhHD;vlMEO3YfA2e~7dicJfEkFBw?v@4*C3j2;lA1W^7=0N4T0PCxc}c&|%WO+f`<)gM&`iPrkKwe9q*O+s zvYa);>QMS~vuR>6g^328`|O5p&%cfgtkbPZaV)@^X?XO#DmN^(b4B0-*X(ddwtnN% zTH5h8c$+W0DW96N#lAL$?iu7Ds(N;*0%?oYP1#a$`+14+GLzBo)$8M0E zp{Yqkvv>TO@5G)=wUmrDg{Ib_%-A2fa(>{LvBxT1vM2P=4V@h64>D*YGT5}_Y*f_U zr%{LeoP>AJ)8VX8o_GN>EACa+gOt6iZJOH%tk$0G`p;G$;agwF`Dc4jd3PU!80bpw zrQ17Q#IqUeJ#X2N6FJN>R&PRB{Xfaw*J&EeKWV{bnec`ViQtmk5$zvKZ)6!wn`9L zF7%43ST)J&@%Tb?-$v-D3)NKdR(myscPL^ZsRT`3`rT`ubZv$MaVHLM;+30egEl6f zCCQ4wHNgiA)r7fK4}+^o4^rPie5d}>a?HJcWR?@F;R^wnLEGQRya0}f8SFQP7&_PW zt>JaKP}?8$ijs`sF+k(++2`Ro;A9t4=O3A>1$%rVGFVeybSdSvPnncP10qKt zky)a>4?KIhxbWQMWPW^B_-gwGt@7oig?-enTTpo5ctS}Hk^f{vzwRSq@z_XAPcIljog)sX&7=$g*Z*Asa|fIgnxa#A04 zDTum+g;`{(j4{WmCdZSjqSLuTC;(@W5b=gKee87tUMtBrPH~1#&k>u)?J_eNp2DX0 zwKOC-*eclN-rQNGBAAl+sAWFGBFTNh;0(OcmorY|)~LJS@C`bFhHx&^O>sU;3ymPM zM#IZxLQ<(#=?B?c7{8VPBm_k8>iaGROpAtx@yc^lk+Hh^J_@@xD{hfhXnuA);qy7o z7kx+R7K9fDnul!uB9yq)6L@89tk&$OX>>q@1>*=GUS)u%B;si>zS|ayggSPp;EPII zPAjtjw%0=?W6;tMd|f}CAPzhgMpc~vl*AW^N1p>V+rXE!mAy<38u^e_*T_~c+de|4;Omw^Gxtb+icxWRgT!DRosblS&i^q$( z=fsOme8o2 z|FsNmd+2A#)1qjz?R@bB%i0A|GrZ>DGOLVT5LjJiO~E$RvdO6%WaPQjMv0OjAHUOg%t=V~`{FNu!4iA0V_Vzw3@>?Z= zUaB2vT3)`JqufxZzry|wrtZ1&VkVx3T40hLCE?>?c3@o7I8*%tINNJj`RbQ_In|Hs z6gPhNIP;-C$PY^k`PHfohRiSyS7}s7WKikl54$FmM$E$WNoX)?VCVk;vz^z3E5dMo z00%jPn5-qX;&KUs#f_|nBUX+e8HPQ5;)htdY!&DS`RM73-dvPn7X)wO|4ZjtC5T{6iH3jbvvygtH35w+0I97>p^ZR{@qfBdJV`q2)*xc>Hkjip)1p^@bI!&Rx3b}QF$*dtK))Hx&aWVUf&6>oJkmZ6aN=G#>)Mzqvdjy&A{?-L> z#cC{-6)B&c(LO2fdkr0aUWVc;5B_W|3CSRq;6V8p3AI;Yls2u8IG1QxqxXT{V)whG z%OgvF30$TXkGOpC`GiecicYoqnnguTs}wgCNHv~&_>`FR_-;!q`;Ul-qbLum@{QbV zndvsZt?xwNRk^@@vjvV${GHIK8S8J1@bcP|3u&{Z=9O)NT(BI=!1VrP?)N6#7Nm^a z@@#1V&>zXy4Gb6PcP`(>^nR%gdQvXF69thBrH~I?P7=B0b$XE>Y@l0uWs>ET; zMO|K%e|_mGqS!Beu3Zn=2O=IJDh?O@9@XDNeN;+}Yduy;5whRs5FeUPPfD2wO7EQR z`5>p_?;_G$89n>4Q9HJ3h+b4!>0XF5a;wx*DZ^I-2Ob$695{`I<%}k-1a$p2zF5n9 z7pk<@`6X>j3k&U*;bn_2rBU(D=AsbYh0m@|9*p#Cr7K?v&06rV=`%A4>8Xk1k>g-m zqBC%~G*x_(P8#RuZ7DF+Qajh+1a+Sqcr`6dm0&dGJ<#xXhq}UDFrQ+dd#odJq zjuZ_Ya3N;~9UkY$w{WICVgUImC+&n-wUzh9m3faYwfMpH{}z4y5e zj*lOs*K##QEX+*uQY%Qy)EPbIn4Zk@y>Wzq8RCTaR7{zPYcHtz4h(r3&6f9WsPEl= zHW??>m5>xKFI{wCG)b+_C=-x-=S}OpCUw(K$p3-VhrsT1go^7bWn{Z3KK@KVBqOq9 zhZ$hqXAI(6hETH?3BLjZA6mn5gt=eR#2|w?qhx|oysl#XUBjW2YMNTAh#D09Cn0v7 zRxu_$qom^WH2SUKlP~Tn!1z6l_R#~a204yOvuDYQQD5w|ud=@s8IhRq&SM;A+$W9f zt=`-*kq`Isk+j+h&Jvo;7^bV$&Wheu-bL7B2kc=dAR=t|CF`eaOxD6Bu1N|+y~AgrgMG56=@Li)aXkB}p=8~jtdh8(C8Jjl zYR4otIzyzvi;1ZABog#|l5xJj^1T;ksOBbv=tDlSlI&IiyEc+m?B6yUD$NQ)mIS4b zQ)K>(J__TIlTJ3wj$f-68>*v@=M%=$1w3pVx@`0IOgVa_XxM`ZRwLh1OoZc5#ib@b zdDvBLZGG1gL3D!GoaJ#(l`GkEX!^G3#5XkHTLe?#laQz;y?Ddvpw@Gc^a%yY;i>HE zB6_8Pcs|rp-C6Xr=X*bQ1|j2#a}y`d4Liz#e*hZQUYATI;_yp2n!$FQePNvXhfbmQ zLF(o(XVl-p(T7LlhoQ`$uQYp)$2<>Nl{&p^+=BXQq7wSJ43R%RrqSA{PIY+^-1~9> zCeh75Qapz5ndiw8Om=@d4#xxsm2LJ#F+F>{E0-`#iblR}!XnZtZzG}(!s!l`Iw^8D z?J=4UG+m}$9JAT)dwDEZcGhNN=#g6s>$3-|F)gG_jf&?gzU7^zky(kUU&|Oj9XTBW z$n5<%hmHNx*%1~?Hk87Prr>sgA_%#NE<6tecm;66F?{}x%~-rVS_frG(UrgXM{O)Pvl=m9xE@bJUp?Cm$<%r6cbGQb49*bKZlq`4n8Z^tkG6-=&71bzRBO z)1-7>edhRG#8w8fgz@pG09EO+aE$Udp_3h^%DDtxT6nTC6L`(CG@G=2^4ORuhrKA? zyuXZ&fTe}&haOe5~l>WAT$0BHgQPkKO=vr!OAc&S3cuP)= zYDsC?*3uxnlZwLK|AGBN>3k0sBF{Mp)~wOv-cO={`t?axy3An@J3r{T}C zFS6!Vs1(>wGEd}PymjWxQlY!!X6q}7+E8@mcg4P^R9J8o)Sddg$+~wZ$l|%7AhKNP z>(8M2y0D>W7K>2?SDZxb>0syb^1cN@_Opo_N#%%wQPLwJJFG ziCQ>))nV0@MTam+Dh3XG2uXE2LyyI4RFZjOcl!q*An(m>H^sJdPyh52BYXgt^<2aL z&kw0%0iN?hFqaba9{@N~+8IoCBg*vZ^sMK6AE37^A6~RR(AI?YTK?>d$I?|`bGtvq zbKByc+7{HCR|^a9Tip~fkMwt}W9Yhx@YSom|HIfQi}dDhz@u{Gl{yU4Lb(a^3uS=- z>8c(A7o*M-04}eS0vQ+ljrlq5RclK$4{`j@`4d8T{J(#dZt28xav}&Ngz+KNrG=)U z0~_*tL*!p9Bcx(qZi|3jTqU8tZa{`88r{di0npMPyE+4ZWS@V4u+mL9FwLEgFTC#c z?D`p3U|$&l3$Tnba?ZL<_G>ME{r1%n_E6-aV7gHLPRh#y724 z{ln7r>q&FgMFk&hHkC5MZ5#@yy)<(rt_c%moBkM%r5@Q+A-;?uEZvHXTYfebvjwiX zK$_fx`XW`TNBvtq<5&`V6NerYd@!nCK!*9z06rR#V1G+7qTRu$kVe*bknj4q?QO>H z#|AGm3=iqPL4sRGccSn%2K+THf2mebCsm2*0pWlbG&zGvpKxT^C^6 zrDo85gI=xtYZI2(inohjV%@CLv$mHDb&c6PhC8*aG zColxwB8M+CfER69GZDt#QIn@~BKv?@Y8brFn#8`IB{FFn`AcIAW49*k&xyF}H@yoi z>n8HCg^DVo`JanXwN5$h5eM;4)$=7YnL;kUme8q0emsB|2}`Us^a~=;Hv(^GibVD^ z&YsuDXNFTmIitRflC=c+adDn1lNz~@pEkF?LF~Jh=zd7rn8bd--Fjd2D5zonQ?nq$ zwT?)>9@sW12jx8(gIDG4Vkin@V>Bugm?IuD%=~XGYq{1IyEk-ai9V zn6krn)Y71Q*m6nsSFyJYC(q%cA0tBroyQmY$KpIMxsR5Q_Q>5i_Y*igH5LZcO7+ge zGlCpw@M^=gueon9<6vJ_e)07Gb-S}~S!~J|Q)kI9Q6;eYrO%`ho&zKp zg$PfIMmH5K52KDy(Op=qCP=@I;Orr9gq|J!PhrX7_tI-_8R z`nsx^A;SW&5M@2>kGLXtDIqJZ4%f=P7S*0Q_;PSYPx=t5J*PXbOqSl^VhV4@dSCtO zdmM&E?=I^a1wT5hJaqJQDOdimh%ijCR8@fEd>N$ck*niNen-4wR@c<6C3IP#_)4 zVh6(2q>5Gktx~nXx+itYn#T?A6;&M(=-^2x*S2p~5+1?U+Ve_@ZO(UNGu>V$?&BJc z?z~8&zaeDsE{>YU`1p`;+$*{8Ny}9U*$eM0aT$8{ns(clbf%iiVY+>9vC8I+?7;=r z1o*a1niEl<_?%@TEZB?clWclf=WRlUeY&fJo+?5QMDIEKAHa+wViF^+^x@A7{Q@>P zMl+ym>3Qx^#VOM-u$c=FecD{^YU&Nr`g}=gm|VNS5#RQs{iFfqALiiZVn1K^*H4uw zGaAN(^g9&k_j$a;XL%2;=xPrT>V6H=kP*JE1Rbe!ZRRD-j`<3)>o>ZBE?_$h>LN+^%Z=52@}x&PSfU+l}p2+f{*y zq@i{*0bd;Q%v6~c=xol^wMgu1#-je#ZnRT`@Q!dAnuKGyGgt`On;PYMHdbaB*LgXx zVaIc31Hu+$ddmME^+`7K3xw*?%+g%usp(L26P&7re5>C$Y264*RV>xc(Na0ERS(O? z@DJZW(BNm0i8Mj(e&Iz*d^A@>dV7ZhS-|rF3oT#@_5D|qG^?OHa zlxJ!u$QanktoAv?65wh>Dc^8v5Qnm$Az?UN%FAC4L4-eTzLH}AgsnNV>~)~d6;;Kx zeEIkp(nnM8!r9E{Cd^uGqJK@^&n-NOHZ8kVQdRc&nKmyb`N!76wNr;HIS&`~1Y&}T zf!H(A+AIiz!-A%6eye-!Y;e^)Rlg5-VgsnmUn}ak8G#q;x_tN@-|GsACT~Zjma=fG zOvjbJGo|18eYaq4gg;pumpQJM#c-MdAQXLLk$p?ev^(z?Bms-7@| zr=a@~-E0_{OAfx_tXI`{n%f34W*@e>2%PR3oiCsgvT^h_4=}0ZSL@j)A>v&;n~h~I8T+Y=4R3LNd4D4eOkY_B`>}#G@eI{xad3M zYjdssU$nTFZ?|f|9v(<@Zs_c7>}hVWJx0u{!IgHV*4RN_L&$UO+G{QSJv(c3^`oM`g`?0 z*0%biNeNuNk-SVD-n^TLuhRSO1uQuAi|d=fCcWe`4#Oxcp;6lgdlHf%2(C&qD(+!I zCnbpsn+=gA+^U%9JZma0>^bL%$P}rkwB@fX%s9CIT_h0NIle?`5BY z?MaNVm~P1+9=!jlHVrLmb|hXT&PfJn^=2@MN=|o!m;)r$RP3Xd+WEs}7p)jAVu=u> z=f?0txGi~b!iTQq&jEI0G|LvaJ}Z$T--5e`m>9*UvguuRxd31UVsxp+Il^E2Ni6$7 z{7kiw!ferZ@@gS=h%p|DC&2|FH^VVpqsXc|i@8!WlIN1>T8De>r)vh)V*vt_LkZzr zBux$Gt1&U~?+BYfc}YQ|BfwXM#IiVUgco5dZ3$s&kKOtUA-vOVFwZ%`Vg4xqeb4Vn&Gm>+MnfPMIs1ITHv%RVUp*kZ%yx+TIn>n ztT|Jzab0Vf@{WW>6TcH{Zy~X}%8=wix^>_i!b+9kW&PWsVt-qL%#0ac1rpd(l4Z+M zLVptiFTsw-6k!oce%e(%T)Xvs`{HA$sBarbQGeW;{T6>Cn~GcYHkRY22LKf8qx|?> zhg#8_L2qV}Ic0!OfaotMcLi75eeLKZ-Mmo|a7Z=j zNb`N~tDMK8H&Cxdt(PH)O7Vb>jS8u&W;8*6E{3M5h++={e_ILpJ2ho{kl zMZ5N;-a5*DQ2Q?YIqVz_B$SLlaW>xPCejscA?zYIo}xB6Y)IDE*WsD}0D9iX0fUTR zc5buyk-tQ#`x1sXhYsdkm)xtM=0f(K~>o?zHDq#BMCv^mH$go4No${skmk7jZ*51)SdAd z(v)Dy3M4^r$)m|*Jc@v8<*9&{s&k)%op?a&Sc#aWuo~s@go-R zcc9dcAT(-b?N0CgEQJemS4Ye5;_;5@33ctq50G^I5cO%L3F)&dM*%@2pAv+OxfOUk z;vXQDkC(+-&sji2abyLxp}FHcPEJi?G|m`P+gsn1jVe5U&<*5N7k&71a`;6{Pb5J* z*7zobNN}L>`kTcJl>*bjVh_*+kAlsg5-*k+?5ey+I|90Sw1YpFTjaR6#eQC#=E}5> zeVgj(0$E1Z3-~UYEa96^qM1LO;`)f*e7oz~&t4(^`c|bpFgY_ZkHONGP!`(%F(^c1 z-+UrR+ADD}e7z^VWQA$4;@_%+lZRnUe5mZy9KP?Vj4R zFs75Jw!U{u572OpJvV}w1XDaX3iwj)#fw{gRp*aS{P_4KUu;hC=E_T34y8zk#Cc&D z3)F;re4+P++?DT+*&+JIK4mn)(Q5V|fH}WyUiGh$;JNRsCoP%Ow>Ib1?2reAopOvO?8L$ z@pH=BN{qK0`V=uH9cK>Mq_GNn-0`-0bqjHi(6XDA{*`j#qImYnMjUeN(GOxGl@2b#Go4TBV_{(=Uff*nFGpPw_+&m_ z^wUgC>-GiJtrJq8Nm0VXpv@}bYn7|da3|ofGD&vF_rfFpd8u~)PurjDzVQ0Djx|En zK|%*q%#}vseLktbb$n0LWW{d04ykbzrR#>v;Ly-QyhcCg!rWMV*y-tWy zpGFfdKXuz;X7Gr7Glc@KBYm*ldT#6$aVt#6Ch3vmKy=kmfw8rJe3yzk@IcQHKtcQkOM_{1R^P&3$mbPlm zae5pLaC@S{uJAm2hyY{z3GB>1qRPjqgCWgwJ=N0hFaipQvmk!z-w;7x}~xuOy`(&PYl`mi=`ygtJE)}IJVN5+P`h&b% zpGcW{0?rC?s0(brYWxEfj=+F)&(gX7R?nOqzJA!#Vr2W4q5<(H!=kN4m2SmagOex8 z$WccBE5^b#5pKo~>l7)udYid?hf?7aVI-*2 zaKUxA-SlV5L-a>mAH%87V1t=3pl-D9wLQi3cWb|i1y>I#o8+=7=g=$miZ8?;*-{=b zYz>(o@Cm?7s4AaP^p*}YP|{sAAB-ESNp1WBhO$rH5@hR(OxW2bHc+JfN2XTBaYvf= znrxfLx%OSF*8E|s3bp4rnl8VeWXi|y9Af|0q`ttcM;R7umbt?7UN&N16W>e1|L@^9 zdS(zlnL z^QTV=gA?hs#C6NXwZ7$pX?w2HSPi>-EP5#3A66iA%QDGasvwJ@{+Wsk5W)@}$DTl1 zaSm-A_Na_kh}54?&m>*va4CmTH&^nEVX_vuJA49k{U!ru( zt6;!owaM}saKNXj11z{X$bug!w%zcZ0u!LSjF^)0GR2)eTECNYP*1o*bon@Fuo^zN z;BX}myu^18w#B@QjP$MoH@sx924Q#dXEAA~Cs$2FhRJD+7AJXbw^YuX-EW)7C5$q6 zRX#{dQlvrRaNu(bhvO)zi=wOvpNG}RPP^jq_485VtzpN_L#|eenc9<&sT#lcSIYSE zmwK?xHMgiB(4^j8lkim%6|hi2K>FymxxVpTFk^cPR%Cc$lEkOB6qk0jIe6ME8x##; zz4lH$4h4c!??N?v)5I_EyRNoe14wnT63wQD96I9*_ISk}%Sj`+6e$1tw8c#$%EjoU zUaS2HKN8ts6fKQ1O^~}Q6j=7e4hUETN1h6Upt@2C0^4~5N}oo;bAgOkun2Q&37yBv z)5pP@ksk*+aBH?*+=!=Ejx*O^(F~^6Mm6T6dWyLk&l!R@J{yL2n0#|dkP2TrxBD|Y zRO)NeAdOm*O72kk^Otu|_rmb)Fs5PE83qb#{LCv=X^N_qSNpKc@a)VLayuYj{uJKN z@a`#|UAGB@ZFjw=LL3I8r13f#)CwmIlHC|vq~LJ!cU>&GjM-t+Z9>*^LgsIWU^LfC z2~y_{nU8g#_~TvUQ`X7pm+pwfnz7rlt^5`20XyWdESIy|Mqvs^(`h~;hyWj+?3#QjQcJY3$G4JOQ2JfjzSC}HO5qN=}4^+q9%z-sWkJkMXG$6?Q#CkrEY$iZr&;GpWVj zP{ks!tZd*vK;>y{!z0dT`mj5d^40b{$57$r6@mQ7c7|e4MAq_}k^YGdeDEPdN{c-_ z^$~u(CX5Yzj3r^QGAg-TC7k9uA6aJ1K2i`W`$W5Q=16x-7*;2$GeuV1RUq@;rk0^* z*`~;HxzPq#V(rySks8|emQ=a4b~5%G90*o)ob;LgKnc^u>2TI`U)`j`1Y3BKlu#Ol zA}(xcnV9kJEZdcD6gU9v8?ekJ`hAsDkGLn5_z-F}EAP@J)Y4#z{5Zxso{s(mU#$>g zfoppdo!W51Q3|)}z7V~hq?n&32^Qv^TfghsH*t_Ntq@cZcqv*R#k(BNzwOBzb5?Xt z6*zq?j*^pD3SO21CbVleX`H1m+QgVOJ5ZnVd%Q50b7pSEEP z6bKdzJt=l88ysa%l97=fe(iIA3oJ?060v`CLNm4zr6Ho`4{EfuaPAGQe6hr;C70E5 z^CipRGjWxnB>1gY_~q*~t_i_xmrm+fvI)(KouSxKVeP5^eL-l!$?vMkGwQ4*vEDY+ z{Sig$1{#I^SC~*R)KHRvVCs{Wtvoq-o7=nIH-w6kA{v+h0$v?fMCQkgcG7qL$ct6f zx;e)>kIM-Qn~G9__(%+&B>;?g?nxbcyt|Ze4+a9hIkgof7=Im4-yC)DV)?{A(MtS- zK3Te~Nr~ZkdDi`q4U=^DAnSnDB3zXCairopK`=S&BaQd;M9JTra>y6Qc|F${)!1$W z%TqFkg;DdUbQ}pEOa|>14LEP=C+c4*Ooz`u@=uga{Ji3m+^#`SPLB>P!{5JA2?vv^ z#XAW4Gag0)d_0o?2b)CkG6t5GT=Qm773gIOnod@K&9LO|Qw)be0Wcr_V1!Rf?0 zEV0NXuif`2z4wWG<6~`c!8;2`Zrq3Gm4fD2$SIh(|AR#r2P;5C03v7K{+PcfOr%-L zyq7pCzWdjy`9$nP39Z+=9(#0VQ?$x8Cz)NnrMF>o7fB|SBcbE~xUXqp>5lj|Ma4h$ z@U1hcTC$;n@(;$(j_44XrXUcdqh_c(q!TndocV949mIUh=%IUgL(fh*nWd^eOOFXvthhhXcZaeY{U!h1Q$tyYvet;lWhiX8g( zYTjHoLph1|y44pSP^>+!=x98{fMyl-nw+aSLy2-)%!otTxIv^`zC)dB;)YwtRwW8t z!O?cE{aVRQ4RWl_%B0d2qRlGB&DgvRTC`Znb*!RHbz2-vjoA!(YbfQ-EW~<#)$Hr; zLWOcLo^kbfP7I@{>IXTI3b~~0Hgg){E%+VjM!KA^#yykw8`wbkiVw3PQBWqqfOs$G zD}IxWVUHfA;a{ZWhI)`%NQ_XO-~poOX4J07nz+`c=j?NJvozkfgO?+z--EHw8*jNJ zHCf9`S9SC&-&6O@C7d2kqza-e6XlW=RW4@4>@^OEu&-PV3ZiqiQ8t?k-*3$#>8ctGC0I@^#W~E_34MmJUHj& zeZXmT@z7*+w70T=Au|oe`nzT!T?{OBT*O>Ux<87N)FOeI6JiV(oK4?{v&kI>oN9rl z^>u4Cj?;Yh^hVRTLh7wVZ6{HtH(Sa^D_QjEauoXbY?_s!UyR>X%cUu%L6Ky57HLE2 z7cRM~U+73ie=Ac9Ivf=v;iClUofl2Pa>w$J106YQ2r}epv?gDsBi+P$zbiL633!M} z@uu{WD7Mz% zb^1tOg&-?b5q$T!|133p_L{r6f7kx1LAqtQ5B4tN=GwoV-J509RHcY{Sz(2jgVugK z;vG38&A(NC0siMgf7K@3sdsULn9UIz^zxkwO`n}MtjKtbDvu`4Ylm1}nIuZcS7@%J zgr}+zA`k59dPp=2K)L*K-2N`~XxjGN+BqCvH7poqfL|RRzQFkH8FFJBjsF4srD79+ z9(qXilB>t^?L8@i9goQXW5(M+c_d5(%6j%RML9TNN#UXN7+!+eAfD*aEj~S419i8o ztSEc^vWdaSO|_n$X5xttwwi0zCni# z-%c+5+SkDkE|;u1ZosH|EPnZT?u>`t%(Y=(PIVMl!|*!Fb^WdlDM6Gryj)7_5ni4g z=ie<2M(CL6?Y4M3Lm{287bHRH^6;46?Yf!*yK> zX@B-=G=ounOCrb%Ed8+0(3*MGTK_B&kyT ziJ4uuqsi^wz$cJaK0X&)sjxVLEJH(=c}cHt`O^=Vi?8X3bP5GBW2D-yPz?>^A5#gS zctBE#j+@AS3Sq-6$D?_{Y)kKB(b~;TNd;@xr%i})hvG`jXs4_()94tz1Sh117K}dW z*zU#S?B5kYkrZ6DqlH%wQluZ81ECwTFl1x&D$6>oQ5Q5`FUT%Yn_ajy(f$%PfYh#NaUjAd-!Q6VPvz z$&xK1e+p$LL9ECt2w$#8h&AyA>l657OoJXEsNR61f7@Rnu+B z>DHN9YAC3sfC`t&%efGmg|c)c2^+}QQ5Q#}0xkCRil>yYW0BeY* z(U`&njC?96GZ5c0>9a;e*>hnBYH(%{T9jz|eaLm@zLS!kG*WWxB#DaeYLo$dsjup~ zrnzv_$ex|FVQXrpfj%k*q3ixpZ1p`Z2w)UGuje{>fD8Z7>Wx-4&V}Jl?S;W<0eBcK zl`aD!%mu(?N>>btW*Zq2$#BS)LAvBhLw)iED)F7NvfUNovIUrKxf0358+Eum007E8lpYONmQBnu#{yJXoe#VV+ANL2>| zCE(+1m#M`o>$V`PK;*4jVS!fShhmn-1yQ<$OBo-uH(b&CLD?f+r!gPiL)DA=-_8F3 zJ-ZH08F?jiBV*S*N^mhIBvB63A+D{&ibopPB?(h@InrKj=8V6fRvf;kgD^Fy^#@ zx)5>k3XGBpZKOuxs&Ye6Loul%ni6dqN^}S4rdu6AZic8JX42X{%~vmudval@1q|^^ z4(-t8qCmEZ2{q0(9}?6a_|Z)e;bUhnQ%d9FNH2{rwe%Gyly9~Xs_#hFcc}i0x`>`9 zknfZ6;#)s45~9k;8`X^M(wRPdi!g7IN45U|D|H1WgHN}0c*JyPW^e}m7>-`~M~A;L zDapm~s$C_LOJusX)Zgkd+eJhqiRY|p7z)h zGjBqm{geK&I0S^`A|vW%a)LnN{{W7mV!ZPFvPpZPUj@FR#d8$pM^ZK_K0m{QWs=93 z0UWXPeNo~3aI}d?$ccbcOOTfD9of2)TXqayHABR*uZr$B?fY4a3y?9OCGTr8JA>&# z-&s=4Zha{V!lk9L1;VqEJvnx(Resmn%dzD3aM<;K9^dCd!OTeK$pszVyjrD=oy@@M zkrj*^a?!;pm>QA?`>_-d;g>I#IUI77NAAz7)#{WuKi;@TLx=;-URQW-B!(2M){G^J zDO7R*6Um`t{o;I0x7%KAmBd&C@}H;vlm2X)$FG*hEZZcQmhGJ_~z23UVq zQS@a00EwF@$E;4tg`(Za6|LmAS5nXFLaYk06x~*+%11A?lw{!?_^bL&)qI-Obrnl+ znvRP4lAX!6L)7>qmHz;V;lqn_!7+^g08joq{{RxkQawebPow#E{xZ5^%cb6@??N)p zC5(@<;X}M*_P@#foXHvTP#biwos2zv%V)u*3kWR*hOi6(a91{ zc#>ExR3oo&pX_pH6ruafUq{tEcNzG9@lHfNMvpW`lVhl9*U)Jt+f%Z1aRa(Fc{%06 zMrx}qIZ?71ryQ{}1H+$P{{Y!V&Brbn)W6drZdXdvZKR&k1)A@l2N6la1O$#l(;u}_ z@e(jXQpxF;`e}V`W-M})sGbN{cd2O9uMNVRt9QJOfKd!62c}PQN#aM#jzHm!dQSoV zm+>}B3`Bh=hyC(TszIgLYWCW!@t#^{8r+_OA#YE%J_b%@p*r- zU8Y-V8h@o@Yoez)rfFW~+^TMB!PJAspXB6oP8lvzpVByZS3IFRnaFr+>Hh$UQS*nL zFSI$#7Zxb3K+(KHr{OhIN;#1z16_Cie+9g zB>_O)d9zZ7<@-41!HXQuIF2Ge**6?GqId*<(<^H?_Ezn04UU8QLQ8}3um!@3eX{i; zgye8zl&s4qh9biha&wkL5&o4y{KKf*TCL8jZ0eFoV)~p!5QsLf!%qGgWHh+U>IaI4 z7ZksVv}vMthd<{vsdqOtir7B%}z&V3cmT745J(> zV&o7(C)3F(gk1e%K;_yf+^Vrs0RYe(%a;ub=EfwRY4w8g6i`lJWpZE>+bcOF6=B6Z zdz`_^kOs@7+87Z90RFj&DH7Ewl89AZhg^XzWUC1HqCX`(tMHDZo+e8w?86*)%NnRk=r*b?pJ~azF{{XsZ8om>_ z;t5^lo}ptW?}6fW5)IVl`0_$yXEPRDc?QY}BNM*$$&lJ&iHRMlwpSxfG9V^awgreU z@Q;178hLx1T$!tqX$-bjt3^DRW-OyAI8%(~T9;LJ*#!aUFvkUROmx6=MOiE{{`%zB zX8R~R467k0X!3FM8B1vWDVklW8xNx~j2&)GIbI|!+ag1Wmk1qPY2T-OTp30n^S6)w zWcfGC7D&3jmpOv$$xo}sLyz)`RP04S;r4&j&cm_$Lp=WgcaU6b>X-ZHTdl_txG(?F z>jfxte{T?C*jxmrmjQv03xLS70lH*KWCM8;SqAbXrLmDnc0`szvDY92w4j~amgOawz;jpE6 zIHeN-u1GTogX5MmEmssOA;pkYQ-PA8z{oEcQoMA0fAT9B{{V+a{+@ruIoe#m!cckVPI8=(M&g8IgotGskb`?! zB4StKQ`C3MM8R(v0p^!pTg4?urcj=)GbbF#>g8gY9a6b$CtvQQud&$XP|6Q5=EpQo zFot>Wp!;>Fk5QHg#!aFSmnTQ7%&qpgu<5=h09k25IzKVR_GdgB$Fa%|ko0lop*-S? zT|x-}tqpuKqlkusf6&R{B_(*Tr$1g8~;OSfV0ihUU`9EL+tAeQQSYQY$E>P;z` z7;|wNE?%EGk)oDbrlj(d8u3#>L0;b3l`{Z0b21!YZka-}sUmp-&~8ZnnT;Yk2NFad zq%5|bZY1F>LF1_v1PY$juWIC{9uculNN|e>bvfEOZzZx7lhQyH!zfb6_COvPD1ss- z-p&As3G(7&(&_r;wxm9=rWI873VwLUUT_Sms-Xuj9?gy&O#kvqcsXgoVvXdSo;sL~e zi}+gd0CybLwT;4En~OeC>Mv0u%*1+8fya_YN#`4#{{Y}{_>tk^miYewqx^s8e>uU( zNj_;7wPIeabqJaChY#29)dAFm!yqJQsy&0`^F zebp_kt)ZFkV7Is_c%^S`rk>n$c>Wr)6|XvdlNtEGX)+U>h~XwakD^hG{{V~nU-3u+ zw*d>JL2V7}qQxQ>^Zx*SrcTBK%CzLDJ`QLP`#ife$&ar1htrlmzxeVZ1?~QoHj_xw zA)Rkg=hH7q;JSUMF$J zo({Ni>Ee3-0HyqYy=EnRkUv$h*138q`a1Qhyis{byl6QqEBDNUIpOE~$o@Z~ycR5a zQu%Hsl34V;e#qQS%qE?F!J=1n2858`1fLCCFN^>OCK+&#@|gaw(e$@t-)VD9G}P1~ zwHkfgf-!ER(s-ZMGX^KQ_<{av{{XSfe6oR;9Dj?y)4=R;4X(FDuDx?@5~^7`!Cn*o z?UdAQ$eoF&T!_JD__zKY+m4bmHf8Gm9o1J}7c4F1urkI}dUM9X2mtp7kNjQY}Z!5?*SM+Fzl8_A%UAR!LT6HANhDrr&Gq=3X5rgbbnT{*3)G;BzB{V~?kJ z%lXNT_ndW2A|v(K)z(AK5l~%Ox)V*hpR&1+i?iXB`b${Q;-2IBsA#Tkb!{q1wcS0U zkz6IRo!U@E6soS{ku=LC2;#^FDPQxypv+b|R1V+7udCVlYemwMU4H&oNY;i6bzvIR zP_Ds^Kgw=79X#`9$VMo~`qTQFW2?(Dcq14``SL^Po@ckavstvZNVIs#PhE`*h>bTt z%kPrZ=!_*(-!Jojtlcazmgm(k_CMyR>o*=w)$L%op7Hd!*cMBe&0}P#4N$_Jd*zyV z>M=-x9~b&R#F%*a!LL~V07{l$`C{cvb6D%9<4d@U)1r_I5Gsr*`#vxkpW+*G%)FhYI;dkG*OM9JB33;~ z>S=ydM3Tx#ThOYB1c~X18EHy?H~QJHIkg1w1M2?(O~TLjgl)ov)qKsXCCSol^kn*^ zWl}l*7m1LMgirxS_RDZ+@tF9BC#(6t#@CM(9qmf;ZEor*Vv-o6g_nbIUI0{d-0n!p zHcpmvR4N+n|5I-BTSVCRnm(EIP0Bp93I)x3RQN=2#ZQCLV_0eA_ZJ_o?&b{yto z&DiPnCm^HsC`Wo!Q4|B?lQ{d^PAlfx&naR{lU}$CLJR`DK)pDE$Her=OJ=!jjgB4z zk!rB;>6DpUk15)uA6a%(jVehakf}e}k(UVO!h9fEDb=l@f-h3x!i5}~r(g$(%qh=^ z&~+M(M-iw7FRXrR`DVsRE#NP4GNEYQRG6BEhvFX*8-B{>(@)rWrU5>Y{>jqj$q~%) zALzX6%zk>-wP#0bl=`z0i*IbqB328|ugIg81LEK9XGNs!%viPq)%@xGU-2%ZHhCZD zhADBW$R5>Dys|4hM6w6spqfa4eUZ+evYEAxD+c*E5|?}b((EpqX6zS_F;nA(g*QwD zvH`keNn`_b$l7Vy8%uP^lA3lzmQKi$mmeH~O8D3ufn^os?*K#{#S; z6fGwL8s8$W;@G9WCjz&)#VvBcmFXvAktqcg79p@AJ#H(LwpN3lXiiKr38v?4F43~q7SA&XN*g;l~6f8IpT9m7%>D+i{nEOTSxy5<3;_?3g9zXRz>i+;k{mZbysJ)LgHgL{USgM=AjoTz7 zLoqTCHyUJbT5Nr?_~s$VhH?_SojTzwPlyhgl?=eSnDfM>w|1f1nN!JjUL{NfbA=a-R&xaMR(K?hz0)F;jvf_=0yoEQEnP z+NKHSRHc$JcgjnDSr}7|Ko$4NL>?WF3pm8^?JgB>t41MdeHBkqv{j`l2TYF922 zkkuZa&6i9}9z1+rpHKDw0L@M0Hb61o{Xg`O5_x7sh2ob`km>5f>e4~f5x*B-_>NjN zfSVBi9>s|2=WH0?QVPerKoi2b5zM*Barn9#?JB#uB z*9Rp?{{Tr&O+!~j7P^hPyv-ZU4C)w)$F(1gM{FEv-+;7r=p}#D*!-=`O#uy@kGRM z^!QA{5Ii}f>i+Ywp4l&hZb{{V9&HmsT@w2?)s$33L8kZs+h4hiIFW03q3 zbzgC&a7! zZJLaOjEaw|_`jw2{&ZVT+|c)8YiPh4lUdw1KSJRak+>kAiZ9Dj;G z#UJyU$gZ@EwYb$Kv@=H~o$T>~KD>y~7AO3T!na}uRXD&(h@1ib53QdGs|Z_&;?*D# zUo22+QH7C=ajdPy2;B;VKZaWpaULjov7Nc_{{W`?nHvVocPEjDRh-r!%`Gsj{g z<;c(uG6a9K*NNrHf6B>l_;Ual@Js9e0EyyqvFJh|? zN~qe0{g3SBIiL*qLA-ax2w(8IA|gg0@k@*NV!q}Z%il`IT|=8n1hE@>G)v4>lHE;v zOaP5=4I2Ud3`_M;wtLWEkfW^w0ah z^v*tfNBCv`0237E?@IFJo}+DdFR7+YF3hsBlv5zB8|?)@?6Vd*bIK+gPMYy*GtU|2 zln?aD7nn6$bF8+DY9qhDi56(~1TQ7#wdLS5H&3RNarlz-K)ISi3^J%7x% zX6E`!DaE_MrWw*E^!UU`plVZoM=#XrFv6lG8{+zJ)#_}lB#7)c?^V&YYwO`PwZ)~x zmiJB(rI8uJiBB4CHcXDA1YuH)qs1Thzweplj3c<(m9IRTuN69GlMSp^F^XJz?ZFjW zejz|LExtz{yAbu{GvodqAE~J8@x~zk06BbKRf080warS(OLZJl))DFu02J%6r){yG ztk)JO%ZT-5`MF4XAusd2F-pAO9C~6}UfIht=@87Z+}OgUOpxr(4-rpK_Gw>>Gdnn$ zi2`FBvL2g3l%y&{erW#y@t2nv#MaPT+rbDPjEsc}ld(}zPWgxYpPPF!kv!Q$PHTA* zq2^CBX-pD1Y-Q9Zw{T(rghg^e9XgMePf4T5Hxd}cmKbFNw#qu!o^Gr(z-{!oWw~Zp zdvumVJsFn(>9U}y;{d*nrIzV9B z4t6|1joA!f*KL-cEZ3IeuBx=(bC4yhmEhCBWLVRLoho)1(s)(YSh)S7UbzDj)M8cQ zod(s)%u8ILQTDRL7!r2&@%PFn65`~EPwW~QPs1u9r&j5h8EkZQnSmU_y|tZym(-Rw zmPHg$yDL|_9Er;>Dr=ru)dC_E+Q36{Bn`yYrG1VgEsA6_aYm4))cpq_@nCHYi-27QM$D2?{Hz=jZ>+Oa^y)%z~$-S+V z^1>u8u_b88O$h7>%t_<`*Ea(uSc6>CTYWmpDj5ltybn*iF(;Nsmd+IO&Ro4K^&M+Z z(yU(Q>C)QS1xp^k4)jnrW41Un^UE$6jyV?+QR^b|KQjJfd4tSywWg6~<4r1ARf8i+ z2idEJU)t)UI?W$s;nR*RlKtoVhf%22U#1+t-6VQi}CzUqHraZ=zo{`G#1xTUCryqI8sERe$tw$9XPiC0BiYk27RSDn;woH zPBgKer8ADp%Q|dEIHQI-HB``48g6&-%o$|OknT*JN#hUy)9oBK&BeT>DKb#uwgffD z1+6=dM$=BF0#i<=M$=BFM3mEENyrk&1y#2vu0)o>1;*EGfh@c=t8PKal7R-=BTce4 z&xJ_T9En3*vL#*1AX2cLiB+ZY1uGs}WJy6PJeZo-BWP&54)`rp+0F}NYL>TVH=#RX zB+3$`*<=o(hECj&ZE2}A#?ZYYC$1ELsu4yksni$};06V0kQ@o62@s5lU{(XZ1x3X# z72g)fl{xN3HaT3RvXTXylaCoidT#&Xq<^E;&L{qS*;bmB=}pyvCdbvJ(k0&x#RuLU;0-+ z>qW`MsWI5@5NwWyj0&H8^Nn|8YILTuM1lPO0IDD9ocLsnxfZip&8iGlYeo(bQVJ4% zIvD|~4;`}D<{`cr$V+ZKzi#HE;W?8HSq@Y+vIq(Mu>Dc1m&aN*vX=Sz0&myLcX*mYr3AJ?-_nP(4QjY;?!fGBA~Z(A^5jBGmI9) zj1))KZ`DMmHW7a|`CkM%UhP~EJ6`Ix(q3K$F-Ii6h~#(>KVC*+Fy=tE86yaDAaN-+ zu>2gy3rOp`sWsSj090;rV*tI&Kg$lKCXZ0J)i2>-01?Pz#X1rMD2#yO1Qd%^ z^7B9fEc~ovUQykTg`+Ggc0E?RX2%|?B<=NoH~Gx*&xmibv^wsM74lj~43^NmK?KmZ zB$W6V%||8w04FJymm!Z4B1ZoJi}*jzYMe;sZ82?LD6d4Yz*5a4Z}chSc)^g;oOyth zBD`vIAHXIwPpf9X;gaGgkbico&@C(R{hY`X%Z>&y6&P^( zez<>M{yN~#gq``I?JPAre?jcE6}++|l=4b=&YTGmJ1^O83VkV6f7V=-^1@an9tr;d z5A#2#ANTNaxKBf}oR@6U+rg^|Y^S%8;<41I9if|;6&3x76OY2bv6C3Z6ON}D0per+ zd@KFy8?Jxpmuo4iM-}v?UTdX|WRub)tHw_9Kz`8phuHrBbj!iM%$PLtfid2N{{R>8 z%lWxK;=hg`)mei@3i^sRnl&4{clx#6Ew$?@qbN*?@U6lI9}I*JT|O+dV)gJu`l0K= zIG_4g{ZcNK_BXc1~+hG$*ei>u`0DVjLqyBCg zS(k`-fH0r&@DKJ}AHn@N{{Rw2$79R*c#~7D=$3z0w7qGxM!AqQR`Z(MGbh4RjGUDf z`F_t8{$I72(Z!hDp;@?pia*|eThsM$v*V7|IBhh#v$TQ{b8Mo?qxf2DIF(I4(Ozm; zee0O9%PD$g>;AcJ5dhdg-iWR&JzMQgR<}gu&EiPjO{%Q2Mt;(<{gwDz?IvB0;W~^X z#r}UjaER6Q zOBJ<_+8Dx;tR$LBG;Y<~l?Qx|97LPz`1)L}J_+#|6aH`UMJ|TJP|%p9o{f{uNsyrC zSr~6o)9B}!S-_d1B`zOJc*zYwungeX-N$ z$%LLC^r)QtIPN53KhI1qVe*pNSaPrhh|5J!UD&_~T#A zpP?TfrRGf+K+`OQEMDKywYikWQ4tTo9YqK{cI8~gmMmGa&R6wuPBFjsEh9~XB+RZe zzgILp_nx&IE5Ttq2EFv!MnysPRMMiA<>Qv)?AT5`ar#`GU7Lnmj$ZVt$IVxFx|G(} za?KswYz(;ZF6Lx zy4uI^QHl6nnZDHz+W!EB%$+u`5RI75{{SECROK^{*A>2Nw$*N|A`ss*%NcSbM-Z(f zZf+E8I{wMaFzYzy>jQ_Ur|Dd9h`Jmn{w0HI{%FwOQPW|S=ed10F$uQdrY3SXCWCgb z+RdH~7EuY2!ygdwaeo?k@y1-x`lZjDFLh&mrL2=#LcF3_60DRJaUy}eGR!d3!ygVx zjL-AGi~6X|Jc3p}g-HD0t6w}*F&54u5lkcdG7w1*#Ql>)kva@;1btiae^s*-iQK0; zT*<<{2YkcL66`UQO~G{DlThRBu%kx}yiQm4fB%8N{?7Yy#EwWT^`GKgrD0c6@%s-gyYOR3l| zbvx#_J`MJD8l5+)g(mMdophnCzyU$4vG|$1a*5cXRk!t=5gd>{q`joVUdU(CFn1(K4VupQ$QjT8M5CnCn&K2pN(OQO(Q;tWN6x09}IBHi=>ly+?X% zKi10pGb7I0{25I1;y_*N_K>9-Q51yCk!oQ@acX4BTE8Iy*f-NgC)8@Ah*2JZFz!>-CvL z&fJu39@Xt;c*%$%;Exbec^<%bZ{@~uB0wF&g zl!?9@U_#zFEfnrJ2~9Ojji#MUi7BPY8Do(pkcuieKpW*`x5f&T85U}CHUt%fb{o?%RaQ9Zh|*&~3_&=z=M>Nu4Y>Ee%%`IABYBuqC273~`BMqjSr7(#inmH?CLvf)e z2v8FXa0N1S-4wwO!%Ubh!PspphAO>sNnJsTs-fEmWE&@ZQn#VP3l&(~4WuFv;A{$` z7D|e6C2++nTWpn~MVowqEM0=tdgOy9$-qji<&Y&?uGj%e+TpY~fJF$XJ&r~|NKxD* z8c=&Ej_FkP8;s{Q-pc7S?gxV}_P_XtB08xKd!gFeRXb6Kw%@NgeP6Lz;l3$HDE|OS zCn7qyo_j1P+X3acV0^w?62IS-ckPl!(Cqs1q4%>@2k(?cw=r=(E+ z!5|ajcgx1Ee2(rw*JR{R5(89&PP0O7;XvI8htuh81j}O@;ZglFe`)2(8_X7uadPu|YcOSa1QZ_=BK%wYUlv*5 zW1dhjo*lTqr^Wo%n85g(5g7jfvR<(0wzifR2=H6nL`B3g(T`o~t=6D^(a0HOl%zdU ziS)J-O~$<_x7MvMqmJ5H1@@V6StYtsf!Oh{0-%;x8Bo*81ju?aNBCTS3|Dl&*eFXH zdJ!g*Y?qpRgVT!H9g^gLO<2l$jp##Vkvo%+@JxRf`9JiIK0zprmm9dHyPZErv&j^G zjjYngLO88j*<2nx_=n-d{8%^$h&)>p#Xb}N084m(n&M7d@?*jcIhIfGkEg~AQ+^!iccsqO`ix4% zC{zVG)a}WTd`tez_IYJFF+j|KcwvxnL;UYo`>&-zAOqGvQg3~%!ZhE~a+viGEXxq} zBa|0-$1jD+J(a!|AF=kc3m%;D@DJVUB7cYYmU9(+;*niTXJA_8WE1&AP~`WJH^lbO zGa9-E1RHkcxcfg2XFy9P#Bl1d{SyBGRp9=2`)dghH~#=9FZL;l={JpPAQzUJu9D#r z+6$Oh>gyil{7cBKYw(^te`n#!4xkxX6UC5olx6E>!Rf2CYEZL|ZponA8@ChDBAb^>em4uA8{%O-RJz@)krL-D+ zU_(?w(F&Re9BL{*m9pF#NopWOWH`RA9xwQ$;m0F~hEp<;KZq(^U*2n4ta?_ZY7zxb3!aJad(c!;XvHU4V8tF9d?#!G7($(vF2nNoQi z%p{O>T8))y`!ve1>AXqYgm^3XeLj}VIzf<$PBGx&`hK1jo>tVn^QvjLCsmJ^t054Q z7Bmq60Sr#f@oqjGp0^&G9Dv4oeP6{cCak)BJ}CpVPxE8yk`B(-K=On)y1u5*f2&U; zbCu7j!AaQxUAFzU%d$@{uZJ851~~r!n%Owy%xVXN7yBh;^K7$TPNPhQ&5#on!|`^I zR-}&)=E|j_sE=8n^naS)9?zgIQj#2MvS0JMmLUM*@HFcsdB#l`lmU1v_8%5y5HSH9 zb`5&}0HoU-92;{N#SoEediIN^yjGft5{VG{ag_BB8u2IExsj&Q<;ik}-|SmwIF5YF zc3NNM<))zyr1Ad%rrj^8ZxL<~(NriPQ{k`tHaRnECj$%gN9z82NrdmyN;=<}wRTn0 ze6@9_Y4;Mb7c9wFP-{{GRC2F&$!WA${=CB`NROo%w4|R&xqna8^Q}uw)b!nHG^oGa zh0#TJ`m(VAw`Qmm+v3iL4rpY>;ve0|`e_o7l_u6Ux1s$x*!qZRBp`GnsN2IaGEOyN z&4u-4mKs&lAfz%dtyG0SuQge7#B~kaQI9f?F>tEM8!HL{$WZOqDdN6Gkd^W+fT5}u zzdQ)tZ~~nU1Ql4+8q;I%ktKwRv?{+&LPf4cA8!>%6{zep9&&M~B+d&6+l@%CbC}Y~ zTuJ637aS49#XTi;>UTfGDl#W~Xq3#ix3yab`;AY7}dqQ93w=*4qhKkt>#lT zvs5ylg_qq3++~z*#?oahW?a28N!!X7(pBp1#vOFAL@W1Cg-)ZFhxZ;?RAL-UjQn0o_s={(4p`~6=ji?Egys|<8L-b{U({xD*ggUHk z@X9EBModk(WgSsU_VNm(gXD5n*a$8$p2Qp|rv>pi7M43ky;~Aglq}kWNH#eGHU}UH zP5t}Gr;bxOG){Jw#W^H~IZd?*D*BXcZIz>K=cPBp&9*W}BL*1*vvA#YF|^XcH^K@j z6ADmQEsG!(hTG)rD3~R#*gMbG za&h3#{31vjjb}kXYjeMXRQ~`B=CxW5$UKaqf7-ae-v>V)msEd;{W48+=F2$bVI5?T zZX}8~zH=G-J{)9YGBEz1)a^0$Y{=i!Bs+Q5+x_swe8yHgI$iCdmnqc3BS3Al?0p$7B*Wl8N)FX-j=wA_s0m;``}Lk?j8S#MnD3hdv}U{&v3g52UH- z_NX=ed1QM!HM?v(CKbKfUpJezhXe_N1K23bar$nGwU3!J3#l%nmc}Tifz@h? zph9*Wmxx`}j#raOmLL%#M8DazaL1L`3b=%&#Gj+}H{)Rwy3KJIk&Mi0W2oarsZ+iI zAV=>b^`GGWYeb_cp)T(AEi%vA$D-f%i{iJ{j8Qb##4|VzC1iQ z_`lq^^Nn-#p&H&RcDrT}rLmcA#moS@uyP9)sR~kLEz!OP%VRDsAFAua;g{p;$NtHO z4FXXObhcN5`UmuMEmjY$Pdg4$M{wjsjP$1^RX=F`rR2YBAs89QfbW+KxOjhuf$w>e4z1hO*}?f#bC{x9N;zo!r8 z{{U0{%P7DPalNh2Sx3&~!w{5u{m{_IjZC))k2a!U8kEDxi@i1mNRTVV?1n!>hL zE9+cY+nK>4OQnn|w4b!gTJcj{#gUZu5|w{8{{V&9;={x!9o%jthfrwj42o_d<23R| z%@@DI%i-aZh&&d0e>D1>o&hKWI`p4RZ~fC+H`Y=+sP3YU@75$kF?NmVN*c$y?bngV zG@-Q${C_!hG-L=o0zE5>{gPR!Pjl)=V{a41%8M=dPypk)^Xbcx+L?A3#*E3o_O~Y# zN7Q%ziWcS%HpcSBVWq`=EU2vw%L@8_G)V|wi}p)p(Kt3UoUxDQ{{TDvDl+EBR%OBm z@c#fgdA9R>I!t3&i{gk7(j$75QM&UB@dsb>aw1xJWc}Ia`2PS(#|CUfn&zip)^z6s$0us(#a$<89vBB#F*q$@mD1b#&ecA#1S7?9}HtSaQ^_hiwF`k5J#mU z(oO!2CCqxOiNun9V%RYIA%4|9UkS|Y{272a{WLfv>^OM3vVYT!=6w$8*Gm@&H1=N#;jjWkT@I-$%>SG#j<(zs{ z(%^nxLx%HVhDeh4;3CU?s3!RUD9C0^c^XWiaLcE!R8d!ZAVO;nk2G{(T~Ih za>2toBW6Z8^GB>g3GY@!F}=E(8M(BJ_KkaGgB@}^IRg;}!P~h~*3x3}$q;zOYVLj> zId%w7EzEKkhZ$E*9;kt128^kiTu$%v@}pYTp|8ytA#WP7-ndsV9by&av*Xhqf_FEl7a_=H9Kibo?5Xt!GRtu-5_~d~_H^(FjDgV~) z{BvP%KT1+A_}c;$%HSmw(HJdhZ7>qFz9p+<31<+Cr3OL1mXU(il%!&CF)Bv|v06?= zRuh1#(sCrKoSUi0loY1nX!%)jSwm_j$ z*b?0_44{rGd@@b6roiB|QreNwk&U6>S)F=0!^BsJyX$u!&T--^#$58q!*)0cQc4)s zyW}l`*A+rA610~$B$Fy7sSz0rH#lvWMMA+&NEXPWp^yxhHt3XMGO+i`$fn?Ja>rK4 zgwiEaiP}dtl3zYAQLb99;f~w=7GshDmGa3_kMxrJC~S44xPUwon8QhN4cEY9RR{K{SsTM_zGhfRJIDFFKgIt56wf|U z8teQ%lm&*LZv~XlMS8PXU$V58gw&2Fi!w8iT7xdjl$io!Q^)*lxP4r=M_AwKHp}`i zO`b%vfxwtM3Mw%?*$&lV_NkO*#gbmRfyFPU{yf#gD!Pf1FHyYHq`9-Oxw48|P^F`q zHdIF;YP4Whzw=gAhaA9^<02*e)`0;;+26nTQps)fi6Kely`DRXW#{Ud0YMcBNSPQi zl^@VdV!(_@1O1otzuz^>5x#uaiLS=4=|=>XRyu+(d1a*0u~D^GYF3Bg_<3{W zxFr~HUGd8q{-oS#30-%n#AIzUc6i3>hmJq*zNT@ENKw{P z$`=~7vt3JZ9m_ALAEzXdqw)m&XoHZi^CW{DbK9@Tl#10usf6-IC^F5uUmnTX|p|@laJCY?kc!Cbc zdJ&mJ7Z)MJey$(*^KLy1rU!~+DGyikQ7xcK8ruH=P`;Qa?8K?UKxt5}O?UqQBAl}x zS^Xpk?$!CgZW!YqpA>)1YAr)Rj(I1ug`}DwR$)KD!@yC7+`94uDV98>RF9Lm6bnAfuEcd*}Bv{Ns|Z*}(IXvG)P=D%dGzuL^*M`eQ;$V-d)(f>Q{d-YlB)Ai4;q3B8ggJS(KDvQA+)-{{UlOatwThXJo^ud** zQ}G%a@^k)HY&6{bRBB{* zF)Vw{?`fK@6VCc%@o$sP9bHWQh(2SP+5=e^c{TV32FEmqQ_;n&s?dV=^6wLPc&mGi&cmqV8~s7qY4u!V zeWf3%2qAdtU09FVr$RE`AbB^LgUMDRc?trc_C2x^3?viV8~9;`Qb_$}2XHHxSuqlJ zH0!frGBytivDU8wdT~HFR$bLogpX6yM89dh&+@O&JukB`Y5N})&-a?S{d_;e{@48&{{Xsp z4R&n0>H2**BmT?!Ogc?Q?^&K-tA>u)RcE-5#87dJkw!j0%beb~G_vJ6vVC*@2QM5( zIEaoxjcf82zlzos3mh@KDg&~C8ZvNBm70goUU&~@>R63d1A>W`(!hp_H0gi zKVU|*!2bX`Qj@0F%JO@HcgHt&;ZtF9RNjas{Gl3OC4>Ayl2RC6dN$1y%;3$Q4uuxEVOcPDF*L2#0))CY9}#LBbm%5rm8- zv7^NHz^fWK+qE(%r3bg}xEPqIG7*B<5am6vTCHW@0@Hi|Q(RL?RoVFRi57_{$01XZ z;y@_Krw1k^*a|Kw!0(b0Yy}k^()i@A+XRyfTZCgu?~vr=LRO7t+iaH;VuPVO;I){FvCE?-aVX`qOr6&&B~)Z!xH!WSrX(cb6SOX_NR@Co0#e=!OPPYHW;9h5 zB=iF#If#Nupcw#3pv85KZSEV>w__X&)q$aJ?9LOldvbZ@!;F|?AL+7wKbrJfF3%Xn z$Z=2o%1F{j+jHV`Lq*z%l_q9xn`D4y08%K&smWVASka)|oRB4ukyB=kdT){dvjC_( zr?AO@*dn0jL*FbE*eOZlZuPE67Gg?m8uv8G0?bKClz8Orm?~vP5Lp7Z(q`x@hlxB% z&4tDA(~J>BOGmVAN{z`suQ2k$Ja$Wgnh^0giRPBYre58wnuXkn1nA}mySFtwmvvGq zDA|;9#uW&TA@y)cpNkm!Bfs=jG&?O`((>(YZtabfkUPxooMdi0@5GRKZ}zZiGUJ>@ z331y_VhtMNJWO9w^2FDoMzOq#(kZA?DG7L-_W*sQVcU*uv1A&O7Mo@k! z&Yf+f`Fil__7Z)1a~cyP)@d1-S7PI){j(E1vS*JJy%E3aL8dU`kE-IB>KAvBX@=8K z)7BJ~=_z$Uc(ZXdrr%`p+cB|1CVWtp(*YcEJV3GIZ{@U-<=al?VM73pCV5c&B#*aH zBq}+N+U1)LEW`oD^?JAT{{XrE58-K^IDx+~m`QDY8`xc4U5ka6lf___GHpW`B`A3z z`&@E?DAa^U5A^>4-G8S37O4VHsYdSAmK{b5)H-Yxc_3R@>daJ$4D}xf_zf8td|Y4b z4ngv*~VS^`+#t(zJ8Ob!u47@<&fd$r(|*FWaj8SwwS+q4f_> z4E~N8eS9+i0CLBHqN=mYX)>|0yA)eEW2uzQR(E)f85s`eiRF#lM2FW8Gx3fYTt$BG`u_mM>i%ksTkXwJ z?=;v<6I|ISw-4%BT&)#7S0sFKSK)9^+8+*3G0fN!^?w|Hqy2R7Z@P?n&ap6z*y$}K zi8Dnr$w-xHQOyjLD!=NCoV57I*FWL({{R>HzLsDnX=8MjS5G>9V)ki0Xd`DHlxiu+ z5nqY6+~rb~Y!9S;JYU5o>|}8ZH4oz3)Rv82((dw0RftJ>D(!5@2P6aIq7LiTm}SRL zD2^-ikK%LA6N~~+41MW#spN*Xzi+GR4{ae{NEL+8(EiCCsr|~`ONWa zc;j@hWvWRPmBcrCi_Y+{3|MgsLGZN+VZAoWGUFtU7}R9SSOJhCAS6@ix~=X10M>0T zS(4;&nio*PP=Zm*L_Pywv&%CfmJo$XKS%L@(r!nHA>Fs*(v3b=^L^|#mUoLCmX~B# z)QU03>jh1D$jW(czYp3>r}Mga8A>-ilm7svf6K<;6@JTPX`e3CFz&&H^($d zHT*xsm}ow4^BtYsnntB*`Z$Dph+mmlnL6|F>;6_zs?cGSMo1qMlz*huV;qt^KyeS^ zRM33g=3PTon$dMDX}|_S1-i7Sk4mE-e;kghL5ChOE(u5aQuL_9j`!h1OXdA;T{h`& zZRCP7#3Xj(eni)tg=$)-Y_Mvv362sZf2IEQyTpvPwbmX{(*>MT-q~I~?Fk`5#F5jb zS;MrI{{U4pDC@C+eOLWjY9dBnlK?-{Oa3~oX`{rb6apK#BXEC?VC2*nJ|>aLX>kn- z^c^yTkV%(`873Cml<}xn9F%^`ZoJad5Eg#EQI)N8jv1qN2#2_0ygQ?_ts(-_0Q`x}Ivg5!59o(eoZQJqQ#0+Vo2C#^ zP4USBwEqDA(C@BjGcD2;6OFN2K*4CGqzo3c1$8w`nUimBfs&0)ZWrvern z1ytQZ7!gQWQkfRA6ix!gr!-pRQk7hqzCf2AN^933fVqwWlBUNZN~!fZ6f43h*8?z! z+L)GVOmYQR!t`twn4<+xOqI5(CA5v(8e}7C>!-JTJPd|4-=oG31n?=zrmJ8uLB@lV zO_5I70|M4@q24Bp?lK2vJT#*`fnzn>BPlT{G|U;v%ws1UtN>uNQ(>vo9wfFVd>l-z za?K#cO?C!QS_hTlJTO?^AT+64o3G153-ydIPOR0M{{YR z#&?!>J~SAeN$3!DXP{IXKA0=Xq;IB~AIwk5kLI#;r+$gjY0r`Y<1 zQX=#KmhF}dvaQQxb56G^Gii3EYM=q*T4bY|O_9_|2_}}lAC6ozH%Cx~eKF5rUfr_6 znYd~Ki)oBo?B#vJbI^xAN5xirAJf#rc`Iej2<2s$Ljts5vPD}doTL5>8M;= zB&&SxrXy$8!DC{sQ&jlUZ?Ew+2%2FF=%}`6#z~&#(!Qu-Ya4XuMjXB@jEDe?p0obt zJ{|chTfwSZL@$fQcMv1g(;-iVOKc=ZZ?MX8GC1dP-Ut0sU&N*a8YqeF^{bH$ZsE4& zA#ld7>a-M$uGRklTDeqZiZ`*BI7zXS4g>#ci^lIf8!t8 z%!m*yh(^Dq{jOJw9B{HeuP^sVZ7S02YC`F?M}p!h8;_!hS!3wT=1xCod?YSUCQu{7 zBe5QT?^`uH!i+?siNEsb)?<+^b#{(XA>ptL!nLRR*;Xx3#CL_U{L#b(!i9ZNP+bu; z>z~l?Zx8#Bb&jm{X&Qun@D*M(_R9`qlh{cIZPn8Xfu)t`bbo(#JJA37Sn>nH(99&iPaeh55KbV$Nv<-hx=~mTsFD+@B zTTOR0#l!Kh)~+{T2YM*m*$CykJTQp=RZ_-4D*h8pG7=ii|9Bh6dylX}O z0EW!088PWHRq;R`FY8ILV}>{oeLPD3UHrY#yrdrfeMVR~#m4F7WmaGHK&=Obayrh{ zo~of3@i@`QD2R?L{x9K5kD8#pyo~7=lSr!MJhBo41vC|1w>@(s@+J{JBw`(w7{+6e zXPP5RIy95d>JhsZI~sOfzUW+;I zsN{Ga#QS9=(~l!uklMY0xrkmsXiXMz?m9Jn^2`}{PYM43HMdKffbbvlQg5o=Dc^CK zoN+FHi4wST8xezK8bm=0%HRQzlz?iSzzUkCzoL11+%@E!?i?N#@rt?kJ_93zOP5f6 zBh&onRjSnp?sj6AdbYdg8HKf!EpKXrlQ4Hags#7-oN>Ts<@|AYu~VL8nV0nnW!kaae^JiE4BMr8CLlicaW2uuH3p zi_6t`082-@^a7uXM`vmh&Cyrcf8eumhY%GLys4%_BVoJTg7E=IMHC-K+3C2)3_$J< znp>6NWuT&$1;cAgg5<4f|IzPnzGXT>rbaf#mKx-3R#20Glv1*-21J&?8wQ6XX$rv9 zU~CN>3b5cp#=xr%MG8_aMgqiyBMKaeYo!Z`IIcvNGAUcNTDe&*1*JRSwGFmJmPu8GK_6Hw6;Z2%X5~*IWUSe1sw)WvBi!H zO|{72wRLe-+!co76w(sr)kr&Kat(5e9o21E1H&-#hZiJLCRb8wH_Sp@dUp6YmYbo* z(@llLX{F(Dw9@rj5rh^%CRUPdmc-k1N^1nQ6gUWSBP38-ij0UYw9`dgm7v97QV!Tb zV@TUurcwiR%OjGR#HMk{9D`$*34+`=bFBv1D^e6FYmh?a7^PKEoFO!*I4@jm20?2| z0ox%gh;3M$sL7C4Ly)#%U3y@)PGM1skcN@tMxi_Scge(`ga!hm5DhEqzUUHXji_D?-e7AmidMisNQ5_=)jWeM}D3IDAC-t~OEs z04_cuUlg_VC{OI;;uQF$PwG4is!7H<1s!(ZCF0*r*?8AhHwy)Ym~}3KR9gHDNF6rm zm*LcK%H%kQb1xcov85NYvr*J-+PM*uOvYKLy|uG2R6LJi`to9O9NPv-4r&f8(2(l9 zzR!&a-)xvNJevm@dAv&SyteD2{yp0Gs^RE*hPz_x&`LY93a#p5o@-f!BKTQoLWcPmA`m7xQw(LinNl$p*Z+1OVzkoBU|cEyXg~&2y-{ zmzNSZ@8OP68L9ldz8+XJPala9TsX&*R-=eejYRvsEnGpY+-QBJsqv4Emb5%p zg{t2F0JVYw10j^XUysN6sF8p>eNz7bN`utni4xlHPqTA5{mhp^iC}`9jSt%XW?$yX z;g#HGf2G6zuVXe3#*dr6vELaoK>v3gMTa(8MDnG2MKWFyn`!|7mPVt21n zw6W?8igf79S;SQ*xShwS!P<b0t97s_n(A z+~p9KF?Kl7QQw3pTdutuO5x(Uw~|jxPNbtP1q(6(zW)I5SvmMdhVhs4SzLJ@h>LwP z=5104u5JbWy2S74M!uY+)ApTBD7|pTao{{Lse9N+;d1ca+j4D5m=Q(+yl0qT}gahm0Rj-yAp*J!5H*zsmKBX0z_M?jN zHOiwL@--h*T)#0JAlw2ETb9>B^9$RwEgiv#JX4DBS0i=gzYiihS26~hDTPa%Wy3gs z6KN?O{zt;Eo3n%<)gs`}r!lo9I?qJ)rt&yHE(%XmUEnXg~-TW1lDCJ>KL z^AjnwjTc&RI_eJ)tzeQWbYbwe{{RrKV@EzrJ8<9gxSG6txZ_+l>l+PY%hr$xkFR$PAyk9QeP1uRd620vSCY#*rV)e=$pThThgSA`v9;%^w$y z&czsf_RPQJj3Oq<=jq`;Q;`nO#6@rZnLCS6^Io&3@e$cUdvKt{6$qp90Yj1gPsNy$ z$A=vG&QT6I!;b;KSEu>KC-YW|`Gu=p$6_ok=@(r8-$1X$;3WdmhVR&ru4t7yh;qQnFj`BHSN_}mCPAxgff2acYjZ%Cs+)s zGUDR$N~YAjuiA4)j?D7EoE15CFoK*7h7)R*-l$#+5@p_Na zk>CDWYTjjn&RYxgT_zR?B$8rXgnt2Q?z;iUGqHBYJvoq^e|UeR{N@^*@QDy4?flkf zk(qb@*d;Vr+Mz^*NP z->K`j3#dfU=&dVT&lJ@T@t%@zy=$A;&rgdG;5U}It*hHCZICvNu>AI$ctG5Pd zxXQ@t!k~cE2YlXm*z@DxeVQ>sP?duAuO{j%b#9T&csc3;`?~n&8QK_lO@`fUO>qWk zXo2CDKJn1k<*}w|vKk<|Y^I1k>%>Y=7wUe?b~re@n3;77b69r+=*dSbIA%*_wkpPh zZs7FHh|b)o-XfNmfK^P7Omkb z<%0mr&^LdU8Op-WRwe{m(1nLLb> zlO0F2L*q61W(Kt75IHh&${*8YI3uv6PMzheYj`G@N+q70Cb^l1FNhzqzp_4A&d*UP z{{TiK_&EI1Ib;6lTJRyG76t{5#&M72pOx|@;PDEzh)FAk*@CJCaIy{X zI1^3r#c86zU?nJN<=bqoQeaA7DhVnMPBiB* zv>^t$D@7~CFCO^u(>RrHUC7wv4r0x3uPDikcmFMh;|GH`N;O?X=^Y}f#Ah2qEP<;ivDw*f;hkg);_K5m$_$6Z|Pgs}`YqGrgt4 zJdF{WZUJ`!wGGIMpO$6elwv(YuM3li#t{JAM;8oIjXuRK=D3dVJ^Zh3<LF!~#gIbd>2 z`l+5V#bcN7s@ctDsYY$C3rN=LSuQyGe-HBPSTPmIWQ?(%A^cy%^)V!axA7`y`g?je z7Lnhj#B!E*j^T_&6<2Vr@l}mJ92xQp5;5U1{%@;^hDjKkApZcGrv`~V$Zx1>K8?~c zm?LhCqwI!YXnZ--8EOQ6xZHnBRh7B{xS;q? zCHQ~I%5vt@$^ZzS82T_Qawv@8MziDHsj%HP`CM6 z9FxX)X90T-E-&^-jhK=>U-2py_OrxJnJU~vr%DJHP4K&#)UtQ)URZKSePe{r`KaYq$ssMozj^Lzi876C8Q1z%TTMdZ;?8;J zjwiI@%+|=G>ni4pH)%@vycFQIa82~Ix`QPN-V{vUiqxI`Xw+f+y znK{?JO4RWG04QW~K*snF7r{9pA$$h@4c%+jaeD4UMLW9)<3I!^Gxk{suZP5~mJA$K zU*~^DY_aJkXmg0`FRzRGOKL4S@~M@^3>czaV*L# z;1W?7bRpCq=In8fOwb;U=z8T%S!b3s2dW@?znqSf%QDSzb1tT0)HJCg0^T%p6U5_v zm3Doy0<{m!#6n*I{ZNx z(|orsvsVBt`eppu^?#hlB(ugq5n|FEb5GUu-G0j7Mvy$D88~p^5<~lC{kvvvn=U+< zq;d_v*-CDB%i=?o4oJ;MP;Dmq*`StX{or|479c48c0aOwKWia^CnQfTzMtzhaEy_u z3r#frH0yBP>soIKrJem3F6yj!64e#(E#sKkavVfMA^Lq^>6~fjh8ac@<-`0aLFDf@ zTSD()t1NdyRX&8SvP7z*r2$vuN9}US{(ny+Q-`L$sQPBZCbAMdztcr_qkDa66wj>Q zdMFB*8aZ6msqreR{8i*W6~T)fW=Dq}FXwt&@rZMbMSoQ;(eH0HOL)!o)z!ShW`tW@ zNT5l}>=&R7-=%XSQI0r?;1Q7F;^Kh%SxU=PNB;d2j3*s#k3Bm1b2;{J0+ zOjzSWG4&&LtD7BnNR9(!@!ZPGAeK@X$G5~5pDJZo1n}g(D~Q|r&Q={XfwFxqd3)TC{(#U8%B91hB?>~%_%Rj?bqd;)_iq! z$|dHtKt!1NqQqd;7;W1qww^AnrBI0E-G62LFdg>@JMJAlf=CH8tu|qda*(jhLQOW6 zaUA1`*^L41nUT&2bK$6oik-w#LMX%$T2i$cD3DpgLQ7CvIUJXXZs(Wis_g&7yv|*HqegeM<$uw?;546?qA$EndU6NNIA6ej$nQ?}Nnt9ybOO zsqjepn7+3Hi^gT-Ba{bUh>x^4>F=HQV|GTDE}9b~ibQ(7U&Qi#sqGH8PnuYwV;INj z^rRDcQ_I(_{+nuUYt+jut^WWU=S7P_h969LT^3H<)#N^@@heC9apaa&CruSy)cUgb z{{Uz0mwrT@pm&Ctf#9c)3j|LO%$-Qg4foxkl03>2&60tq#-&Ra zlVClRnw-#kQ##WD{ON{xhc}*TGa~6%oOimAaENvl>T`<05ymZvBD~OFmhnBuo-A1W zO$2gE&N>0aft@#H!t=-a-|j-gk$aZM?F#2^#beq=+l`J$7AF`eceivtBPJx&VM{{f zt&Knb)AU0wTW++4GB8>xV*qekDPW7Z!D!)HMLOVBj4)djGm%#b2*%VE-l#Y&m9$-a za9Y~Nb-`#+l4ThZSdx_9&Ph30EyfmtUGQ2$uv!dRfVAXoRuPdU zSHS_1!0mu;n8wqH;#iO<>z49z0H+)TrELj2WK|IoxbK8B0T8kghl!9Y#K#^cR=7wG z3rg1&$dxE(jO9g*A>Al)vc{IQYU@LhJFO)b)m-C$HOh_!u25!YxG*Pu` zfY+@?5h9Ty6wQ^P>k{OKNq4guW!{IAN496=rI2?}cFP8$L9l9M0@l$jPT`2jeqvO} zYUJ1GI64L==)`IydMEQ`V`x#Hj6UomQc^W#D!OJy5-ze44?;Ym%tYSG;*GAm|U;IAY2c0~yz?ZKb@6)?y-XL-G4SbtkTD^s|tOu5Q~$IS3l&m)qOfE|*x? zq%%t*qZ%0~HXy5gmHz-+?PgTWxUALeHR2FCi2L% z_*s{~`8CV%V3{W6!^7&9{{X_u5Uu2DU+z+ELd#xj>q+i3nQiToKyCfcxcCOlkIc++10eGpEak^Y>unocw6bf))FQa_%E1VnvdY!pWauki zxlHrooVa*QZ`JAgTH};)a92N95^ra9<_IQFtXP>}ZZn~byk>x_n(=CXmB%r%;>I~k zgXZJpju{P&f4NzCHn(Z1vkS{xo()#wN-FZ-sUPtiF^)Mxh>-sPWX~LN&K1Kby6053 z2H~fYOPjf+4-3N8s_~;B0B^tiE*yCMAOXTZi;Mk>C}5V=P=Fjhr3mjMlF=o%vsH!w z>pL&QGdC_(lcRL_a&sQ4Cv)`w05!A2sSzo9rS$&*GyK(;TK0o4sFsN&5J?bO;4&U+ z<6=kJ{{UN(zl*`N0MjL!!?rHHa z`B_x1b_X_@apW?H1~p&2kMVz+h<_~UDGVB%camwg(*rOKP9&O+N~g1APE4RwqsM?ClQAai75U(Oh;d|w{aGt+Jy0&W(*=iijK;8FCfO0YG!_xWLyMe>UKON?Z_tj zweFjHrN@1wY3%S%7?4XSRFJXRtJiI^jBqf?!6|(uqedrwxq82w6dLPr=#l+M-a6Y| zCprB@^}Zr2#y&u@3U|vq31+!)iy!8-~G~9zF5-ibyzh~e{j5r2^2xN z@nKRXZNQJ`m;Q4k@tk}y{{TDv=k%Ew86HTDW6qN$-{}{G!>8NEEuy;P#Lc});C?2j z^W<=7Zag6V@cQ_Fn8OYT#v~qB#r}8nQ;l0h^7f+&@YG%;WmlDWawH$+r}JhWEk;~t z>0ygem{>8tiWbkw8hxGIcbYz|@mWX@)->W=s}=*}3U^oAEXmq3oOp6WihskC@%$}A zG@~QMANYiZ>&)6+mbpHe3~e3sOX?(&#@?Gy(W}t*Ih_p_N#YYH(01qQbA-gbB=lug zUTw3#vV~)?w$veqe_fV@HBEldu4^)A<&H+>EO-1aDbVl4Cn#|vA=a#Jlu0g_g8Ef@ zNRMBMw&W@+%YNBZu}&xJJS}t5PCId)0p!K*e6i<8^)#XC+3Bb~Pp)q)?8J?^v2HAU zX`3kPG{UlNJfF<^Vg8lB$HaGxhjKa*K8IjeURiaEHscS(Lr5M**_wxc<^KRDDVQ0j z`>q@_`u_l;#$-yoGs7=;)Qz*f((U=dZKgU|z?{z>QWdMyqSc$PDh#4nr!owtIHXaN z9KhaN{{W>*tnIJ$YrC6>ERWP~oEYLUaAb6#C5Zr^Q|(o=D=eXkA|_s_e-{_kANcEZ zazhyPNjW+<)#O+w0cKDQ0S9C5GYj(^LdPZpRm3hoOQzFSHCBj$FDg*)^Y_L%ub(8x zJ?wcVzFe9{xkVJ>R4Km#?oLyS5dLK@-R6X+8@XKc^95dUhjnu`_SNpq_Jc2iY@4i_WQT~fOaHHQ9 zCex>6sAXa|r%{p_MYas!6ep&ho5L-+M@pYiRPXZ3Z+iv1h}a;EyVde;lTj4uyX_WZK=r>L$7&8Jx)%@ffikgMEfG|noB*I&2 zgVjm>S=9CiYmG7R@_%(d;{O0spZr9gf7(99mT)p-`s4o1CS{T-3b^9H)9%khgnN&G6|-f43rsgZpJM=g56LIlb0CMAY_@Z7*fal=w=qS;VZ-!EJw%;ljk;g*3Z}VL~w4X%8*6HyJQmr3e4i^l25zxD=%8fr$!C zF|<=lkx=Opy)jZ07-U#dlMDz`Y!<~$tC6)>S-fx(g*JBa$l4TGoCL8;u8+l)lG7wP z-ylmBry@$VktHgz4e(na5gckUwsh}H0%^ZT0(es^8$gT5jItrR5La}m!dVccROAXN zQaI_pA&?5VSyQQjG~F^QOVnXyOY4B8#X-oF(jI83zEvhBDgk%OtrVkm0AxF5Sp|d` zr4J7mBAJ0Ln)q7uvNpUei16C*t`X$8mxZw&8%-_=hSN=i!)r>Y2LUNN>xt3!a4 zu2VyiGDuWYkhWo2akRB8Ya($!LCj5Vjv9<+6ZjwIOZm*BBNJf&>QRVqzdYYrqn@83 zg#Q5PCpt0`78=Y}PQ_h{xZxs-y8^ovb}F>0lTraAzBZd(iW)TNd*ZEpBX7eLtdY?c zgjTx%GC&fTf?5)(P+5tl+nUqcCppeXa%ErcQ^HiHCDd>g+!`L6V;z~tZfbI*zLQ9( z0Y3<)!nDhVGsDIF7sARUU0M!AC3wo!tqlg=`wEKp_;zoz$0e#D)PUmRh>IN26iAOB7T@Ngbx6FyB=@je z-7Wpf&^v+=Nu?^aYA#oZ;T$B62(CFoIO8rJ1O%EjwXw63=6MC}$}n-xrY9Q^K-+%J zR$RPil&k8;M9lxr=T8foR1Y`z7k81SG_>yPBK(9+iKQzV83y@;EMfD;DN`{HL5XycQJ^6pY z9*6Hu3^<_L}jh2!}wM%RjSXca&`pU6KEDyt4?3_p1A7>+zR%TA-HC~_LX&JbsE8>p| zD(6eL<8JZZNe#`x{q#-6gl@a>f9410m5h`*2@i^6o@U1g;g8cV=fw@FMQIf3*AZLX zaWs;sJw;CHkNT^U#W_f9Wgqt~n4)AoHxkA5eO7%Y?1r^#ohyMB?1Pvn!?`sfmbtXk zVi_Z`5y|{k07);mT?<##&Wh=9`n*83&6!q>QZ(F^ZR6ojvnymIa^i=IID8}Y z&+7jGkAIk%YK4$?Oz!mULr&9$rj%CB$q9JjkeSZrrl)#W*|QrSSY)3TPh9^1(k>wx zAL)NNeXZA)e9eC(H*h3(&?@nTD$C(j40rgy*5iXDGwGvoK8Y}xo*_W-{{UG+>s_14 zTC3@&PJLP}N7INZ5$Yh_sH%Tw_N$iT!TG#=d_xI`^S_C&H~2(jAWUodsk238<_#|3 z!x*%?bsmCTw>5ea2-{)4VTnrw#hy6-02c!yXNZ7(aQ-eI;bZ<^{Jhol$&$v)QS@h# zSl-Cs$`}!`PDkP3J{8S|r?oNV^-4aU;QkNv%i`mPI~T)gUB{bz+vR;wUj0EYELZn( zsA@kJ>q^nNZPSiq!$X5p4jwKEw`(KE8m~|ES=db*UenpcD`j^o)lBqeU`Z^jK;%3= zBbq}jm}k$9G5%|f`^+-m_mT4c6$t#f>Q63}r%xPC)}$FB2hvgj;)(uV`7^1nT=(^V z7u6=oYJ_3OAZv^K@9QyPS5+_=c(Y`u8awSVPo%#IBudS&%~KhmrOdBjCZ%g;V$i_IUR>@7{H1(F zxdn9y)PDU~6VPwOEja%GH!P>KwD=<<4Mcrk!TzSz;LDK_O?;bid3&VTOMK4Pl7{t6 zlrDIaxu=d|c7$ULk`ektZeL7!R?Md6(Hbg{19T_cbj@5cZs9{I1rMVSM^p5a(IlfS zMK=R_S1iu4K@++~Hj8~LnVXlW0ivG3cFggqh}qc3R{$%b5M1gOVNip~>Oz|AGTsPJ zcOc`2P1ix@G)<;Xr>+TUFOwPQZ~2pbUMxG)7-E!G7-tQT)iJneWT6Lo6HK$8 zHtMlND(V+fT*VQMQ5{8JfuXKP6a-1O7%_;GcS$wno~Uo$;>zp~R4J0)Xy~MYP5#iY z`BcwB?7a?Lcp`B~#{U3=BfxgQXz8b(Sn|R%5&r-wi5+3CeMVJ_SG0RBUt;MiCAs;s z@+DwtHsmaLiQ@85QE82{oy@Y?FfmzVtRozAesK~er5)@cqwhBx#B?@dXAx(xv zlqs;tl8R87xUNK&B`uWHoUE3TqH+YGqA(J)u;d9{|m3YPg%dNhaoQW$<2lQfbikT!m=>1|Z7tIUrkfZOPLXQ4T*6S? z1#=vfQ${+9Qvo)#m0iLE=DRM%ti?n}m0Hs8NMppF72c4-B)lz%vRq5T-=~L(cv}(S zw9{b-!)r}}ktH;WfKg=kW1dQNGV*^(>@mYtt(m&d=#|UAc})r zP~Ix+RkmdzLa15|$f>Ws`H`PAW+Ed96xmdLrZhcw>xd#$o*UiAF!{))@~`!nm@p!bk_hFlj(hnn=-0I|TxylhdY7AeM0i z>=^E+=8ZA{%NaAt;GGB4n+!TB%b%s%>H9wd!QT8AAcO!%LvCs z+RIKcQNCz+((}-3StTp#HDW8&)5f2(UApCj#`u6`J`#9<=dO$uv?9`;L!=6_a(ibr3Eku@vRlJU)n zBRBv=M90$H2HT_bX`r~YlV1egUo?u4!rR2C7_5xJy1D&~t2p71#q`Io`_?DdAs?q5 zf1Snu01~IG%X-y)BGJHhr4R-9$*Bq}*x|q<{!oU0#|L9C=-D*pgAUJH#$^#^P8y0zySG2N6hD;~;4ej51GAvi!o(qk?DmJ;CM z;ed>&{Xa^*t&78J_4(uV-iP4@OmweKH6p)GRXn#Y5$XQ`bc~rer@#*n`=l-P_L|Rf zbj1C@0i*Rv3|@np9;9#o00WoD9ISCR;l(-}XVv{5_9#0IX2s>4%OhJrimfs{o~thO zE~*t=1pTgG&6Z`sFaRE-?%`#U5(AeMztaBzrc5MuU+5yct+7n zZFw6yyUP$r&09a;DeJnBLutbORNANiV5E+Rh)9?N!D`DkmroW3{OSvwm zhEoh{Yei7QXLca{mHn*QW!8}ch=CCy#p`nCDDnImI$ues`J&x*2_S%5+ca@p$;25O zua8hW=C)Aaz<79%6uzJ4xbns^V>|$nDRFSL-c%FM6i{BnDnlE3DID}}J^0XVxx{OD zK_(}2{MJKR5gRd-Z~7@6mVxI_FWyaed8w?H4BrA0UU0S9xq(nu`93aLo0C%N<;UPTq^Jz$z}v4T^rYfk<10BLhTapQ?F{w@zwRG}6aL&Co^vav^&nPjJN2B=R z{!t>f{JhsR$b>q6sWDr*5!z_nm7)@B5v_SY*=)_9YhuW5aF3*ZIR5~uh-85T6a8)^ zW%r%@-=b>rK>BQ#4xvTJc{wSBR*ged`?9QEou|!=5iuX;?fh(KgBD1R814M%`c~d~ z()#DlFvV!p zX~IPYzQpy-R!t-alTKX@G5r*NzvYOv?KUNI`Z6?>O(nzujHhCxEePw&DAMar37_(t zaPZ6Nb=dVD9IDPk{5$Zx>Mb?Ao92|UyT1C}mY_XHVh^dsjX!#=(Z9;hhFONQ2NYw& zEPv^L%yyVEc#tG>{{Vc>bbTaSNpRNmc%%K~bvp>y)c*j(W{*C8AUL`I0KRC{XX1zl zVt?HyttSwyP%^mU>V8``V1aG`jqPd{F$TMd%7kcv9m!%r-nl%I^q)4&(x{Q%yUcEl zplUn)h=5^(NDqr2dmRuXJU#C>(r@mpE>`BwLlmpw(2oK;jOg>?j!5vxSbD7ZA(A{Y z79OkR&p26Xs3Dk$FR8pl?B3{40DVD%zUt0bSK0E!YMkaoola*ptGaYwYF$()cHj7T?ds{1g7K^JeVv>iki`lYi!9{wV(d zTly*NZjvBnHC6zF;tu0BQII0XClthkN0?L@G%(*bu#;1G$O;h<8A&@-blc~g2eg?l zRbS1Bb73DqVj9%CQd_OE@tSZ6W@F*fp4qIy8C~>imk4D)lQ!jaYx|DVT+u~)D*pg( zcHM?Pv;A1GJf4a(e#LOYmE#Imjj*Nv*7SiGTt$RnVnU0IixQ;67A_4;3L0@yfh7+6 zWLOm=fU%{FGB$-K84{{e5C%k+B?CN_%E@XdRv7|V(wiR`28 z1`A7c#WcN8oKs8v1|uFDO)VB#1BE;*zNhVwI8#Y&{exDcHQJm+F)>SwEWJix7CbG4 z#@3hc!)c|$JT{&edS?hI;a;}n<$x6MstZF+##%A23%;m4F*w(S-&ZTsD>%{uq)f_a za-$Y;OkrR~`6!0qRXAk9O*RHe6ub;sE-Q)%S;q(}xM8(aTo%YL0|li~a9ULc8)WAh z79~iJ_OUyPC__tRjB1C2cy`Sev#>E_-yiO!{=@z{u@`mxvIM>Y@s?v8Wh4Gx<1jTq8JZp+^i#lkn<|1pdmP55BrdK5 zH;S}zS9BPwfyAp##F1XuLPC_+HqioPkrW=hh#4rtN04P0Nb(77-Grn}IsJuoqgVK48D=CLeEB0F z>(C^(mNKk94Wz02TOFu;amTR*ghuPUzhfo6sYxUHymEf^jY)EWd((e&{WN%4KEcg(25Sq0_f+#zt`n<3Kl@2zR_UC(08a7mUxu6uyRi1>K@?U*@d zAuW%i>2Y%AF_4cJ2>MbfV38$n(YC6$lQmLKjHLeC$zEI*oU<@Y5$isf{y2DC(-0$M zrp<2*_OBMO<*%KU$pqF%p&Ym!_v=i=6ET(J9*_4w=Q!dAjmqO?$J4;w zi;*A4FR1`+?eA<}(Vx(nT|yBU2=O+>gMT-OY`ciUTwhT4{W5RjlqGdyyZ-=*QqRjb z`XpBlvVCnOJW#Y~#Rpm>l;l;vlLk#>a}Xk7vTinAvymsgP z>?%iJ*y3o-mrO<**p#LG4oRFMeKdH#g%4|WrPyl1Z9>}C_>;y3F`5#>n<1-n{#s>* zGn6VOQT}%S0PmBZ9I|7sBaEr*w_26-s4lJE-$wPQM3q@uFn-M`@QQfjri3653F6CN z=CQ$u0Z}80y-Cb&wtiQ=g4u2DC0~j(1K=RF6e!rY5!W#Yt)glAz1y|Z#T@gjZNr!!uut;uS}tT@%~IpXA5ECY`YuK?COsq5d?_Y_uIc&@ zm~Awx%XuTx?n}iAB9<#FnyIH=HS3w$oiwxImPnD}N7XOtqgP@)Fy_d0?<(8gS=~wq z)Fq0G3Py!mK4)t9pZM1``dw*+fd1?stNKhKsIns=!D$YaVR_}NZ>im~$zvKkreIGY zE1LRoulwv~c6_na%Zfi=)BbPsrTr%(5V5kJllhCITx<5aXttH5l#uGes>+~{Yg0@) z`zIuE8Q7rJImDg-PZ|1CFEaTzNAnTBxwnm;`6B_6P(V;N9z3WsA4l3bH2g7<^k49> zpa70QJzvDO=S%Y@gQ43+>0941g;pDN1V04^h2FdE`wNCSu;ZuPfZ?x`Z&;+eW}yTY%pSle&&X`10E??LN=MK%5MxFXNL5X~fAg6n~=2rt>5V zbS*W+{lg^_QV2d7I|EO&GgBQQG2+B`{{U0|ivy-H99X~7TL<%udPSzUZ*`&0E~1$i z>x~}BCa>C3JJaoE^FVS-5sp#9N74OPBTYP<S98@z$d@c zou_8PIB{+KUZ<(Srx1Vx-ko`0U%9o@*56Qi!EHp1$t9b8gJvGHOBv4L&PmIpy~j79 z+PA9(1YoEfg?Ib&pO>aq=&}wOb6sodddgd>0*7h<03=feO0Rk{R}Z}j<~9lCd&OD_ zZm5Kv$lol|3(p?tw&x04u&~^Y(5z?;lBY`ku+hJ>%$?`xZ-Y=M5I+0C_zo zBD`EsgY(UF`#&sB!ressFEkFriDm80vjHpMBGa{4C*qUR zDS8QdD}Sxveeb3ac?N?oqR|l#^K@R zjzG~Hu2`fDHm3b@NZ~7>%ArI!k{i8K@{ZKo z`C>}YnJ!(qsi;2+j-xux!#4>Z>3)Rd6-?k}@vV5mmid8&ZE294QE&g(^pP02s|dh? zqaetzDl9M|O|UUr%#OG%RGr2|mL#bbTo#L1(k@2PY7$C2WJzL57Fh|($zVzyhCr4y zq{AReDNTkzlv0xnfh$Wm)Z{G`uNu;rL1qFXn_(rLI++qvNV^m9rYWV2G6bzPk+pR&TGHhh+G$Y`wh)>{M+GwI!H^2P4K~SBDr z3WvE+dW^=*0aOgOio;==?6?8sw1JY}iOqE4VpoN4rbb55!nh@Hg0!y`9yyT+rj^z; z9kU>8w79NIiD_pY@Nq3S$HxVxoMHzeV{1y0g1K3ZG6PoJKavoCX_3E&~=# zmB!Iac;U6B%ZgP7;{~lR7?PDm!EBdOxM>PyPCO+Gc$`Q`YbcRQ)>Ln{p}u0dT!dxy z0Wa$Wf=4AbwYTh?f7PhWOr4vipEwWmeJz7D`_}zcHlb~^82dk`Jh+F&e0eSwiTus@ zVE+I^I1lkp{fhYKxp1>j7W^{E`!T2QpZg#9mGR4MZ)qCVR|*GqV87EcqwL;}BISSQ z&xigcMoG(%OK&{E<=ZfRF+2YNBz14crdK>&n}?JmkoX6%cZ%fr5>+z%MalD+2MEaqE{i2LW_)8D9n+ac+){#zQP^_jkjJGr$MnbjGaNWK|-^_6AwieJE+PZ$Nria6TWq4wn=sLz!3@@Q$g2`J&ad`y04Kme!^umKaOct^CA+ z{KC0F(Myg|H7Q>UMl2jwWJHX=94fEp18k96v{T7_cHh2xv{7ZPjRwpoKwF+LI^PxGSLi!}JSWnb2cmzMQ?chiXK zV&3OZPlgAQG3yAFj*rtNtig)U2NY-gTlzSdWYUf3kuT`0YZ@+#scLDf3)rTPAWgl! zIJ&Vu*$qCUCOCL}CO7p-a7thZ$|s0_5=njL?MpzuY3-yF#NP`-R4N4j0EQ*Ld7Fzv z4DqAsE%~rUQ1t}%-sj7ncF~}|vA;Icfx_W`F>pL^Ul)MsTB0K)C=>GspPAssI8-Ov%{NLvz{K@6= zmXXO~MA2QjLvaNP#x|iX`#DCBRdOPGaDNQHiMvg!<0dln$S^%SO1rhzrn0+vF0C%3 zEi9z9QJ3tp)}xWG`Mu4aGQ=esjG|ki2?V;g@z{v|oQlss-&(P%{mVPlOK z2NY=R^UXs@9j&v#K(zp`jPn4#{r_m(MMX|4TJ77iR12Z@?!2xJv5OjyMx;??1vYK zf`yvQ16AAGERII#LzKp-m{{V|+_OEGo2$lv8hwlf#jPJC1+*+7%V?XBq02Dv0`R=nrlTSVw zkNEQEvs2qM95Vzn+OnOoYcOJ3ls4y6xM^n!<%vQ%1MmGa%==LBYO-JRoy0()?s@l` zt!?0%e~nC1klewi#zy&Wj%0!4;!ZxNr~X;Fi^=w)gW{4yw@r;dhIU9sfVEXc%cBI^r83SGEg)k`w1JQyD#E#qI5Gui z9LF)FyN*r}R;iY;T%#u))gacq*%h}ddkRZGMw_ay%lVFLb)Bps>BZ`o^Zx*bKk-i6 zN7-h6sqG);u*-{?=4O&v8QqOov99Mi+0IipBg9^Y7~>s)q%#wUZVGG<_T+;gu+qLK z3niqJu}WG0BYNs9HM!{jgwOm)f$>*vR zfXWVOOOuXu5|+RrZ!cg~D+&q@jB?y~$>!aQ6pu2Nvk9Y-NT6y0)TZOZGC-mnusBFT z%$D&=vfP>g5AMLJeSkFo04t7N6Cx-!*&?EX^DA84!v&_FF^bfMGf?MN_@+4UnzOM^XI@s&BHTs@P7=m|xg1-FUxtH|5OWd()OII*nxQXIG)5V!d`AULQ-{;&2-ahOa2AEN&N%}H#ehg-1p=CmJG zhIT%nMOIpWJd|3X8}eU|m+fY5QgKf2)xr4mw-O;DL9%~`{vtolOeT0_xQ|FSw1AN9 zDPN6L00+cI$iu|uBta25FLVgd@h;EP`2Lbx`X5KJzrQx(V%IQ{6Co^7)YdSpK&Saz z=0VhC$r#@creE}vWH`tNYrj|Ze~DL0zSV3ri6nWhB)eCT&XOqf#B~8UF+U$KwAgY+ z2O#0$1M&4SmMG43As!##{&HcX++SS9`cql8Yw<{#Wy5S*KYzZ-N{gU-0QQXOWc7IeKyM{{YI*^O9X} zQr1SXX?FxG7uKc_gt%@M5-=EnOb}}{5eFM;T&F%=(!+9IOuw~Q(bB}EHq1v z9n7-bnajn@7c&+=87u`6Qk~9YX^F{@WY|ZC{U`HUaFaZOW9c#f07#*tY43OCs9}Os zlKvSST-lcqv@uli0Z&?w+R5s2h~^}ZLHcL)amkU?aAiC~qx>>q9%=GUr!J{)^=ai3 z$0w^Yp)^H9P&VpwbE54i3}=W6t{ApX9wkUigj>)x4=d>x$qBYGi+NQZXrwfg)FZn6 zuD!EEk6Soh-w^)*O4SWafFfgi{{S^7(e!UlTgzQ4DB!4(u5O0J6>dC8-14u6W$HB+ zBP@i=mkeBqOB?_v_?X4CK6=w-3t@QC>8~fPaT*ZZ&>FDce~CpiXE|wd4_tqFTrouO z6D!+hQ>uA`%h5!)hSCU`l}*fZ%(1#hPJuW0yJoKrmoYp%Qa{b%j~A(kjN&(v#nimJ zsl{V!YcgBfUl&;J*~5_NDq`4uqCc4A#tgX3r7x==@GpxfjxX;o`Kj-hBh<88H_~Hk zYyB(YWs81X$tRZGHl|=|-%zD!uxomg^j90A-Zbc6xGM z`>D)GYdAJ7IQv9nH7h9nKSI-V%1N~ML;c#rV1LOOjh9nAn{tbdn^}`K-%NXvGDz~V zEOyF(rjZa3S5bnllz$j7$md%Z8#fV^l}$MHBG9`wsG=A%Wo9;1d-dZg1?9we3P z*mN109FBZ)yFg~P)XH>O7pJ=JG1YpZeaY62Ja^pAVd7Z1+yF|EvD-SJXCUSUB`xOA~yg#ScAj>VZpf)YuCPQ-Stx0VOLVDDh^0Wlt~W*J-nWqnxXqF ze^JTEaSLZ5VK6~cRqNrD7J`UU4%GTGveaApmoJJlL*d&8iQbPExw;#v?c0lkLD=Ic z2`ur(LuA?;h;A3KIg2P5xKe?MQ=Z(e{e8wtGiM2@1#FeFB^{?<&u1`_CjS6gdlBGr z?KZC_o_u)E48PrfS;E%n@#-PNG5-J^W}1EcH?WB!G-3ARJyibyO!RKc?QD9uZRyD$ zuOIwR^dCFz9?hPXba#jF%@^tN>N9NXspWd$Wxbf6gb5sv6Y(DT<=Ufp=lyv((glI} z&imIz7VFMBDJ(|do}`S=?EG9mS2rGJ%h)`DzfeaUmab-j)K&-v16)N>x@ zMyEE-E7ajiqTxtX7^VNw^r0CS8BO|NK~gyuDr_(zNrnU|u*j4lr5OUiq1a>zVMhD{5{fo(HrDRT56daOJHD4A}!*nu3e5P z0Um;bGJ_@9rK(`HbucS*pv6$qZgU!D)j{LRCly#wkxZz@!qN&$Q_nTIFm9-bprFg) zhJz(R9!TO=ie+*Xm4!09T3bqCMJ~dvfri$VBN=2$Tahvu0=hLhP=h2wE>FW`3a1Qw zG~2jjOcLEP1S-yZ-==y#|Xw zA?lX%{{V8wSc6>FhinvCg(=tHBm*!MnX+`u1%{;IWZZDPhKf4kWCEFhicKO?IUT+7 zqo@rBR1vU2Won#Tl#bno=DAFzDLC_-=62XCJ;lLVEg)XSzSrH55FgfHAs_1@Bv4ID zG>zhR8E`G}KLjj@l_!er^qkn zWbjDHlE`i(5$>$#t$)b)e$Vq{aS|mUe}~f3jy7d~)knSh-(14?4v=Ww?q3`SBEIT)fmV9Hyr-}hl$4E81@^f0GAf;92ZXwq;XQ@I)DnRmgUNuRJZv& zv9lAnxfAJa`bd<9_vu7k+{I_7S}lM#4Sf((DER*XbWcPi9jo@ZQz|eE7Le{a?-c+y4MC01+Ql zm9K9kheB(MrdZ5zsG3A$)x`jN{9eD|V}5Azy``-7`lK&)B)1W~_V(6p zP_i0#9anwSX2(UXl!3;0DkMfy$lZr089V;~c6fizO|VwidXFXS&N$x#hlRbqJNqE@AFv8(UXddguj}H(sgY*8$srOkgK_%(KSLZD#}5pCq5Lvd(=O+m>lQQ4(p)l@vPnQw#8co_JGaC9 z$03^-6(A}<$HV^VIdO;)AU!wh;Y%(pE%d9lznVWv;R)J8zr5dWMD9oVIg<>BEO-I9 z{{XpiV-&~|CExxPiH1j~H52$1R0DZScZT`v1Gifqmh%zAKz8L=i zoa=I#-~vBXKA-CU09lRd{!_TRnBAqs_D-BkQk|RB2E9iefy~`LxI}P~8UFypyAzN| zRqy>3@8*v&TSW3qu#*~r9nz;6CU4qz1L5F*X8_S*k)eOp{uqBnh|))UPxlH%M&!ywap}e zwPKjmZT`fX@0mJo*`Ne|ujaEFjCn@<)V#6zc^c}Lkt48cG+kf=uj^gOKdPWMyr?+~X=XE--5c+*Fb()=Q zvY$_;DYTbzH^br3cFaKs4miM4p<`A#CeBVZB8%6<6;quS7>mE!JqAi9%P12gLA!c2 zy9#ou?c#~)%MKHQ{oio;mO1d zPgYB63u@MioG2D9&xt*mPQoiS9qK_2s`K(mOO~*r< zOLsg=mvKXYpskVs!iVTMM5!W9fU@k}v6kyC(UGufSMSP5Xplxi)ByD!BPoz^2^=LG^vFvea|z<= z6$*wGQLxC{0BOm-)ZfPmNk?h-Q(DZj#MEW`kFmptQ9Lsff#H-~Jyr;1iHwDU&UEX@ zFRi^)*}(neeboN|O!VH#?RtiB)x4A3i6iFQ zvL6Fq4D;E8;z;+(Ol2Xv&$V{6cp^~Dvb!x|P1%7p0A}A#Bnj?t;sJW^mUSCTT?0$9 zo0?p#JX!^cNf|yOM?XzlhQxiW>H8y9h~eQ923!3;_F44Pk+3$d_C$;bs+x}xn~Zq` zg@+DMF*H>{%MiUzDO6L1lmF86t7IH?CcuRwfr`e+p-qMaDK|`sLKL!xYjo6{clDG>GYz zrK;eyaKM$=s@EV4jO9U8DVWx+`gOu1YfXA!VBw`hOurUlWgDw%HpC^m(+#V(ISE7+ zSjkMroGFkic#Nvj*9>hG>KrzziPo7Yl~&=l`H{o2xF{JEt{Y=%Ra1?mFBCYXvbhOG zR+Y?o3S{M7@>s$O@tG)GF-qZu4#JhKl+37VnOa-RVui2Lzm7&>EI-UTqusf-g}Bc3j@BXfGou%3yA>fbDKiRw82ADu`AFTfXu}EDA=qsAAU7#v0ZzFce@rJ=L8WtBU zXsNeyaQL7vjS#H5JcoAMAawz(>Vovr?IEdSRy}vfoYE{#qEc0bNL~;o!+M>7$jJ39 zWO~T1DgdmK7C*|H55EQX1Owa@%!->vp)1^V`|?$M*>IE1NU>_r5^1?PDrZ!;(Us~# zw*mH>s08?&JU}Om1P$D=LZj7XW?@xSHQU~qemIlK$;A^RvQajmjc})kjymtukPc=IVo9dDu6+>P&Ce*UR4O%nIXrlGU_atHZE)`< z%AsWLtv$=bry001s{ZUEuOI>sw?X!6-ys+YPQM@3YY`k&p`oSK&5gX$-Fk-M$$^;^ zJaN>9Q(7JW0F>nQCNYr!R}aJ$WD(0oT+h`% z_bqu~CIKUJ{7H3;_jdZl#*J|V_m-N8TZEfn@i1T7Ek!>@UzRbJF_0L-Sp7Ud&uz&c zNXQ6@ho|}|iw$qfGF}ZZOB=y!ByBQXunj7PrzGX}_^?1%_LnQmr_LkdQR0=?2k`#@ zS*J86LA|Fqo*oo_r4-(^)YoKvPVpYxG(->s8i5+EdI6MTkf0;=!`JHn0DQPicw-p- zaP@k>-z7RlznQd%_)mQm=7Z`Fs3h>KNQz(goEZFEf7tQNyz{}7?Gp^u>*1HD`YAYJ zIg$zSEBJjs>DBe?EkW;^?g_1K^p~helkKTBDOKLAz8PMZBm{U!lrlDHataY3#(%}c zsd%Vf-D^Ii1pR<%{^%B|@!~Eu2c?uA&8VWj9hJy}?CAIX%JyyQ8O z3fJJJYqF1pa#`}_IYgpAcl5$B^nY0bGlcFViU_pOB9Y*}utUH{>ssDL@V_EE5z)V9 znNigc3}@fNC`l(g2&q>U*9u;~YQ31<+iSXI&E246D6afwStIy?L(`6A9TZ0lu}(3U z`wkf~mYi&H)GPfg(YlVGqIrgUdz)#{1_2rZ&XN)~3d$%pCn&|2E}R(1f1Ug*ic*9~ zkU!Q*t@Nf%PJ3%xRJo4mt-FQz3KS%eYe7%u%*kiC2}tmm`rLyd5yW{WdQHEZ*UW|+ zQVeLmoarT6+(aq9#Bn=(IgOrre+JJ#sysj5aX8wOjKhfRKZp6xMvu~hKTZ@?H2B>` z2`8_KnB0G`!27_ShqH9HI(NHSX`#883|a&H_WB&0ygnp1f@ z$tY54Xi5H=m5wwV+)w}`Eg6JsPuc60Om5MX3q*xMB@b7vXg=((qfMIkCHjOsmY?TC zm*SI^f?KAR5%Y*IAblkOH%j)*T&9n`!_6u__9NygUP%P355mP%cmbPzBxqB-(8K{j zEl9%+w+E(V66KjKXh`1(l0?@cf;YfQ33RX!IjG!q`C=u}V?K&J*1H}jCrs5MyLgya z`!XjOEpmVEo7z|edN}%i6b;U2<%6J!-qWZ z%ugBNm~k~YBbGce8zowXlW4LVxeIy+eVgJnKV$$aT(=f^&iQdXjb8nVshxxH}=OknFy*tZ|bw8GL+q;J4HN+xG zSPmew5^F)7=ValIJv>B55B9ivn=(f!{Ceie#QmFjS%|I_rNWo|l~U_zO| zg^iIyn`BB9o|MRx6f=NMR!ah;%aA1$rpu5eX=5%#lv0^otd*sOG6bzGE085=VO)VL zOA6&=rk0h+6133RS48Pjj$1FqQHZglZ_-c8!KeEP~lZnh;_@c zg{4DKGV?8vx4uhXG8V1_7z$SDmMexTxM4$y!6KEpNlQ$~ zidl$N9ZA?^Whlg4j|@@;@=LCDxRR@EhF1P#vi|^XX*FKZV}{tr8UAiCi5zJ~{g66g5lD)~M{~!=2_P~g1Vnm!@#OSH@ocQ+9U7&aavP{z z-dS4`u>mtvb|YYYvdCkUx$N1G6z9*UIhT19pOL>30R3NJU&^>B9;FQd0h8ZPW_p6IbSlBv~ zQSg$a(NyloZs#jGBz9`zB?Bay#B3sZNpE!{dabcYqoo3&1L9+sfsF6`Q6K5#*aSI_ zVHKyr8e2&fw<^NbHDOzPW$B{;MgPpbpadlexaQVwUA2SDmJaEJ+cwd)AK7&(f6C*M#T$o& z2dZCD+x*Y!vcm#l;n(%Q;*xLB9!%7uZFb(s-A<0aj6BZ-VrV1+plrkTzn3#VHL1pY zBQ6pAU-2nCd|(nktc&v=koOU2(%IgnqG`bg)j!>`OIjU`Xs_QY(q|Dl1f$2|U$6LM z6k#WdRu8C|aeqhos^V}geGN`wblNvFJ?aq{QtWu4N>KHp@BUUpht+T#J~eQ|>i+;c zi7*Bx;(xvTaU^;@^g`x+Qu@YwI9UvK%^;$*E&l9J@~iy+02dt1)M7j%9Az1w;{Lz$ zT!ZTrImL9>w)#@(x3FC#*HWqam#su;RsJ44dXPcmf;i4zIFV5wUk~sz+aNKLJ5{q; zETWbjGALg0%Sw?_L=1isPbzOu_E|;@l_Ctu;A5wtOiZtZ2O8U2TR~;0SPS7}Bg1`-AMhhml9_qC`*HkaOD0ZoF-D@iQ%+OtJ}>L7Oin> zX$!*~{<2K>Fs%<5{{U}%#K$~1fsq7`9v&HgNvMoi;AC#U9)@bLtV`)a0b@^AP$*pZ zoYI+I<e531wwKkqb|>KM-r18l)LhJwsHXOWfJF(X+9Pl` zrE?Zx!pae@fU37jY)=0Gep3^>jtUa>c}L7{4`1V!<2%!KBSx3mIDup4z%LUytE0)-{n=RofhhYssT9$^G4GUQfNGRMP3`1`mzZuWCh-Lqa_)XK+45i({HyyUOxFa`j?Fn7pCA4en%^nhN;PP z*5*iF83xQc9-#Ik1Z76UgQ>zY#*4%})urloI{qmFjS^fB)3< z!9kU@(!&_QidfN%6pB%J&P0YJD6k_UP=}P{31UzG_`JN!Fk7H zmP1oaf;u_T$6U*fa9M>)3^tl?Y>6qSS0ZGZRfOd6$ux+JkaHpu-BF9U%)n5)3S3P( z;!P@pxj!t%o=Zy6mD;Kx%V4URZJ|nLpvp4Jf>P-oubPaLvXxY7jJgM9UJgwS?TTB& zYO+P!D#$HVC_&6rsz!IlDMYED%%H87%I74wEqBO9Nu|MZz);^2hSjh!w5ln_)p){| z>5`;6m}y(4G?!o|mYO61Q?MOQRAtoiN(SRnRjR?o2 z{CUWR0(tC!m1mu~Oyu}4Ve%Qt>bpZOV{ zY%#`5DB~qBxYd?~E@VRkl?^fiT}DO(lk%y|h~f@Ra0DaGJJ2XBPe3x!5F5lI7cHEJ z;<-MW_CfZ~^uTft;X%qdM|DEVidH2Nr*Jx-naI`iVOP1`VxzgDf__;m0g)ggS5M-c zVBMvkt{^XQMHER;T;|zkpsxRH?PkpIS88vc6lcln+J80*c5(Id?)$xQOjd?QO#nC zkc)&YQA-tS8gEc{u1ku}?D(wiscj6BN9m-7FdKMXL0%vl_o3xnjN}2f6OabT{{T4y z@ymN9qQC{e6F;hI6@4-VcKxmL{!tRYSJVEPxS9Zyx}@h$dD7-d*xSP-bqWbu^a{Pd z;BqnJ1B4Gz1%Toas`VRFu(pMK%k}uKjNYoqBoQ|#%wSPTr^E0Q@UBZN&x6264Oi9t z@A&f^g7H;wotNu3`f6LjVW=09;eioN8vHbo=z)Q*?9KeS9X=_NXAh_TC2+=EMp4>7 z#r|p&O|Y}k^(dp7Z$!H&nGwDz8&KYh7v<(OrFN z<|`@TioX+|i<^�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 z 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�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 { + if (error) { + console.error('createDeviceManager failed.'); + return; + } + self.deviceManager = value; + self.registerDeviceListCallback_(); + console.log('[dmsDemo] createDeviceManager callback returned, error=' + error + ' value=' + JSON.stringify(value)); + }); + console.log('[dmsDemo] deviceManager.createDeviceManager end'); + } else { + this.registerDeviceListCallback_(); + } + } + + registerDeviceListCallback_(){ + console.info('[dmsDemo] registerDeviceListCallback'); + if (this.deviceManager == undefined) { + console.error('[dmsDemo] deviceManager has not initialized'); + return; + } + + console.info('[dmsDemo] getTrustedDeviceListSync begin'); + var list = this.deviceManager.getTrustedDeviceListSync(); + console.info('[dmsDemo] getTrustedDeviceListSync end, deviceList=' + JSON.stringify(list)); + if (typeof (list) != 'undefined' && typeof (list.length) != 'undefined') { + this.deviceList = list; + } + console.info('[dmsDemo] callback finished'); + } + + unregisterDeviceListCallback() { + console.info('[dmsDemo] stopDeviceDiscovery ' + SUBSCRIBE_ID); + this.deviceManager.stopDeviceDiscovery(SUBSCRIBE_ID); + this.deviceList = []; + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..fd1a883f1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; +import featureAbility from '@ohos.ability.featureAbility' + +async function routePage(uri) { + let options = { + uri: uri + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page1') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage('pages/second') + }) + + Button() { + Text('同应用不需要检查targetbundlelist名单') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage('pages/third') + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "com.example.qianyiyingyong.MainAbility", + }, + } + ); + await featureAbility.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + featureAbility.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..9dcd95189 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/third.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/third.ets new file mode 100644 index 000000000..5cfba1b1a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/MainAbility/pages/third.ets @@ -0,0 +1,343 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import featureAbility from '@ohos.ability.featureAbility'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import RemoteDeviceModel from '../model/getRemoteDeviceModel.ets'; +import bundleManager from '@ohos.bundle'; + +const BUNDLE_NAME = 'com.example.qianyiyingyong.hmservice'; +const ABILITY_NAME = 'com.example.qianyiyingyong.MainAbility'; +const ABILITY_NAME1 = 'com.example.hm2.MainAbility'; +const ABILITY_NAME2 = 'com.example.hm3.MainAbility'; + +let remoteDeviceId = ''; +let remoteDeviceModel = null; + +@Entry +@Component +struct Third { + private content: string = "Third Page" + private contextText: string= ''; + private localDeviceId: string= ''; + private backgroundColor = Color.Grey; + private tipsMsg = '请输入对端的deviceId'; + private isOn = false; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold); + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold); + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back(); + }); + Row() { + Text('关闭是startAbility,打开是startAbilityForResult:') + .fontSize(20) + .fontWeight(FontWeight.Bold); + + Toggle({ type: ToggleType.Switch, isOn: this.isOn }) + .width($r('app.float.wh_value_50')) + .height($r('app.float.wh_value_40')) + .onChange((isOn) => { + console.info('startAbility fAStartAbilityPromise isOn:' + isOn); + this.isOn = isOn; + console.info('startAbility fAStartAbilityPromise this.isOn:' + this.isOn); + }); + } + .margin({ right: $r('app.float.wh_value_15') }) + .align(Alignment.End); + TextInput({ placeholder: '请输入deviceId', text: this.contextText }) + .placeholderColor(Color.Blue) + .placeholderFont({ + size: $r('app.float.wh_value_20'), + weight: 2, + family: "sans-serif", + style: FontStyle.Normal + }) + .caretColor(Color.Blue) + .height($r('app.float.wh_value_70')) + .backgroundColor(Color.White) + .type(InputType.Normal) + .width('100%') + .fontStyle(FontStyle.Italic) + .margin({ left: $r('app.float.wh_value_15'), right: $r('app.float.wh_value_15') }) + .onChange((value: string) => { + this.contextText = value; + }); + + Text('fAStartAbilityPromiseSameBundleName001 本设备,本应用不同AbilityName') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.fAStartAbilityForResultPromise('fAStartAbilityPromiseSameBundleName001', str); + } else { + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName001', str); + } + }); + + Text('fAStartAbilityPromiseSameBundleName005 entry覆盖安装') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName005', str); + }); + + Text('fAStartAbilityPromiseSameBundleName006 在免安装更新的时候需先设置updateModuleUpgradeFlag') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + this.updateModuleUpgradeFlag('fAStartAbilityPromiseSameBundleName006','entry'); + }); + + Text('fAStartAbilityPromiseSameBundleNameKSB002 跨设备,同应用不同AbilityName') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + if ('' === remoteDeviceId && '' === this.contextText) { + this.tips(this.tipsMsg); + return; + } + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.fAStartAbilityForResultPromise('fAStartAbilityPromiseSameBundleNameKSB002', str); + } else { + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleNameKSB002', str); + } + }); + + Text('fAStartAbilityPromiseSameBundleNameKSB003 跨设备,同应用,对端FA的visable为false无法拉起') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + if ('' === remoteDeviceId && '' === this.contextText) { + this.tips(this.tipsMsg); + return; + } + var str = { + 'want': { + 'deviceId': '' === this.contextText ? remoteDeviceId : this.contextText, + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME2, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.fAStartAbilityForResultPromise('fAStartAbilityPromiseSameBundleNameKSB003', str); + } else { + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleNameKSB003', str); + } + }); + + Text('fAStartAbilityPromiseSameBundleName004 跨设备,同应用不同AbilityName,无跨设备权限(拉起应用或被拉起应用)') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + if (this.isOn) { + this.fAStartAbilityForResultPromise('fAStartAbilityPromiseSameBundleName004', str); + } else { + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName004', str); + } + }); + } + .width('100%') + .height('100%') + } + + async updateModuleUpgradeFlag(tag, type1) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(type1)); + await bundleManager.setModuleUpgradeFlag("com.example.qianyiyingyong.hmservice",type1,1); + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + async fAStartAbilityPromise(tag, str) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(str)); + let code; + await featureAbility.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + async fAStartAbilityCallBack(tag, str) { + let code; + console.info(tag + 'startAbility fAStartAbilityCallBack START' + JSON.stringify(str)); + featureAbility.startAbility(str, (err, data) => { + code = data; + if (err) { + console.error(tag + ' Operation failed. CallBack Cause:' + JSON.stringify(err)); + code = err; + } + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info('Operation successful. CallBack Data: ' + JSON.stringify(data)) + }); + console.info(tag + 'startAbility fAStartAbilityCallBack END'); + } + + async fAStartAbilityForResultPromise(tag, str) { + console.info(tag + ' fAStartAbilityForResultPromise START' + JSON.stringify(str)); + let newData; + await featureAbility.startAbilityForResult(str) + .then((data) => { + this.tips('成功'); + newData = data; + console.info(tag + ' fAStartAbilityForResultPromise Operation successful. Promise Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(tag + ' fAStartAbilityForResultPromise Operation failed. Promise Cause: ' + JSON.stringify(error)); + newData = error; + this.tips('失败'); + }) + console.info(tag + ' fAStartAbilityForResultPromise Operation newData Promise: ' + JSON.stringify(newData)); + console.info(tag + ' fAStartAbilityForResultPromise fAStartAbilityPromise END'); + } + + async fAStartAbilityForResultCallBack(tag, str) { + console.info(tag + 'fAStartAbilityForResultCallBack START' + JSON.stringify(str)); + featureAbility.startAbilityForResult(str, (err, data) => { + console.info(tag + 'fAStartAbilityForResultCallBack Operation CallBack Data: ' + JSON.stringify(data)) + if (err) { + this.tips('失败'); + console.info(tag + 'fAStartAbilityForResultCallBack Operation CallBack err:' + JSON.stringify(err)); + return; + } + this.tips('成功'); + }); + console.info(tag + 'fAStartAbilityForResultCallBack END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } + + onBackPress() { + console.log('[startAbility] get device onBackPress in'); + this.contextText = ''; + console.log('[startAbility] get device onBackPress out'); + } + + private aboutToAppear(): void { + console.info('[startAbility] aboutToAppear in'); + remoteDeviceModel = new RemoteDeviceModel; + remoteDeviceModel.registerDeviceListCallback(); + console.info('[startAbility] aboutToAppear end'); + } + + onPageShow(): void{ + console.info('[startAbility] onPageShow in'); + let numDevices = remoteDeviceModel.deviceList.length; + if (numDevices === 0) { + this.tips('onStartRemoteAbility no device found') + return; + } + remoteDeviceId = remoteDeviceModel.deviceList[0].deviceId; + console.info('[startAbility] onPageShow deviceId is ' + remoteDeviceId); + } + + private aboutToDisappear() { + console.info('[startAbility] aboutToDisappear in'); + remoteDeviceModel.unregisterDeviceListCallback(); + console.info('[startAbility] aboutToDisappear out'); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/ServiceAbility/service.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/ServiceAbility/service.ts new file mode 100644 index 000000000..e854039d4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/ets/ServiceAbility/service.ts @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export default { + onStart() { + console.info('qianyiyingyong ServiceAbility onStart'); + }, + onStop() { + console.info('qianyiyingyong ServiceAbility onStop'); + }, + onCommand(want, startId) { + console.info('qianyiyingyong ServiceAbility onCommand'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/float.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/float.json new file mode 100644 index 000000000..6f8d0c206 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/float.json @@ -0,0 +1,124 @@ +{ + "float": [ + { + "name": "wh_value_1", + "value": "1" + }, + { + "name": "wh_value_5", + "value": "5" + }, + { + "name": "wh_value_10", + "value": "10" + }, + { + "name": "wh_value_15", + "value": "15" + }, + { + "name": "wh_value_20", + "value": "20" + }, + { + "name": "wh_value_30", + "value": "30" + }, + { + "name": "wh_value_40", + "value": "40" + }, + { + "name": "wh_value_50", + "value": "50" + }, + { + "name": "wh_value_60", + "value": "60" + }, + { + "name": "wh_value_65", + "value": "65" + }, + { + "name": "wh_value_70", + "value": "70" + }, + { + "name": "wh_value_80", + "value": "80" + }, + { + "name": "wh_value_100", + "value": "100" + }, + { + "name": "wh_value_130", + "value": "1300" + }, + { + "name": "wh_value_160", + "value": "160" + }, + { + "name": "wh_value_230", + "value": "230" + }, + { + "name": "wh_value_280", + "value": "280" + }, + { + "name": "wh_value_390", + "value": "390" + }, + { + "name": "wh_value_400", + "value": "400" + }, + { + "name": "font_35", + "value": "35" + }, + { + "name": "font_18", + "value": "18" + }, + { + "name": "font_20", + "value": "20" + }, + { + "name": "font_21", + "value": "21" + }, + { + "name": "font_22", + "value": "22" + }, + { + "name": "font_24", + "value": "24" + }, + { + "name": "font_28", + "value": "28" + }, + { + "name": "font_50", + "value": "50" + }, + { + "name": "control_common_font_size", + "value": "20" + }, + { + "name": "slider_text_padding_left", + "value": "5" + }, + { + "name": "volume_border_radius", + "value": "15" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..053265439 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "迁移111" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + }, + { + "name": "description_serviceability", + "value": "hap sample empty service" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfaentry/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + routePage() + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } +async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "com.example.qianyiyingyong.MainAbility", + }, + } + ); + await featureAbility.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + featureAbility.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..9dcd95189 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..cbf235aa4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "hm1_MainAbility", + "value": "相同BN和AN" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm1/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + routePage() + }) + + Text('fAStartAbilityPromiseSameBundleName1 本设备,feature覆盖安装') + .height(70) + .width('100%') + .fontSize(20) + .fontColor(Color.White) + .fontWeight(FontWeight.Bold) + .margin({ top: 20 }) + .backgroundColor(this.backgroundColor) + .onClick(() => { + var str = { + 'want': { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + }; + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName1', str); + + }); + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + featureAbility.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } + + async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await featureAbility.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "com.example.hm2.MainAbility", + }, + } + ); + await featureAbility.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async fAStartAbilityPromise(tag, str) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(str)); + let code; + await featureAbility.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/pages/second.ets new file mode 100644 index 000000000..6e0296ed6 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/ets/MainAbility/pages/second.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; + +@Entry +@Component +struct Second { + private content: string = "HNM2 Second Page" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.content}`) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('back to index') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..8380229de --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "hnm2_MainAbility", + "value": "相同BN不同AN" + }, + { + "name": "description_mainability", + "value": "eTS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/atomizationresultfahm2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationResultFaEntry.hap", + "AtomizationResultFaHm1.hap -> /data/test/AtomizationResultFaHm1.hap", + "AtomizationResultFaHm2.hap -> /data/test/AtomizationResultFaHm2.hap", + "MockService.hap -> /data/test/MockService.hap", + "MockServiceTimeout.hap -> /data/test/MockServiceTimeout.hap", + "AtomizationResultA.hap -> /data/test/AtomizationResultA.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/config.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/config.json new file mode 100644 index 000000000..acdffda30 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/config.json @@ -0,0 +1,131 @@ +{ + "app": { + "targetBundleList": [ + "com.example.qianyiyingyong.hmservice" + ], + "vendor": "example", + "bundleName": "com.open.harmony.startAbilityForResult", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 8, + "releaseType": "Release", + "target": 8 + } + }, + "deviceConfig": {}, + "module": { + "mainAbility": ".MainAbility", + "deviceType": [ + "phone", + "tablet" + ], + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "formsEnabled": false, + "label": "$string:MainAbility_label", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "srcPath": "PageAbility", + "name": ".PageAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:PageAbility_desc", + "formsEnabled": false, + "label": "$string:PageAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "package": "com.open.harmony.startAbilityForResult", + "srcPath": "", + "name": ".entry", + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".PageAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "reqPermissions": [ + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.MANAGE_MISSIONS" + }, + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.INSTALL_BUNDLE" + }, + { + "reason": "need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "reason": "need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE", + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "reason": "need use ohos.permission.REMOVE_CACHE_FILES", + "name": "ohos.permission.REMOVE_CACHE_FILES" + }, + { + "reason": "need use ohos.permission.LISTEN_BUNDLE_CHANGE", + "name": "ohos.permission.LISTEN_BUNDLE_CHANGE" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..e50dc2a89 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..bfec465ee --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,85 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import file from '@system.file'; +import {Core, ExpectExtend, InstrumentLog, ReportExtend,expect} from "deccjsunit/index"; +import testsuite from "../test/List.test"; +import featureAbility from "@ohos.ability.featureAbility"; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + Want.parameters.timeout = 50000; + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text(' FA- StartAbilityForResult TEST ') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/List.test.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..e1ceebca9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import StartAbilityForResult from "./StartAbilityForResult.test"; +import StartAbilityForResult2 from "./StartAbilityForResult2.test"; + +export default function testsuite() { + StartAbilityForResult(); + StartAbilityForResult2(); + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets new file mode 100644 index 000000000..660389022 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets @@ -0,0 +1,973 @@ +// @ts-nocheck + + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import Utils from './Utils'; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import abilityManager from '@ohos.application.abilityManager'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +export default function StartAbilityForResult() { + var TAG = ""; + var DeviceId = ""; + + + describe('StartAbilityForResult', function () { + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd3 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps" + + "/entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityForResult after each called"); + if ("FreeInstall_FA_StartAbilityForResult_0100" === TAG || + "FreeInstall_FA_StartAbilityForResult_0400" === TAG || + "FreeInstall_FA_StartAbilityForResult_0700" === TAG || + "FreeInstall_FA_StartAbilityForResult_1000" === TAG || + "FreeInstall_FA_StartAbilityForResult_1100" === TAG || + "FreeInstall_FA_StartAbilityForResult_1400" === TAG || + "FreeInstall_FA_StartAbilityForResult_1600" === TAG || + "FreeInstall_FA_StartAbilityForResult_1900" === TAG || + "FreeInstall_FA_StartAbilityForResult_2100" === TAG || + "FreeInstall_FA_StartAbilityForResult_3000" === TAG || + "FreeInstall_FA_StartAbilityForResult_3100" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + } + + if ("FreeInstall_FA_StartAbilityForResult_3200" === TAG) { + var cmd14 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd14, (err: any, d: any) => { + console.info("executeShellCommand14: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd26 = "bm uninstall -n com.example.myapplicationA.hmserviceA"; + delegator.executeShellCommand(cmd26, (err: any, d: any) => { + console.info("executeShellCommand26: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await Utils.sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0100 + * @tc.name: startAbilityForResult: Input empty deviceId,free install and start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0100", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0100-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0100"; + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0200 + * @tc.name: startAbilityForResult: Send wrong yuanzihua under the path + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0200", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0200-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0200"; + var cmd15 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd15, (err: any, d: any) => { + console.info("executeShellCommand15: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd16 = "cp data/test/AtomizationResultA.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd16, (err: any, d: any) => { + console.info("executeShellCommand16: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let wrong; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0300 + * @tc.name: startAbilityForResult: Remove the yuanzihua under the path + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0300", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0300-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0300"; + var cmd17 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultA.hap"; + delegator.executeShellCommand(cmd17, (err: any, d: any) => { + console.info("executeShellCommand17: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let wrong; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(4); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0400 + * @tc.name: startAbilityForResult: Free install and start successfully (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0400", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0400-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0400"; + var cmd18 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd18, (err: any, d: any) => { + console.info("executeShellCommand18: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0500 + * @tc.name: startAbilityForResult: Send wrong yuanzihua under the path (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0500", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0500-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0500"; + var cmd15 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd15, (err: any, d: any) => { + console.info("executeShellCommand15: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd16 = "cp data/test/AtomizationResultA.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd16, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let wrong; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0600 + * @tc.name: startAbilityForResult: Remove the yuanzihua under the path (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0600", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0600-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0600"; + var cmd17 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultA.hap"; + delegator.executeShellCommand(cmd17, (err: any, d: any) => { + console.info("executeShellCommand17: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let wrong; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(4); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0700 + * @tc.name: startAbilityForResult: No deviceId,free install and start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0700", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0700-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0700"; + var cmd18 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd18, (err: any, d: any) => { + console.info("executeShellCommand18: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(1000); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0800 + * @tc.name: startAbilityForResult: No deviceId,free install and start successfully (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0800", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0800-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0800"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_0900 + * @tc.name: startAbilityForResult: yuanzihua already installed,start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_0900", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_0900-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_0900"; + var cmd900 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd900, (err: any, d: any) => { + console.info("executeShellCommand900: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(1000); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1000 + * @tc.name: startAbilityForResult: yuanzihua already installed,start successfully (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1000", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1000-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1000"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1100 + * @tc.name: startAbilityForResult: Input local deviceId,free install and start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1100", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1100-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1100"; + let details1; + let details2; + await abilityManager.getTopAbility().then((data) => { + details1 = data; + console.info(' getTopAbility succeeded data: ' + JSON.stringify(data)); + }).catch((error) => { + console.error(' getTopAbility error: ' + JSON.stringify(error)); + }); + console.log(" checkAbilityInfo deviceId : " + details1.ability.deviceId); + DeviceId = details1.ability.deviceId; + await Utils.sleep(500); + var str = { + 'want': { + "deviceId": DeviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details2 = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details2.resultCode); + expect(details2.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1200 + * @tc.name: startAbilityForResult: Input local deviceId, add abilityStartSetting. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1200", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1200-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1200"; + let details1; + let details2; + await abilityManager.getTopAbility().then((data) => { + details1 = data; + console.info(' getTopAbility succeeded data: ' + JSON.stringify(data)); + }).catch((error) => { + console.error(' getTopAbility error: ' + JSON.stringify(error)); + }); + console.log(" checkAbilityInfo deviceId : " + details1.ability.deviceId); + DeviceId = details1.ability.deviceId; + await Utils.sleep(1000); + var str = { + 'want': { + "deviceId": DeviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details2 = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details2.resultCode); + expect(details2.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1300 + * @tc.name: startAbilityForResult: Free install feature hap and start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1300", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1300-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1300"; + var cmd7 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd7, (err: any, d: any) => { + console.info("executeShellCommand7: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd8 = "cp data/test/AtomizationResultFaHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd8, (err: any, d: any) => { + console.info("executeShellCommand8: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(3000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1400 + * @tc.name: startAbilityForResult: start feature hap successfully (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1400", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1400-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1400"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1500 + * @tc.name: startAbilityForResult: Call by AsyncCallback. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1500", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1500-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1500"; + var cmd1500 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultFaHm2.hap"; + delegator.executeShellCommand(cmd1500, (err: any, d: any) => { + console.info("executeShellCommand1500: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(1000); + var cmd1501 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + delegator.executeShellCommand(cmd1501, (err: any, d: any) => { + console.info("executeShellCommand1501: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(1000); + let details; + var str = { + 'want': { + "bundleName": 'com.example.qianyiyingyong.hmservice', + "abilityName": 'com.example.qianyiyingyong.MainAbility', + "moduleName": 'entry', + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str, (err, data) => { + console.info(TAG + ": StartAbilityForResultCallBack success, err: " + JSON.stringify(err) + + ",data: " + JSON.stringify(data)); + details = data.resultCode; + }) + setTimeout(function () { + console.info(TAG + " resultCode: " + details); + expect(details).assertEqual(1); + done(); + }, 4000); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1600 + * @tc.name: startAbilityForResult: Call by AsyncCallback (add abilityStartSetting). + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1600", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1600-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1600"; + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + }, + 'abilityStartSetting': { + "key": "test:let your heart guide you!" + } + } + await featureAbility.startAbilityForResult(str, (err, data) => { + console.info(TAG + ": StartAbilityForResultCallBack success, err: " + JSON.stringify(err) + + ",data: " + JSON.stringify(data)); + details = data.resultCode; + }) + setTimeout(function () { + console.info(TAG + " resultCode: " + details); + expect(details).assertEqual(1); + done(); + }, 4000); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1700 + * @tc.name: startAbilityForResult: Input wrong flags(22),free install failed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1700", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1700-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1700"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': 22 + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1800 + * @tc.name: startAbilityForResult: Input wrong flags('11'),free install failed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1800", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1800-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1800"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '11' + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_1900 + * @tc.name: startAbilityForResult: yuanzihua already installed,input wrong flags('11'),start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_1900", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_1900-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_1900"; + var cmd19 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd19, (err: any, d: any) => { + console.info("executeShellCommand19: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1901 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd1901, (err: any, d: any) => { + console.info("executeShellCommand1901: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '11' + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2000 + * @tc.name: startAbilityForResult: Input empty flags,free install failed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2000", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2000-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2000"; + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '' + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2100 + * @tc.name: startAbilityForResult: yuanzihua already installed,input empty flags,start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2100", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2100-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2100"; + var cmd19 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd19, (err: any, d: any) => { + console.info("executeShellCommand19: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(1000); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '' + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_3000 + * @tc.name: startAbilityForResult: Input different moduleName(feature hap),start feature hap. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_3000", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_3000-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_3000"; + var cmd9 = "bm install -p data/test/AtomizationResultFaHm1.hap"; + delegator.executeShellCommand(cmd9, (err: any, d: any) => { + console.info("executeShellCommand9 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "hm1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_3100 + * @tc.name: startAbilityForResult: Input parameters extended information,free install and start successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_3100", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_3100-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_3100"; + let details; + var str = { + 'want': { + 'deviceId': '', + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + 'parameters': { + "name": "1111", "Ext2": "ExtValue2", "site": "很开心看到你!" + } + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_3200 + * @tc.name: startAbilityForResult: Input wrong moduleName(“xxxxx”), free install failed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_3200", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_3200-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_3200"; + let wrong; + var str = { + 'want': { + 'deviceId': '', + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "xxxxx", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + expect(wrong.code).assertEqual(1); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult2.test.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult2.test.ets new file mode 100644 index 000000000..176ca0d7e --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult2.test.ets @@ -0,0 +1,227 @@ +// @ts-nocheck + + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import Utils from './Utils'; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +export default function StartAbilityForResult2() { + var TAG = ""; + + describe('StartAbilityForResult2', function () { + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd3 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityForResult after each called"); + if ("FreeInstall_FA_StartAbilityForResult_2300" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + } + + if ("FreeInstall_FA_StartAbilityForResult_2600" === TAG) { + var cmd14 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd14, (err: any, d: any) => { + console.info("executeShellCommand14: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await Utils.sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2200 + * @tc.name: startAbilityForResult: The page A not in the foreground. Page A jumps to page B first. + The atomized HAP package has not been installed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2200", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2200-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2200"; + var str1 = { + 'want': { + "bundleName": "com.open.harmony.startAbilityForResult", + "abilityName": "com.open.harmony.startAbilityForResult.PageAbility", + "moduleName": "entry", + } + } + featureAbility.startAbilityForResult(str1) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(3000); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(wrong.code).assertEqual(13); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2300 + * @tc.name: startAbilityForResult: The page A not in the foreground. Page A jumps to page B first. + The atomized HAP package has been installed. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2300", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2300-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2300"; + var cmd19 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd19, (err: any, d: any) => { + console.info("executeShellCommand19: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var str1 = { + 'want': { + "bundleName": "com.open.harmony.startAbilityForResult", + "abilityName": "com.open.harmony.startAbilityForResult.PageAbility", + "moduleName": "entry", + } + } + featureAbility.startAbilityForResult(str1) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(3000); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + expect(wrong.code).assertEqual(13); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2600 + * @tc.name: startAbilityForResult: Free install timeout 30s. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2600", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2600-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2600"; + var cmd20 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd20, (err: any, d: any) => { + console.info("executeShellCommand20: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd21 = "bm install -p data/test/MockServiceTimeout.hap"; + delegator.executeShellCommand(cmd21, (err: any, d: any) => { + console.info("executeShellCommand21: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd3 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let wrong; + var str = { + 'want': { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + featureAbility.startAbilityForResult(str) + .then((data) => { + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + wrong = error; + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await Utils.sleep(35000); + expect(wrong.code).assertEqual(13); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/Utils.ets new file mode 100644 index 000000000..4d9553a5c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/MainAbility/test/Utils.ets @@ -0,0 +1,130 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve() + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } + + static async swipe(downX, downY, upX, upY, steps) { + console.info('start to swipe') + this.drags(downX, downY, upX, upY, steps, false) + } + + static async drag(downX, downY, upX, upY, steps) { + console.info('start to drag') + this.drags(downX, downY, upX, upY, steps, true) + } + + static async drags(downX, downY, upX, upY, steps, drag) { + var xStep; + var yStep; + var swipeSteps; + var ret; + xStep = 0; + yStep = 0; + ret = false; + swipeSteps = steps; + if (swipeSteps == 0) { + swipeSteps = 1; + } + xStep = (upX - downX) / swipeSteps; + yStep = (upY - downY) / swipeSteps; + console.info('move step is: ' + 'xStep: ' + xStep + ' yStep: ' + yStep) + var downPonit: TouchObject = { + id: 1, + x: downX, + y: downY, + type: TouchType.Down, + } + console.info('down touch started: ' + JSON.stringify(downPonit)) + sendTouchEvent(downPonit); + console.info('start to move') + if (drag) { + await this.sleep(500) + } + for (var i = 1;i <= swipeSteps; i++) { + var movePoint: TouchObject = { + id: 1, + x: downX + (xStep * i), + y: downY + (yStep * i), + type: TouchType.Move + } + console.info('move touch started: ' + JSON.stringify(movePoint)) + ret = sendTouchEvent(movePoint) + if (ret == false) { + break; + } + await this.sleep(5) + } + console.info('start to up') + if (drag) { + await this.sleep(100) + } + var upPoint: TouchObject = { + id: 1, + x: upX, + y: upY, + type: TouchType.Up, + } + console.info('up touch started: ' + JSON.stringify(upPoint)) + sendTouchEvent(upPoint) + await this.sleep(500) + } + + static getNowTime() { + return new Date().getTime(); + } + + static getDurationTime(log,startTime, endTime) { + console.info("Get Interface startTime: " + startTime); + console.info("Get Interface endTime: " + endTime); + var duration = (endTime - startTime); + console.info("Get Interface duration: " + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/app.ets new file mode 100644 index 000000000..f7a6eb279 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/app.ets @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import featureAbility from '@ohos.ability.featureAbility'; + +export default { + onCreate() { + console.info('Application onCreate') + setTimeout(function () { + featureAbility.terminateSelf() + .then((data) => { + console.info('PageAbility terminateself succeeded: ' + data); + }).catch((error) => { + console.error('PageAbility terminateself failed. Cause: ' + error); + }) + }, 8000); + }, + + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/pages/index.ets new file mode 100644 index 000000000..e6d419d27 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/PageAbility/pages/index.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World - PageAbility-B' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..f9e8ab669 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..e9ceb262b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "PageAbility_desc", + "value": "description" + }, + { + "name": "PageAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/freeinstallstartabilityforresultfatest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationResultFaEntry.hap", + "FaResultMyApplication1.hap -> /data/test/FaResultMyApplication1.hap", + "MockService.hap -> /data/test/MockService.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/config.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/config.json new file mode 100644 index 000000000..c9018fcfd --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/config.json @@ -0,0 +1,116 @@ +{ + "app": { + "vendor": "example", + "bundleName": "com.open.harmony.startAbilityForResult", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 8, + "releaseType": "Release", + "target": 8 + } + }, + "deviceConfig": {}, + "module": { + "mainAbility": ".MainAbility", + "deviceType": [ + "phone", + "tablet" + ], + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "formsEnabled": false, + "label": "$string:MainAbility_label", + "type": "page", + "launchType": "standard" + } + ], + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "package": "com.open.harmony.startAbilityForResult", + "srcPath": "", + "name": ".entry", + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".PageAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "reqPermissions": [ + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.MANAGE_MISSIONS" + }, + { + "reason": "need use ohos.permission.INSTALL_BUNDLE", + "name": "ohos.permission.INSTALL_BUNDLE" + }, + { + "reason": "need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "reason": "need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE", + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "reason": "need use ohos.permission.REMOVE_CACHE_FILES", + "name": "ohos.permission.REMOVE_CACHE_FILES" + }, + { + "reason": "need use ohos.permission.LISTEN_BUNDLE_CHANGE", + "name": "ohos.permission.LISTEN_BUNDLE_CHANGE" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/app.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..e50dc2a89 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..a422068c4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,85 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import file from '@system.file'; +import {Core, ExpectExtend, InstrumentLog, ReportExtend,expect} from "deccjsunit/index"; +import testsuite from "../test/List.test"; +import featureAbility from "@ohos.ability.featureAbility"; + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + Want.parameters.timeout = 50000; + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text(' FA- StartAbilityForResult- NoTargetBundleList TEST ') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/List.test.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..190e5b62c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import StartAbilityForResult from "./StartAbilityForResult.test"; + +export default function testsuite() { + StartAbilityForResult(); + + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets new file mode 100644 index 000000000..fb8422c23 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/StartAbilityForResult.test.ets @@ -0,0 +1,184 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index"; +import Utils from './Utils'; +import featureAbility from "@ohos.ability.featureAbility"; +import wantConstant from '@ohos.ability.wantConstant'; +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +export default function StartAbilityForResult() { + var TAG = ""; + + describe('StartAbilityForResult', function () { + var delegator = AbilityDelegatorRegistry.getAbilityDelegator(); + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd3 = "cp data/test/AtomizationResultFaEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/" + + "files"; + delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityForResult after each called"); + if ("FreeInstall_FA_StartAbilityForResult_2900" === TAG) { + var cmd4 = "bm uninstall -n com.ohos.hag.famanager"; + delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd5 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await Utils.sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2700 + * @tc.name: startAbilityForResult: NoTargetBundleList,free install successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2700", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2700-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2700"; + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResult successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResult failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2800 + * @tc.name: startAbilityForResult: NoTargetBundleList and yuanzihua already installed,startAbility successfully + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2800", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2800-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2800"; + var cmd6 = "bm install -p data/test/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd6, (err: any, d: any) => { + console.info("executeShellCommand6: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResult successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResult failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(1000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_FA_StartAbilityForResult_2900 + * @tc.name: startAbilityForResult: The same application does not need to check targetbundlelist, + start feature hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_FA_StartAbilityForResult_2900", 0, async function (done) { + console.log("------------start FreeInstall_FA_StartAbilityForResult_2900-------------"); + TAG = "FreeInstall_FA_StartAbilityForResult_2900"; + var cmd7 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultFaEntry.hap"; + delegator.executeShellCommand(cmd7, (err: any, d: any) => { + console.info("executeShellCommand7: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + var cmd8 = "cp data/test/FaResultMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + delegator.executeShellCommand(cmd8, (err: any, d: any) => { + console.info("executeShellCommand8: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await Utils.sleep(500); + let details; + var str = { + 'want': { + "bundleName": "com.open.harmony.startAbilityForResult", + "abilityName": "com.example.myapplication1.MainAbility1", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + } + await featureAbility.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResult successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResult failed. error: ' + JSON.stringify(error)); + }) + await Utils.sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/Utils.ets new file mode 100644 index 000000000..59a63137a --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/MainAbility/test/Utils.ets @@ -0,0 +1,130 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static rect_left; + static rect_top; + static rect_right; + static rect_bottom; + static rect_value; + + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve() + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getComponentRect(key) { + let strJson = getInspectorByKey(key); + let obj = JSON.parse(strJson); + console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj)); + let rectInfo = JSON.parse('[' + obj.$rect + ']') + console.info("[getInspectorByKey] rectInfo is: " + rectInfo); + this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0] + this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1] + this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0] + this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1] + return this.rect_value = { + "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom + } + } + + static async swipe(downX, downY, upX, upY, steps) { + console.info('start to swipe') + this.drags(downX, downY, upX, upY, steps, false) + } + + static async drag(downX, downY, upX, upY, steps) { + console.info('start to drag') + this.drags(downX, downY, upX, upY, steps, true) + } + + static async drags(downX, downY, upX, upY, steps, drag) { + var xStep; + var yStep; + var swipeSteps; + var ret; + xStep = 0; + yStep = 0; + ret = false; + swipeSteps = steps; + if (swipeSteps == 0) { + swipeSteps = 1; + } + xStep = (upX - downX) / swipeSteps; + yStep = (upY - downY) / swipeSteps; + console.info('move step is: ' + 'xStep: ' + xStep + ' yStep: ' + yStep) + var downPonit: TouchObject = { + id: 1, + x: downX, + y: downY, + type: TouchType.Down, + } + console.info('down touch started: ' + JSON.stringify(downPonit)) + sendTouchEvent(downPonit); + console.info('start to move') + if (drag) { + await this.sleep(500) + } + for (var i = 1;i <= swipeSteps; i++) { + var movePoint: TouchObject = { + id: 1, + x: downX + (xStep * i), + y: downY + (yStep * i), + type: TouchType.Move + } + console.info('move touch started: ' + JSON.stringify(movePoint)) + ret = sendTouchEvent(movePoint) + if (ret == false) { + break; + } + await this.sleep(5) + } + console.info('start to up') + if (drag) { + await this.sleep(100) + } + var upPoint: TouchObject = { + id: 1, + x: upX, + y: upY, + type: TouchType.Up, + } + console.info('up touch started: ' + JSON.stringify(upPoint)) + sendTouchEvent(upPoint) + await this.sleep(500) + } + + static getNowTime() { + return new Date().getTime(); + } + + static getDurationTime(log,startTime, endTime) { + console.info("Get Interface startTime: " + startTime); + console.info("Get Interface endTime: " + endTime); + var duration = (endTime - startTime); + console.info("Get Interface duration: " + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..f9e8ab669 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log('onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + console.info('addAbilityMonitorCallback : ' + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + } + + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun call abilityDelegator.getAppContext') + var context = abilityDelegator.getAppContext() + console.info('getAppContext : ' + JSON.stringify(context)) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..e9ceb262b --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "PageAbility_desc", + "value": "description" + }, + { + "name": "PageAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultfatest/startabilityforresultnotargetfatest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + routePage('pages/sameAppModel') + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(20) + }.type(ButtonType.Capsule) + .margin({top: 20}) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await globalThis.abilityContext.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: "com.example.qianyiyingyong.hmservice", + abilityName: "MainAbility", + }, + } + ); + await globalThis.abilityContext.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + globalThis.abilityContext.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } +} + +async function routePage(page) { + let options = { + uri: page + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/module.json new file mode 100644 index 000000000..2f4cd628c --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.qianyiyingyong.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/float.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/float.json new file mode 100644 index 000000000..560b68dea --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/float.json @@ -0,0 +1,128 @@ +{ + "float": [ + { + "name": "wh_value_1", + "value": "1" + }, + { + "name": "wh_value_5", + "value": "5" + }, + { + "name": "wh_value_10", + "value": "10" + }, + { + "name": "wh_value_15", + "value": "15" + }, + { + "name": "wh_value_20", + "value": "20" + }, + { + "name": "wh_value_25", + "value": "25" + }, + { + "name": "wh_value_30", + "value": "30" + }, + { + "name": "wh_value_40", + "value": "40" + }, + { + "name": "wh_value_50", + "value": "50" + }, + { + "name": "wh_value_60", + "value": "60" + }, + { + "name": "wh_value_65", + "value": "65" + }, + { + "name": "wh_value_70", + "value": "70" + }, + { + "name": "wh_value_80", + "value": "80" + }, + { + "name": "wh_value_100", + "value": "100" + }, + { + "name": "wh_value_130", + "value": "1300" + }, + { + "name": "wh_value_160", + "value": "160" + }, + { + "name": "wh_value_230", + "value": "230" + }, + { + "name": "wh_value_280", + "value": "280" + }, + { + "name": "wh_value_390", + "value": "390" + }, + { + "name": "wh_value_400", + "value": "400" + }, + { + "name": "font_35", + "value": "35" + }, + { + "name": "font_18", + "value": "18" + }, + { + "name": "font_20", + "value": "20" + }, + { + "name": "font_21", + "value": "21" + }, + { + "name": "font_22", + "value": "22" + }, + { + "name": "font_24", + "value": "24" + }, + { + "name": "font_28", + "value": "28" + }, + { + "name": "font_50", + "value": "50" + }, + { + "name": "control_common_font_size", + "value": "20" + }, + { + "name": "slider_text_padding_left", + "value": "5" + }, + { + "name": "volume_border_radius", + "value": "15" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..490210a39 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstageentry/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + var str = { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + }; + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName1', str); + }) + + Button() { + Text('fAStartAbilityPromiseSameBundleName006 在免安装更新的时候需先设置updateModuleUpgradeFlag') + .fontSize($r('app.float.font_28')) + .width('100%') + .fontColor(Color.White) + .align(Alignment.Center) + .margin({ left: $r('app.float.wh_value_15'), right: $r('app.float.wh_value_15') }) + } + .backgroundColor('#0D9FFB') + .margin({left: $r('app.float.wh_value_15'), + right: $r('app.float.wh_value_15'), + top: $r('app.float.wh_value_15') + }) + .onClick(() => { + var str = { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + }; + this.updateModuleUpgradeFlag('fAStartAbilityPromiseSameBundleName006','feature'); + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontColor(Color.White) + .margin({ left: $r('app.float.wh_value_30'), right: $r('app.float.wh_value_30') }) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async updateModuleUpgradeFlag(tag, type1) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(type1)); +// await bundleManager.updateModuleUpgradeFlag("com.example.qianyiyingyong.hmservice", type1, true); + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + globalThis.abilityContext.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } + + async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await globalThis.abilityContext.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME1, + }, + } + ); + await globalThis.abilityContext.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async fAStartAbilityPromise(tag, str) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(str)); + let code; + await globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/pages/second.ets new file mode 100644 index 000000000..fedd7d8b4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/ets/pages/second.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'hnm2 page' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/module.json new file mode 100644 index 000000000..12ecea716 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "hnm2", + "type": "feature", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:hnm2_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.hm2.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/float.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/float.json new file mode 100644 index 000000000..560b68dea --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/float.json @@ -0,0 +1,128 @@ +{ + "float": [ + { + "name": "wh_value_1", + "value": "1" + }, + { + "name": "wh_value_5", + "value": "5" + }, + { + "name": "wh_value_10", + "value": "10" + }, + { + "name": "wh_value_15", + "value": "15" + }, + { + "name": "wh_value_20", + "value": "20" + }, + { + "name": "wh_value_25", + "value": "25" + }, + { + "name": "wh_value_30", + "value": "30" + }, + { + "name": "wh_value_40", + "value": "40" + }, + { + "name": "wh_value_50", + "value": "50" + }, + { + "name": "wh_value_60", + "value": "60" + }, + { + "name": "wh_value_65", + "value": "65" + }, + { + "name": "wh_value_70", + "value": "70" + }, + { + "name": "wh_value_80", + "value": "80" + }, + { + "name": "wh_value_100", + "value": "100" + }, + { + "name": "wh_value_130", + "value": "1300" + }, + { + "name": "wh_value_160", + "value": "160" + }, + { + "name": "wh_value_230", + "value": "230" + }, + { + "name": "wh_value_280", + "value": "280" + }, + { + "name": "wh_value_390", + "value": "390" + }, + { + "name": "wh_value_400", + "value": "400" + }, + { + "name": "font_35", + "value": "35" + }, + { + "name": "font_18", + "value": "18" + }, + { + "name": "font_20", + "value": "20" + }, + { + "name": "font_21", + "value": "21" + }, + { + "name": "font_22", + "value": "22" + }, + { + "name": "font_24", + "value": "24" + }, + { + "name": "font_28", + "value": "28" + }, + { + "name": "font_50", + "value": "50" + }, + { + "name": "control_common_font_size", + "value": "20" + }, + { + "name": "slider_text_padding_left", + "value": "5" + }, + { + "name": "volume_border_radius", + "value": "15" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..3b3102318 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "hnm2_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehm2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y-grhpq>=4Bu;(DE|wG>}Juk_0FTWjZM)HPlI=G?d~bG!)vE?SRd|k4|RL z5AA&4J@@X}@1F16xgaj0Q_^NE(=Gc(#7pJ3#zhN2Tx93-c#sGTPf1&_OvfVyLOu_~ zlSe%S@>=7`Ny51BKMTc;WGL*TDT$MIk>XNl)`J8^1h|A4DgXsQJWCvj_*`5l2htLU zQb|hWZthQ3EO$wia-fh9N)kXtGPj$A6damq3MM9pNIyx0NiIPIgA$i7%!GW72$Oi< z0D=zJ`Y49^Lr|^Wn5#m~7QIHVf-PuY)=pu1y$Xw|RIr2ez^opDJ$jTdsS0Ci7(+as25)_x zsT{}EFl&V|Ef!V9U<2YYRwA&?0@oW&+zMu#MLjlkC63QUS*F~nt&CJ?HBF8xWrVb# zH5lU5!jKhJMKRn`g!moxUavC%H9DwzPo=ifYo{C*v<_3DeJD7J5s#wqYJ_!Y{dKl# zbI>7`d2oQTI#itWjMb#pQF0&==*tju`)aL$UCE23tZj*onZ@#D%qMUx!zW7U>s7pT(2?vZB-yTR}BaHF_^_p z>A)i>RKq&8(V$JL0R&eIy~f~oaNp~cTG=WKY(YHEf$Hj!M5XOif2}bDVT~#nwm57i z6^;k1BfkI#2a7>4e42{8g?g`>nbo*tA?vQh{fRzIem6Y!&u8`Yow^C zqOv67Mm26i&zNJdsSk}S5ZJ9i5g1b;GMLpRDryEM1hJu-awZyzc>Q+DX-4p{!Nodj z8p@BoYeJz0+)sJZt zuEPepall8Mbf92R2NrOKP{5F3h655oKi75PrZ7VWYMqI0@AnHgNidN_?~A>hO$>~4 z^Tb@Mb6p+qg%i#dPPBT6TPfsoGNel~WMtla4$I*p39k?b>wSH06QT&ecu{LS5j7WKgGt{%Qg#tlx5^zGpL0XEyDon}XtBlYX@N6O&mN9(L z$3WvjRw6q*BYjXd*Fq8jXbPB|7!qV;4<3SpL4U$-IR3dR7);6%Ng*HwQb@`@>Ox+;D8{>7P%3W3Q%Usi-A~_qV+>e)rntOWl*O-6dZMKE8F5;?K0akaPU^t@xU> z%=cfHofS|kPL6wHyBU;&9FES!DZ+6ebIF)LFY6Fz{&D!$xgA|o7k1uCUbIc31tSxH zQ9Ry%g+c*8bqSc5h(`)Dg=0P>uD!i0X1s82?ZKCCB;WhGR>U(8-7|qN3Ap)CQv0fX zX>mu>K3(2u5yPDS2i~g-k`cK-?+g}k~KDu+;-P*Btr{$~&b>;qGA|AHs7nh`J|G6Cj zFM?4Cp=2b4lMDphW2lmNDT9=hRhqu_t?@tZNiwycZ^=K%z>ov)XaXk~tj_oQ`@1 zbTo;4XZBDgPjUAKnGqx}k`C5UB78cI_yh?}-u&gMP5ZOtdzXK(qxOqy@YH| zKVg=t_U%sjdhgBr><=%#F8a;Uk{yeK)y=0CKNmdE*mmS2GpIWB>H6u#<%c`=zqcWK z9HF5KQ#7Oa~pEP2)s#v~d&wROM>gVs@EXK<+yLWhcgU&n0TfndfCpllJ0~-G1 zq|eQ>U0Y7f|Lt@0PSR?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y { + var str = { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + }; + this.fAStartAbilityPromise('fAStartAbilityPromiseSameBundleName1', str); + }) + + Button() { + Text('fAStartAbilityPromiseSameBundleName006 在免安装更新的时候需先设置updateModuleUpgradeFlag') + .fontSize($r('app.float.font_28')) + .width('100%') + .fontColor(Color.White) + .align(Alignment.Center) + .margin({ left: $r('app.float.wh_value_15'), right: $r('app.float.wh_value_15') }) + } + .backgroundColor('#0D9FFB') + .margin({left: $r('app.float.wh_value_15'), + right: $r('app.float.wh_value_15'), + top: $r('app.float.wh_value_15') + }) + .onClick(() => { + var str = { + 'bundleName': BUNDLE_NAME, + 'abilityName': ABILITY_NAME1, + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND + }; + this.updateModuleUpgradeFlag('fAStartAbilityPromiseSameBundleName006','feature'); + }) + + Button() { + Text('StartAbilityForResult') + .fontSize(25) + .fontColor(Color.White) + .margin({ left: $r('app.float.wh_value_30'), right: $r('app.float.wh_value_30') }) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + this.terminateSelfWithResult(); + }) + } + .width('100%') + .height('100%') + } + + async updateModuleUpgradeFlag(tag, type1) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(type1)); +// await bundleManager.updateModuleUpgradeFlag("com.example.qianyiyingyong.hmservice", type1, true); + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + async aboutToAppear() { + var permissions = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + globalThis.abilityContext.getContext().requestPermissionsFromUser(permissions, 0, (data) => { + console.info("start requestPermissionsFromUser!!!!") + }) + } + + async terminateSelfWithResult() { + console.info('fAStartAbilityForResultPromise terminateSelfWithResult START'); + await globalThis.abilityContext.terminateSelfWithResult( + { + resultCode: 1, + want: + { + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME1, + }, + } + ); + await globalThis.abilityContext.terminateSelf(); + console.info('fAStartAbilityForResultPromise terminateSelfWithResult END'); + } + + async fAStartAbilityPromise(tag, str) { + console.info(tag + ' startAbility fAStartAbilityPromise START' + JSON.stringify(str)); + let code; + await globalThis.abilityContext.startAbility(str) + .then((data) => { + console.info(tag + ' startAbility Operation successful. Promise Data: ' + JSON.stringify(data)) + code = data; + }).catch((error) => { + console.info(tag + ' startAbility Operation failed. Promise Cause: ' + JSON.stringify(error)); + code = error; + }) + console.info(tag + ' startAbility Operation code Promise: ' + JSON.stringify(code)); + if (code === 0) { + this.tips('成功'); + } else { + this.tips('错误码:' + code.code); + } + console.info(tag + ' startAbility fAStartAbilityPromise END'); + } + + tips(msg) { + Prompt.showToast({ + message: msg, + duration: 2000, + bottom: '150px' + }); + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/pages/second.ets new file mode 100644 index 000000000..fedd7d8b4 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/ets/pages/second.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Index { + @State message: string = 'hnm2 page' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/module.json new file mode 100644 index 000000000..14ecbbe57 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "hnm2", + "type": "feature", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:hnm2_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.qianyiyingyong.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/float.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/float.json new file mode 100644 index 000000000..560b68dea --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/float.json @@ -0,0 +1,128 @@ +{ + "float": [ + { + "name": "wh_value_1", + "value": "1" + }, + { + "name": "wh_value_5", + "value": "5" + }, + { + "name": "wh_value_10", + "value": "10" + }, + { + "name": "wh_value_15", + "value": "15" + }, + { + "name": "wh_value_20", + "value": "20" + }, + { + "name": "wh_value_25", + "value": "25" + }, + { + "name": "wh_value_30", + "value": "30" + }, + { + "name": "wh_value_40", + "value": "40" + }, + { + "name": "wh_value_50", + "value": "50" + }, + { + "name": "wh_value_60", + "value": "60" + }, + { + "name": "wh_value_65", + "value": "65" + }, + { + "name": "wh_value_70", + "value": "70" + }, + { + "name": "wh_value_80", + "value": "80" + }, + { + "name": "wh_value_100", + "value": "100" + }, + { + "name": "wh_value_130", + "value": "1300" + }, + { + "name": "wh_value_160", + "value": "160" + }, + { + "name": "wh_value_230", + "value": "230" + }, + { + "name": "wh_value_280", + "value": "280" + }, + { + "name": "wh_value_390", + "value": "390" + }, + { + "name": "wh_value_400", + "value": "400" + }, + { + "name": "font_35", + "value": "35" + }, + { + "name": "font_18", + "value": "18" + }, + { + "name": "font_20", + "value": "20" + }, + { + "name": "font_21", + "value": "21" + }, + { + "name": "font_22", + "value": "22" + }, + { + "name": "font_24", + "value": "24" + }, + { + "name": "font_28", + "value": "28" + }, + { + "name": "font_50", + "value": "50" + }, + { + "name": "control_common_font_size", + "value": "20" + }, + { + "name": "slider_text_padding_left", + "value": "5" + }, + { + "name": "volume_border_radius", + "value": "15" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..3b3102318 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "hnm2_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/atomizationresultstagehnm2/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationResultStageEntry.hap", + "atomizationresultstagehm2.hap -> /data/test/AtomizationResultStageHm2.hap", + "atomizationresultstagehnm2.hap -> /data/test/AtomizationResultStageHnm2.hap", + "stageresultmyapplication1.hap -> /data/test/StageResultMyApplication1.hap", + "MockService.hap -> /data/test/MockService.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/Application/AbilityStage.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..396606ff7 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AbilityStage from "@ohos.application.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/MainAbility/MainAbility.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..2879c19bb --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability'; + + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + globalThis.abilityContext = this.context; + windowStage.setUIContent(this.context, "pages/index", null) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..ec20fc082 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + globalThis.delegator = abilityDelegator; + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..fb2b61d0f --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/pages/index.ets @@ -0,0 +1,74 @@ +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; +import file from '@system.file'; +import { Core, ExpectExtend, InstrumentLog, ReportExtend } from "deccjsunit/index" +import List from '../test/ListTest' + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend) + const reportExtend = new ReportExtend(file) + core.addService('report', reportExtend) + core.init() + globalThis.abilityWant.parameters.timeout = 16000; + core.subscribeEvent('task', reportExtend) + const configService = core.getDefaultService('config') + configService.setConfig(globalThis.abilityWant.parameters); + List(globalThis.abilityContext) + core.execute() + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/ListTest.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/ListTest.ets new file mode 100644 index 000000000..e135465f0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/ListTest.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import StartAbilityForResult from './StartAbilityForResult' + +export default function List(context) { + + StartAbilityForResult(context) + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/StartAbilityForResult.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/StartAbilityForResult.ets new file mode 100644 index 000000000..07f3190e2 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/StartAbilityForResult.ets @@ -0,0 +1,529 @@ +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import ability from '@ohos.application.Ability' +import rpc from '@ohos.rpc'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import abilityManager from '@ohos.application.abilityManager'; + + +export default function StartAbilityForResult(abilityContext) { + var TAG = ""; + var DeviceId = ""; + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + describe('StartAbilityForResult', function () { + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : "+cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd1 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd2 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd3 ="cp data/test/AtomizationResultStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityForResult after each called"); + if ("FreeInstall_Stage_StartAbilityForResult_0100" === TAG || + "FreeInstall_Stage_StartAbilityForResult_0500" === TAG || + "FreeInstall_Stage_StartAbilityForResult_2800" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + globalThis.delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + if ("FreeInstall_Stage_StartAbilityForResult_0700" === TAG) { + var cmd5 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultStageHm2.hap"; + globalThis.delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd6 = "cp data/test/AtomizationResultStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd6, (err: any, d: any) => { + console.info("executeShellCommand6 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + if ("FreeInstall_Stage_StartAbilityForResult_2600" === TAG) { + var cmd14 = "bm uninstall -n com.ohos.hag.famanager"; + globalThis.delegator.executeShellCommand(cmd14, (err: any, d: any) => { + console.info("executeShellCommand14 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0100 + * @tc.name: startAbilityForResult: Input empty deviceId,free install and start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0100", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0100-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0100"; + let details; + var str = { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0400 + * @tc.name: startAbilityForResult: No deviceId,free install and start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0400-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0400"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + var options = { + "windowMode": 0, "displayId": 2 + } + await globalThis.abilityContext.startAbilityForResult(str, options) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0500 + * @tc.name: startAbilityForResult: app already installed, start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0500", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0500-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0500"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0600 + * @tc.name: startAbilityForResult: Input local deviceId,free install and start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0600-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0600"; + let details1; + let details2; + await abilityManager.getTopAbility().then((data) => { + details1 = data; + console.info(' getTopAbility succeeded data: ' + JSON.stringify(data)); + }).catch((error) => { + console.error(' getTopAbility error: ' + JSON.stringify(error)); + }); + console.log(" checkAbilityInfo deviceId : " + details1.ability.deviceId); + DeviceId = details1.ability.deviceId; + await sleep(500); + var str = { + "deviceId": DeviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details2 = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details2.resultCode); + expect(details2.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0700 + * @tc.name: startAbilityForResult: Free install and start feature hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0700", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0700-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0700"; + var cmd7 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd7, (err: any, d: any) => { + console.info("executeShellCommand7: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd8 = "cp data/test/AtomizationResultStageHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd8, (err: any, d: any) => { + console.info("executeShellCommand8: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_0800 + * @tc.name: startAbilityForResult: Call by AsyncCallback,free install and start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_0800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_0800-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_0800"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + var options = { + "windowMode": 0, "displayId": 2 + } + await globalThis.abilityContext.startAbilityForResult(str, options, (err, data) => { + console.log(TAG + ": StartAbilityForResultCallBack success, err: " + JSON.stringify(err) + + ",data: " + JSON.stringify(data)); + details = data; + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_1200 + * @tc.name: startAbilityForResult: Yuanzihua already installed,input wrong flags,start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_1200", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_1200-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_1200"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '11' + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_1400 + * @tc.name: startAbilityForResult: Yuanzihua already installed,input wrong flags,add options,start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_1400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_1400-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_1400"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '11' + } + var options = { + "windowMode": 0, "displayId": 2 + } + await globalThis.abilityContext.startAbilityForResult(str, options) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_1600 + * @tc.name: startAbilityForResult: Yuanzihua already installed,input empty flags,start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_1600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_1600-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_1600"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '' + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_1800 + * @tc.name: startAbilityForResult: Yuanzihua already installed,input empty flags,add options,start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_1800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_1800-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_1800"; + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + 'flags': '' + } + var options = { + "windowMode": 0, "displayId": 2 + } + await globalThis.abilityContext.startAbilityForResult(str, options) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_2700 + * @tc.name: startAbilityForResult: Input different moduleName(feature hap),install feature hap. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_2700", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_2700-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_2700"; + var cmd9 = "bm install -p data/test/AtomizationResultStageHnm2.hap"; + globalThis.delegator.executeShellCommand(cmd9, (err: any, d: any) => { + console.info("executeShellCommand9: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_2800 + * @tc.name: startAbilityForResult: Input parameters extended information. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_2800", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_2800-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_2800"; + var cmd10 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + globalThis.delegator.executeShellCommand(cmd10, (err: any, d: any) => { + console.info("executeShellCommand10 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd11 = "cp data/test/AtomizationResultStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd11, (err: any, d: any) => { + console.info("executeShellCommand11 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + 'deviceId': '', + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + 'parameters': {"name": "1111", "Ext2": "ExtValue2","site":"很开心看到你!"} + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_2600 + * @tc.name: startAbilityForResult: Same application,start feature hap(not added in "targetBundleList") + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_2600", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_2600-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_2600"; + var cmd12 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationResultStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd12, (err: any, d: any) => { + console.info("executeShellCommand12 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd13 = "cp data/test/StageResultMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd13, (err: any, d: any) => { + console.info("executeShellCommand13 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + "deviceId": "", + "bundleName": "com.example.startAbilityForResult.hmservice", + "abilityName": "MainAbility1", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/Utils.ets new file mode 100644 index 000000000..78a775bc3 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/ets/test/Utils.ets @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(reject) + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getNowTime() { + return new Date().getTime(); + } + + /** + * 接口调用时间 + * @param startTime 接口调用开始时间 + * @param endTime 接口调用结束时间 + */ + static getDurationTime(msg, startTime, endTime) { + console.info(msg + 'Get Interface startTime: ' + startTime); + console.info(msg + 'Get Interface endTime: ' + endTime); + var duration = (endTime - startTime) + console.info(msg + 'Get Interface Duration: ' + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/module.json new file mode 100644 index 000000000..f1ba526b0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/module.json @@ -0,0 +1,51 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.startAbilityForResult.hmservice.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..490210a39 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/freeinstallstartabilityforresultstagetest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationResultStageEntry.hap", + "MockService.hap -> /data/test/MockService.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..396606ff7 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AbilityStage from "@ohos.application.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..2879c19bb --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability'; + + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + globalThis.abilityContext = this.context; + windowStage.setUIContent(this.context, "pages/index", null) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..ec20fc082 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + globalThis.delegator = abilityDelegator; + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..fb2b61d0f --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/pages/index.ets @@ -0,0 +1,74 @@ +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import router from '@system.router'; +import file from '@system.file'; +import { Core, ExpectExtend, InstrumentLog, ReportExtend } from "deccjsunit/index" +import List from '../test/ListTest' + +async function routePage() { + let options = { + uri: 'pages/second' + } + try { + await router.push(options) + } catch (err) { + console.error(`fail callback, code: ${err.code}, msg: ${err.msg}`) + } +} + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info("start run testcase!!!!") + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend) + const reportExtend = new ReportExtend(file) + core.addService('report', reportExtend) + core.init() + globalThis.abilityWant.parameters.timeout = 16000; + core.subscribeEvent('task', reportExtend) + const configService = core.getDefaultService('config') + configService.setConfig(globalThis.abilityWant.parameters); + List(globalThis.abilityContext) + core.execute() + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text('Hello World') + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(25) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .onClick(() => { + routePage() + }) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets new file mode 100644 index 000000000..e135465f0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import StartAbilityForResult from './StartAbilityForResult' + +export default function List(context) { + + StartAbilityForResult(context) + +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityForResult.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityForResult.ets new file mode 100644 index 000000000..45e243045 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityForResult.ets @@ -0,0 +1,135 @@ +// @ts-nocheck +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import ability from '@ohos.application.Ability' +import rpc from '@ohos.rpc'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; + + +export default function StartAbilityForResult(abilityContext) { + var TAG = ""; + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + describe('StartAbilityForResult', function () { + beforeAll(async function (done) { + console.info("StartAbilityForResult before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : "+cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd1 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd2 = "mkdir /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd3 ="cp data/test/AtomizationResultStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityForResult after each called"); + if ("FreeInstall_Stage_StartAbilityForResult_2500") { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + globalThis.delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + var cmd5 = "bm uninstall -n com.ohos.hag.famanager"; + globalThis.delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_2400 + * @tc.name: startAbilityForResult: don't add targetBundleList,free install and start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_2400", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_2400-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_2400"; + let details; + var str = { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + + /* + * @tc.number: FreeInstall_Stage_StartAbilityForResult_2500 + * @tc.name: startAbilityForResult: don't add targetBundleList, app already installed, start hap successfully. + * @tc.desc: Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_StartAbilityForResult_2500", 0, async function (done) { + console.log("------------start FreeInstall_Stage_StartAbilityForResult_2500-------------"); + TAG = "FreeInstall_Stage_StartAbilityForResult_2500"; + var cmd6 = "bm install -p data/test/AtomizationResultStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd6, (err: any, d: any) => { + console.info("executeShellCommand6: err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + let details; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + await globalThis.abilityContext.startAbilityForResult(str) + .then((data) => { + details = data; + console.info(TAG + ' StartAbilityForResultPromise successful. Data: ' + JSON.stringify(data)) + }).catch((error) => { + console.info(TAG + ' StartAbilityForResultPromise failed. Cause: ' + JSON.stringify(error)); + }) + await sleep(2000); + console.log(TAG + " resultCode: " + details.resultCode); + expect(details.resultCode).assertEqual(1); + done(); + }); + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/Utils.ets b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/Utils.ets new file mode 100644 index 000000000..78a775bc3 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/ets/test/Utils.ets @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Utils { + static sleep(time) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(reject) + }, time) + }).then(() => { + console.info(`sleep ${time} over...`) + }) + } + + static getNowTime() { + return new Date().getTime(); + } + + /** + * 接口调用时间 + * @param startTime 接口调用开始时间 + * @param endTime 接口调用结束时间 + */ + static getDurationTime(msg, startTime, endTime) { + console.info(msg + 'Get Interface startTime: ' + startTime); + console.info(msg + 'Get Interface endTime: ' + endTime); + var duration = (endTime - startTime) + console.info(msg + 'Get Interface Duration: ' + duration); + return duration; + } +} + + + + diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/module.json new file mode 100644 index 000000000..f1ba526b0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/module.json @@ -0,0 +1,51 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.startAbilityForResult.hmservice.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..490210a39 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilityforresultstagetest/startabilityforresultnotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.info("start requestPermissionsFromUser!!!!") + }) + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.css b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.css new file mode 100644 index 000000000..b52e9bfa9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.css @@ -0,0 +1,19 @@ +#wrapper { + flex-direction: column; +} + +#div1 { + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + background-color: white; +} + +#text1 { + height: 45px; + width: 150px; + font-size: 16px; + text-align: center; +} + diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.hml b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.hml new file mode 100644 index 000000000..b01936fb1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.hml @@ -0,0 +1,7 @@ +
+
+
+ {{title}} +
+
+
\ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.json new file mode 100644 index 000000000..1c9e2ce99 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/js/ServiceAbility/pages/index/index.json @@ -0,0 +1,6 @@ +{ + "actions": {}, + "data": { + "title": "Hello World" + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/module.json new file mode 100644 index 000000000..8d4674b15 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/module.json @@ -0,0 +1,66 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": true, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.example.qianyiyingyong.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" + } + ], + "extensionAbilities": [ + { + "name": "com.example.qianyiyingyong.ServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service", + "metadata": [ + { + "name": "ohos.extension.form", + "resource": "$profile:form_config" + } + ] + } + ] + } + } \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..98795c555 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "form_ServiceAbility_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilitystagetest/atomizationstageentry/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationStageEntry.hap", + "AtomizationStageHm2.hap -> /data/test/AtomizationStageHm2.hap", + "AtomizationStageHm4.hap -> /data/test/AtomizationStageHm4.hap", + "MockService.hap -> /data/test/MockService.hap", + "MockServiceTimeout.hap -> /data/test/MockServiceTimeout.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b3f3c3060 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AbilityStage from "@ohos.application.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/FormAbility/FormAbility.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/FormAbility/FormAbility.ts new file mode 100644 index 000000000..f8c8f1dd9 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/FormAbility/FormAbility.ts @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import FormExtension from '@ohos.application.FormExtension'; +import formBindingData from '@ohos.application.formBindingData'; +import formInfo from '@ohos.application.formInfo'; + +export default class FormAbility extends FormExtension { + onCreate(want) { + // Called to return a FormBindingData object. + let formData = {}; + return formBindingData.createFormBindingData(formData); + } + + onCastToNormal(formId) { + // Called when the form provider is notified that a temporary form is successfully + // converted to a normal form. + } + + onUpdate(formId) { + // Called to notify the form provider to update a specified form. + } + + onVisibilityChange(newStatus) { + // Called when the form provider receives form events from the system. + } + + onEvent(formId, message) { + // Called when a specified message event defined by the form provider is triggered. + } + + onDestroy(formId) { + // Called to notify the form provider that a specified form has been destroyed. + } + + onAcquireFormState(want) { + // Called to return a {@link FormState} object. + return formInfo.FormState.READY; + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..9dca45fbb --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + windowStage.setUIContent(this.context, "pages/index", null) + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility1/MainAbility1.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility1/MainAbility1.ts new file mode 100644 index 000000000..a7b04f832 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/MainAbility1/MainAbility1.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' + +export default class MainAbility1 extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility1 onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + console.log("[Demo] MainAbility1 onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility1 onWindowStageCreate") + + windowStage.setUIContent(this.context, "pages/second", null) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility1 onWindowStageDestroy") + + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility1 onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility1 onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts new file mode 100644 index 000000000..593dc9add --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/ServiceAbility/ServiceAbility.ts @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ServiceExtensionAbility from '@ohos.application.ServiceExtensionAbility'; +import wantConstant from '@ohos.ability.wantConstant'; +import commonEvent from '@ohos.commonEvent'; + +var publishOptions = { + parameters: { + "assertData": "onSuccess" + } +}; + +function PublishCallBack(err) { + if (err.code) { + console.error("ConnectAbilityTest_Ext service publish failed " + JSON.stringify(err)); + } else { + console.info("ConnectAbilityTest_Ext service publish success!!!"); + } +} + +export default class ServiceAbility extends ServiceExtensionAbility { + onCreate() { + console.info('ServiceAbility2 onCreate'); + } + + onRequest(want, startId) { + console.info('ServiceAbility2 onRequest, want: ' + want.abilityName); + console.info('ServiceAbility2 onRequest, startId: ' + startId); + console.info('ServiceAbility2 onRequest'); + let str = { + 'deviceId': '', + 'bundleName': 'com.example.qianyiyingyong.hmservice', + 'abilityName': 'com.example.qianyiyingyong.ServiceAbility', + 'moduleName': 'entry', + 'flags': wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + console.info('ServiceAbility2 onRequest START, str is : ' + JSON.stringify(str)); + + this.context.startAbility(str).then((data) => { + console.info("ServiceAbility2 onRequest data: " + JSON.stringify(data)) + commonEvent.publish("service_event",publishOptions,PublishCallBack); + }).catch((error) => { + console.info("ServiceAbility2 onRequest error: " + JSON.stringify(error)) + }) + } + + onDestroy() { + console.info('ServiceAbility2 onDestroy'); + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..2c446f687 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + globalThis.delegator = abilityDelegator; + + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..51801c999 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/index.ets @@ -0,0 +1,56 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {Core, ExpectExtend, InstrumentLog, ReportExtend} from "deccjsunit/index.ets" +import file from '@system.file'; +import List from '../test/ListTest' + +@Entry +@Component +struct Index { + @State message: string = 'StartAbilityTest' + aboutToAppear() { + console.info("start run testcase!!!!") + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend) + const reportExtend = new ReportExtend(file) + + core.addService('report', reportExtend) + core.init() + globalThis.abilityWant.parameters.timeout = 50000; + core.subscribeEvent('task', reportExtend) + const configService = core.getDefaultService('config') + console.info('parameters---->' + JSON.stringify(globalThis.abilityWant.parameters)) + configService.setConfig(globalThis.abilityWant.parameters) + List(globalThis.abilityContext) + core.execute() + } + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/second.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/second.ets new file mode 100644 index 000000000..d5b979d2f --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/pages/second.ets @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Entry +@Component +struct Second { + @State message: string = 'StartAbilityTest MainAbility2' + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/ListTest.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/ListTest.ets new file mode 100644 index 000000000..cdbb0f8cc --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/ListTest.ets @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import startAbilityTest from './StartAbilityTest' + +export default function testsuite(context) { + startAbilityTest(context) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/StartAbilityTest.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/StartAbilityTest.ets new file mode 100644 index 000000000..711e07739 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/ets/test/StartAbilityTest.ets @@ -0,0 +1,1240 @@ +// @ts-nocheck + + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import ability from '@ohos.application.Ability' +import rpc from '@ohos.rpc'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import abilityManager from '@ohos.application.abilityManager'; +import commonEvent from '@ohos.commonEvent'; + + +export default function startAbilityTest(abilityContext) { + + describe('startAbilityTest', function () { + + console.info("-------------Stage model--> startAbilityXTS Test start----------------") + + var TAG = ""; + + globalThis.delegator.getCurrentTopAbility((err : any, data : any) => { + console.info("getCurrentTopAbility err: " + JSON.stringify(err) + ", data: " + JSON.stringify(data)); + globalThis.ability = data; + }); + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + var subscriber; + var result; + var subscribeInfo = { + events: ["service_event"] + }; + + function SubscribeCallBack(err, data) { + if (err.code) { + console.error("Testevent subscribe failed " + JSON.stringify(err)); + } else { + console.info("Testevent subscribe " + JSON.stringify(data)); + for (var key1 in data.parameters) { + console.info("Testevent data.parameters[key] is :" + data.parameters[key1]) + if (data.parameters[key1] === "onSuccess") { + result = "onSuccess" + } + } + } + } + + function CreateSubscriberCallBack(err, commonEventSubscriber) { + if (err.code) { + console.error("Testevent createSubscriber failed " + JSON.stringify(err)); + } else { + console.info("Testevent createSubscriber"); + subscriber = commonEventSubscriber; + commonEvent.subscribe(subscriber, SubscribeCallBack); + } + } + + + beforeAll(async function (done) { + console.info("StartAbilityTest before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : "+cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d));}) + await sleep(500); + var cmd3 ="cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err)," data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityTest after each called"); + if ("FreeInstall_Stage_Local_StartAbility_0200" === TAG || + "FreeInstall_Stage_Local_StartAbility_0500" === TAG || + "FreeInstall_Stage_Local_StartAbility_0700" === TAG || + "FreeInstall_Stage_Local_StartAbility_0800" === TAG || + "FreeInstall_Stage_Local_StartAbility_1000" === TAG || + "FreeInstall_Stage_Local_StartAbility_1200" === TAG || + "FreeInstall_Stage_Local_StartAbility_1400" === TAG || + "FreeInstall_Stage_Local_StartAbility_1600" === TAG || + "FreeInstall_Stage_Local_StartAbility_1800" === TAG || + "FreeInstall_Stage_Local_StartAbility_2200" === TAG || + "FreeInstall_Stage_Local_StartAbility_2400" === TAG || + "FreeInstall_Stage_Local_StartAbility_3000" === TAG || + "FreeInstall_Stage_Local_StartAbility_3400" === TAG || + "FreeInstall_Stage_Local_StartAbility_3500" === TAG || + "FreeInstall_Stage_Local_StartAbility_2000" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + globalThis.delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + + if ("FreeInstall_Stage_Local_StartAbility_2000" === TAG) { + var cmd5 = "bm uninstall -n com.ohos.hag.famanager"; + globalThis.delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await sleep(500); + done(); + }); + + async function abilityForeground(tag) { + globalThis.delegator.doAbilityForeground(globalThis.ability, (err: any, data: any) => { + console.info(tag + "doAbilityForeground err: " + JSON.stringify(err) + ", data: " + JSON.stringify(data)); + }); + } + + async function abilityBackground(tag) { + globalThis.delegator.doAbilityBackground(globalThis.ability, (err: any, data: any) => { + console.info(tag + "abilityBackground err: " + JSON.stringify(err) + ", data: " + JSON.stringify(data)); + }); + } + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0100 + * @tc.name The deviceid passed in is null, so the installation free process is implemented + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0100", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0100-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0100"; + var flag = 0; + var str = { + "deviceId":"", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0200 + * @tc.name The passed in deviceid is empty, and the installed apps are automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0200", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0200-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0200"; + var flag = 0; + abilityForeground(TAG); + await sleep(1000); + var str = { + "deviceId":"", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0300 + * @tc.name The deviceid passed in is empty. There is no need to install or installed HAP package + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0300", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0300-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0300"; + var cmd300 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd300, (err: any, d: any) => { + console.info("executeShellCommand300 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 4).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0400 + * @tc.name Do not transfer deviceid to realize installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0400", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0400-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0400"; + var flag = 0; + var cmd400 = "cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd400, (err: any, d: any) => { + console.info("executeShellCommand400 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0500 + * @tc.name The installed application will be automatically pulled up without transmitting the deviceid + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0500", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0500-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0500"; + var flag = 0; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0600 + * @tc.name Manually obtain and pass in the deviceid of the device to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0600", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0600-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0600"; + var flag = 0; + var deviceId = ""; + abilityForeground(TAG); + await sleep(1000); + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceId:' + JSON.stringify(data.ability.deviceId)); + deviceId = data.ability.deviceId; + }) + await sleep(2000); + var str = { + "deviceId": deviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0700 + * @tc.name Manually obtain and pass in the deviceid of the device, + and the installed application will be automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0700", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0700-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0700"; + var flag = 0; + var deviceId = ""; + abilityForeground(TAG); + await sleep(1000); + abilityManager.getTopAbility((err, data) => { + console.log(TAG + 'getTopAbility result: ' + JSON.stringify(data) + " , err: " + JSON.stringify(err)); + console.log(TAG + 'getTopAbility result deviceId:' + JSON.stringify(data.ability.deviceId)); + deviceId = data.ability.deviceId; + }) + await sleep(2000); + var str = { + "deviceId": deviceId, + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0800 + * @tc.name Without passing deviceid, pull up the HAP with the same bundlename and different + abilityname as the entry to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0800", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0800-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0800"; + var flag = 0; + var cmd800 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd800, (err: any, d: any) => { + console.info("executeShellCommand800 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd801 = "cp data/test/AtomizationStageHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd801, (err: any, d: any) => { + console.info("executeShellCommand801 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hnm2", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0800-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_0900 + * @tc.name Do not transfer deviceid, use callback to realize installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_0900", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_0900-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_0900"; + var cmd900 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageHm2.hap"; + globalThis.delegator.executeShellCommand(cmd900, (err: any, d: any) => { + console.info("executeShellCommand900 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd901 = "cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd901, (err: any, d: any) => { + console.info("executeShellCommand901 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str, (error, data) => { + console.log(TAG + ": startAbility err: " + JSON.stringify(error) + ",data: " + JSON.stringify(data)); + expect(error.code == 0).assertTrue(); + }) + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_0900-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1000 + * @tc.name Do not transmit deviceid, and use callback to automatically pull up installed applications + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1000", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1000-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1000"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str, (error, data) => { + console.log(TAG + ": startAbility err: " + JSON.stringify(error) + ",data: " + JSON.stringify(data)); + expect(error.code == 0).assertTrue(); + }) + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1000-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1100 + * @tc.name Flags=1717 of the incoming error. There is a hap package that needs to + be installed free under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1100", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1100-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1100"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": 1717, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1200 + * @tc.name Bad flags=1717 passed in, atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1200", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1200-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1200"; + var flag = 0; + var cmd1200 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd1200, (err: any, d: any) => { + console.info("executeShellCommand1200 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": 1717, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1300 + * @tc.name Flags= '94.31' of the incoming error. There is a hap package that + needs to be installed free under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1300", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1300-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1300"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '94.31', + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1400 + * @tc.name Flags= '94.31' of incoming error, atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1400", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1400-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1400"; + var flag = 0; + var cmd1400 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd1400, (err: any, d: any) => { + console.info("executeShellCommand1400 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '94.31', + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1500 + * @tc.name Flags= '' of the incoming error. There is a hap package that needs to be + installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1500", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1500-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1500"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '', + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1600 + * @tc.name Bad flags= ', atomized HAP package installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1600", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1600-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1600"; + var flag = 0; + var cmd1600 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd1600, (err: any, d: any) => { + console.info("executeShellCommand1600 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": '', + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1700 + * @tc.name No flag is transmitted, and there are HAP packages that need to be installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1700", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1700-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1700"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1800 + * @tc.name No flag is transmitted, and the atomized HAP package is installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1800", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1800-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1800"; + var flag = 0; + var cmd1800 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd1800, (err: any, d: any) => { + console.info("executeShellCommand1800 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1800-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2100 + * @tc.name The parameters field is passed in the want to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2100", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2100-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2100"; + var flag = 0; + abilityForeground(TAG); + await sleep(1000); + + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + "parameters": { + "name": "1111", + "Ext2": "ExtValue2", + "site": "很开心看到你!" + } + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2200 + * @tc.name The parameters field is passed in the want, and the installed applications + are automatically pulled up + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2200", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2200-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2200"; + var flag = 0; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + "parameters": { + "name": "1111", + "Ext2": "ExtValue2", + "site": "很开心看到你!" + } + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2300 + * @tc.name Make the current service not in the foreground, and there are HAP + packages that need not be installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2300", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2300-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2300"; + abilityForeground(TAG); + await sleep(1000); + abilityBackground(TAG); + await sleep(5000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 13).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2400 + * @tc.name The current service is not in the foreground, and the atomized HAP package has been installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2400", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2400-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2400"; + var cmd2400 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd2400, (err: any, d: any) => { + console.info("executeShellCommand2400 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + abilityBackground(TAG); + await sleep(5000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 13).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2500 + * @tc.name FA Service Center installation free timeout + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2500", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2500-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2500"; + var installFACmd = "bm install -p data/test/MockServiceTimeout.hap"; + globalThis.delegator.executeShellCommand(installFACmd, (err: any, d: any) => { + console.info("executeShellCommand2500 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var mkdirEntryCmd = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(mkdirEntryCmd, (err: any, d: any) => { + console.info("executeShellCommand2501 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var mkdirFilesCmd = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(mkdirFilesCmd, (err: any, d: any) => { + console.info("executeShellCommand2502 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var moveQianyiCmd = "cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/" + + "haps/entry/files"; + globalThis.delegator.executeShellCommand(moveQianyiCmd, (err: any, d: any) => { + console.info("executeShellCommand2503 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 3).assertTrue(); + }); + await sleep(35000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3000 + * @tc.name There are hapa and hapb with the same bundlename and abilityname and different modulenames. + Under the specified path, there are hapa with correct input parameters that need not be installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3000", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3000-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3000"; + var flag = 0; + var installFACmd = "bm install -p data/test/MockService.hap"; + globalThis.delegator.executeShellCommand(installFACmd, (err: any, d: any) => { + console.info("executeShellCommand3003 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var mkdirEntryCmd = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(mkdirEntryCmd, (err: any, d: any) => { + console.info("executeShellCommand3004 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var mkdirFilesCmd = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(mkdirFilesCmd, (err: any, d: any) => { + console.info("executeShellCommand3005 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3000 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd3000, (err: any, d: any) => { + console.info("executeShellCommand3000 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3001 = "cp data/test/AtomizationStageHm4.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd3001, (err: any, d: any) => { + console.info("executeShellCommand3001 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hm4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3000-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3100 + * @tc.name There are hapa and hapb with the same bundlename and abilityname and different modulenames. + Hapb with input parameter error exists in the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3100", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3100-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3100"; + var cmd3100 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageHm4.hap"; + globalThis.delegator.executeShellCommand(cmd3100, (err: any, d: any) => { + console.info("executeShellCommand3100 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3101 = "cp data/test/AtomizationStageHm2.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd3101, (err: any, d: any) => { + console.info("executeShellCommand3101 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.hm2.MainAbility", + "moduleName": "hm4", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 4).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3100-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3200 + * @tc.name Wrong modulename passed in + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3200", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3200-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3200"; + var cmd3200 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageHm2.hap"; + globalThis.delegator.executeShellCommand(cmd3200, (err: any, d: any) => { + console.info("executeShellCommand3200 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3201 = "cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd3201, (err: any, d: any) => { + console.info("executeShellCommand3201 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "hnm", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3200-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3300 + * @tc.name Do not transfer modulename. There are HAP packages that need not be + installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3300", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3300-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3300"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 1).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3300-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3400 + * @tc.name Modulename is not passed. Atomized HAP package is installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3400", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3400-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3400"; + var flag = 0; + var cmd3400 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd3400, (err: any, d: any) => { + console.info("executeShellCommand3400 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "deviceId": "", + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3400-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_3500 + * @tc.name Service to pull up the service of the atomized service to realize the installation free process + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_3500", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_3500-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_3500"; + commonEvent.createSubscriber(subscribeInfo, CreateSubscriberCallBack); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.open.harmony.packagemag", + "abilityName": "com.open.harmony.packagemag.ServiceAbility", + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + expect(result).assertEqual("onSuccess"); + console.info("------------end FreeInstall_Stage_Local_StartAbility_3500-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_1900 + * @tc.name The current service is not in the foreground. Page a jumps to page B first. + There are HAP packages that need not be installed under the specified path + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_1900", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_1900-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_1900"; + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.open.harmony.packagemag", + "abilityName": "MainAbility1", + "moduleName": "entry", + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": Mainability2 startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": Mainability2 startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(5000); + abilityBackground(TAG); + await sleep(1000); + var str2 = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str2).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 13).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_1900-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2000 + * @tc.name The current service is not in the foreground. Page a jumps to page B first. + The atomized HAP package has been installed + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2000", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2000-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2000"; + var cmd2000 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd2000, (err: any, d: any) => { + console.info("executeShellCommand2000 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.open.harmony.packagemag", + "abilityName": "MainAbility1", + "moduleName": "entry", + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": Mainability2 startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": Mainability2 startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(5000); + abilityBackground(TAG); + await sleep(1000); + var str2 = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str2).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + expect(error.code == 13).assertTrue(); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2000-------------"); + done(); + }); + + console.info("-------------Stage model--> startAbilityXTS Test end----------------") + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.css b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.css new file mode 100644 index 000000000..e0401b1a7 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.css @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#wrapper { + flex-direction: column; +} + +#div1 { + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + background-color: white; +} + +#text1 { + height: 45px; + width: 150px; + font-size: 16px; + text-align: center; +} + diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.hml b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.hml new file mode 100644 index 000000000..b01936fb1 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.hml @@ -0,0 +1,7 @@ +
+
+
+ {{title}} +
+
+
\ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.json new file mode 100644 index 000000000..1c9e2ce99 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/js/ServiceAbility/pages/index/index.json @@ -0,0 +1,6 @@ +{ + "actions": {}, + "data": { + "title": "Hello World" + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/module.json new file mode 100644 index 000000000..07b378b1f --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/module.json @@ -0,0 +1,73 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.open.harmony.packagemag.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + }, + { + "name": "MainAbility1", + "srcEntrance": "./ets/MainAbility1/MainAbility1.ts", + "description": "$string:MainAbility1_desc", + "icon": "$media:icon", + "label": "$string:MainAbility1_label" + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.CHANGE_ABILITY_ENABLED_STATE" + }, + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" + } + ], + "extensionAbilities": [ + { + "name": "com.open.harmony.packagemag.ServiceAbility", + "srcEntrance": "./ets/ServiceAbility/ServiceAbility.ts", + "label": "$string:form_ServiceAbility_label", + "description": "$string:form_ServiceAbility_desc", + "type": "service", + "metadata": [ + { + "name": "ohos.extension.form", + "resource": "$profile:form_config" + } + ] + } + ] + } + } \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..fd38366e0 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,40 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "MainAbility1_desc", + "value": "description" + }, + { + "name": "MainAbility1_label", + "value": "label" + }, + { + "name": "form_FormAbility_desc", + "value": "form_description" + }, + { + "name": "form_FormAbility_label", + "value": "form_label" + }, + { + "name": "form_ServiceAbility_desc", + "value": "form_description" + }, + { + "name": "form_ServiceAbility_label", + "value": "form_label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilitystagetest/freeinstallstartabilitystagetest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 /data/test/AtomizationStageEntry.hap", + "MockService.hap -> /data/test/MockService.hap", + "StageMyApplication1.hap -> /data/test/StageMyApplication1.hap" + ] + } + ] +} diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts new file mode 100644 index 000000000..b3f3c3060 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/Application/AbilityStage.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AbilityStage from "@ohos.application.AbilityStage" + +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 000000000..9dca45fbb --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate") + globalThis.abilityWant = want; + } + + onDestroy() { + console.log("[Demo] MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + windowStage.setUIContent(this.context, "pages/index", null) + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + console.log("[Demo] MainAbility onWindowStageDestroy") + } + + onForeground() { + // Ability has brought to foreground + console.log("[Demo] MainAbility onForeground") + } + + onBackground() { + // Ability has back to background + console.log("[Demo] MainAbility onBackground") + } +}; diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 000000000..2c446f687 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -a' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + globalThis.delegator = abilityDelegator; + + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/pages/index.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/pages/index.ets new file mode 100644 index 000000000..39d608703 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/pages/index.ets @@ -0,0 +1,57 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {Core, ExpectExtend, InstrumentLog, ReportExtend} from "deccjsunit/index.ets" +import file from '@system.file'; +import List from '../test/ListTest' + +@Entry +@Component +struct Index { + @State message: string = 'StartAbility NoTargetBundleList Test' + aboutToAppear() { + console.info("start run testcase!!!!") + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend) + const reportExtend = new ReportExtend(file) + + core.addService('report', reportExtend) + core.init() + globalThis.abilityWant.parameters.timeout = 20000; + core.subscribeEvent('task', reportExtend) + const configService = core.getDefaultService('config') + console.info('parameters---->' + JSON.stringify(globalThis.abilityWant.parameters)) + configService.setConfig(globalThis.abilityWant.parameters) + List(globalThis.abilityContext) + core.execute() + } + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets new file mode 100644 index 000000000..cdbb0f8cc --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/ListTest.ets @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import startAbilityTest from './StartAbilityTest' + +export default function testsuite(context) { + startAbilityTest(context) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityTest.ets b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityTest.ets new file mode 100644 index 000000000..804ca44a6 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/ets/test/StartAbilityTest.ets @@ -0,0 +1,205 @@ +// @ts-nocheck + +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from "deccjsunit/index" +import ability from '@ohos.application.Ability' +import rpc from '@ohos.rpc'; +import wantConstant from '@ohos.ability.wantConstant' +import Prompt from '@system.prompt'; +import abilityManager from '@ohos.application.abilityManager'; + +export default function startAbilityTest(abilityContext) { + + describe('startAbilityTest', function () { + + console.info("-------------Stage model--> startNoTargetBundleListXTS Test start----------------") + + var TAG = ""; + + globalThis.delegator.getCurrentTopAbility((err: any, data: any) => { + console.info("getCurrentTopAbility err: " + JSON.stringify(err) + ", data: " + JSON.stringify(data)); + globalThis.ability = data; + }); + + + function sleep(time) { + return new Promise((resolve) => setTimeout(resolve, time)) + } + + beforeAll(async function (done) { + console.info("StartAbilityTest before all called"); + var cmd = "bm install -p data/test/MockService.hap"; + console.info("cmd : " + cmd) + globalThis.delegator.executeShellCommand(cmd, (err: any, d: any) => { + console.info("executeShellCommand : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd1 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry"; + globalThis.delegator.executeShellCommand(cmd1, (err: any, d: any) => { + console.info("executeShellCommand1 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2 = "mkdir -p /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2, (err: any, d: any) => { + console.info("executeShellCommand2 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd3 = "cp data/test/AtomizationStageEntry.hap /data/app/el2/100/base/com.ohos.hag.famanager/haps/" + + "entry/files"; + globalThis.delegator.executeShellCommand(cmd3, (err: any, d: any) => { + console.info("executeShellCommand3 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + done(); + }) + }); + + afterEach(async function (done) { + console.info("StartAbilityTest after each called"); + if ("FreeInstall_Stage_Local_StartAbility_2700" === TAG) { + var cmd4 = "bm uninstall -n com.example.qianyiyingyong.hmservice"; + globalThis.delegator.executeShellCommand(cmd4, (err: any, d: any) => { + console.info("executeShellCommand4 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + } + + if ("FreeInstall_Stage_Local_StartAbility_2800" === TAG) { + var cmd5 = "bm uninstall -n com.ohos.hag.famanager"; + globalThis.delegator.executeShellCommand(cmd5, (err: any, d: any) => { + console.info("executeShellCommand5 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + } + await sleep(500); + done(); + }); + + async function abilityForeground(tag) { + globalThis.delegator.doAbilityForeground(globalThis.ability, (err: any, data: any) => { + console.info(tag + "doAbilityForeground err:" + JSON.stringify(err) + ", data:" + JSON.stringify(data)); + }); + } + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2600 + * @tc.name Atomized services are not added to the white list, and cross application installation + is not required + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2600", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2600-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2600"; + var flag = 0; + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2600-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2700 + * @tc.name Atomized services are not added to the white list, + and atomized HAP packages are pulled across applications + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2700", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2700-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2700"; + var flag = 0; + var cmd2700 = "bm install -p data/test/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd2700, (err: any, d: any) => { + console.info("executeShellCommand2700 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.example.qianyiyingyong.hmservice", + "abilityName": "com.example.qianyiyingyong.MainAbility", + "moduleName": "entry", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2700-------------"); + done(); + }); + + /* + * @tc.number FreeInstall_Stage_Local_StartAbility_2800 + * @tc.name Atomized services are not added to the white list, + same application pull up the different ability. + * @tc.desc Function test + * @tc.level 0 + */ + it("FreeInstall_Stage_Local_StartAbility_2800", 0, async function (done) { + console.info("------------start FreeInstall_Stage_Local_StartAbility_2800-------------"); + TAG = "FreeInstall_Stage_Local_StartAbility_2800"; + var flag = 0; + var cmd2800 = "rm /data/app/el2/100/base/com.ohos.hag.famanager/haps/entry/files/AtomizationStageEntry.hap"; + globalThis.delegator.executeShellCommand(cmd2800, (err: any, d: any) => { + console.info("executeShellCommand2800 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + var cmd2801 = "cp data/test/StageMyApplication1.hap /data/app/el2/100/base/com.ohos.hag.famanager" + + "/haps/entry/files"; + globalThis.delegator.executeShellCommand(cmd2801, (err: any, d: any) => { + console.info("executeShellCommand2801 : err : " + JSON.stringify(err), " data : " + JSON.stringify(d)); + }) + await sleep(500); + abilityForeground(TAG); + await sleep(1000); + var str = { + "bundleName": "com.open.harmony.packagemag.hmservice", + "abilityName": "MainAbility", + "moduleName": "myapplication1", + "flags": wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, + } + abilityContext.startAbility(str).then((data) => { + console.log(TAG + ": startAbility success. data: " + JSON.stringify(data)); + flag = 1; + expect(flag == 1).assertTrue(); + }).catch((error) => { + console.log(TAG + ": startAbility fail. err: " + JSON.stringify(error)); + + }); + await sleep(2000); + console.info("------------end FreeInstall_Stage_Local_StartAbility_2800-------------"); + done(); + }); + + console.info("-------------Stage model--> startNoTargetBundleListXTS Test end----------------") + }) +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/module.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/module.json new file mode 100644 index 000000000..93a744ea7 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/module.json @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/AbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "com.open.harmony.packagemag.hmservice.MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/element/string.json b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..490210a39 --- /dev/null +++ b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_desc", + "value": "description" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png b/ability/ability_runtime/freeinstalltest/startabilitystagetest/startabilitynotargetbundleliststagetest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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