deeke-script-app 1.6.4 → 1.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/@deekeScript/@type/Class/Global.d.ts +1 -1
  2. package/@deekeScript/@type/Class/Rect.d.ts +16 -16
  3. package/@deekeScript/@type/Class/UiSelector.d.ts +201 -201
  4. package/@deekeScript/@type/Class/WebSocket.d.ts +49 -49
  5. package/@deekeScript/@type/interface/Access.d.ts +71 -71
  6. package/@deekeScript/@type/interface/Device.d.ts +88 -88
  7. package/@deekeScript/@type/interface/Encrypt.d.ts +58 -58
  8. package/@deekeScript/@type/interface/Engines.d.ts +39 -39
  9. package/@deekeScript/@type/interface/FloatDialogs.d.ts +35 -35
  10. package/@deekeScript/@type/interface/ForegroundServiceBridge.d.ts +31 -31
  11. package/@deekeScript/@type/interface/Hid.d.ts +342 -342
  12. package/@deekeScript/@type/interface/Http.d.ts +41 -41
  13. package/@deekeScript/@type/interface/Images.d.ts +71 -71
  14. package/@deekeScript/@type/interface/Java.d.ts +7 -7
  15. package/@deekeScript/@type/interface/KeyBoards.d.ts +27 -27
  16. package/@deekeScript/@type/interface/Log.d.ts +16 -16
  17. package/@deekeScript/@type/interface/NotificationBridge.d.ts +28 -28
  18. package/@deekeScript/@type/interface/{SocketIOClient.d.ts → SocketIoClient.d.ts} +76 -76
  19. package/@deekeScript/@type/interface/System.d.ts +114 -114
  20. package/@deekeScript/@type/interface/UiObject.d.ts +197 -278
  21. package/README.md +67 -67
  22. package/deekeScript.json +669 -669
  23. package/deekeScriptZipBuild +48 -48
  24. package/gulpfile +17 -17
  25. package/init +32 -32
  26. package/jsconfig.json +11 -11
  27. package/package.json +42 -42
  28. package/script/9/common/util.js +19 -19
  29. package/script/9/dy/common/common.js +9 -9
  30. package/script/9/dy/common/version.js +3 -3
  31. package/script/9/dy/common/video.js +7 -7
  32. package/script/9/dy/task/taskOne.js +6 -6
  33. package/script/9/dy/version/310701.js +6 -6
  34. package/script/statistics/statistics.js +120 -120
  35. package/script/task/douyin_zan.js +37 -37
  36. package/script/task/dy.js +6 -6
  37. package/script/task/dyApp.js +6 -6
  38. package/script/task/tool.js +9 -9
  39. package/script/task.html +4 -4
  40. package/script/test/5.js +2 -2
  41. package/script/test/8.js +16 -16
  42. package/src/12/main.js +40 -40
  43. package/src/12/task.js +10 -10
  44. package/src/9/common/util.js +28 -28
  45. package/src/9/dy/common/common.js +12 -12
  46. package/src/9/dy/common/version.js +11 -11
  47. package/src/9/dy/common/video.js +14 -14
  48. package/src/9/dy/task/taskOne.js +13 -13
  49. package/src/9/dy/version/310701.js +7 -7
  50. package/src/statistics/statistics.js +120 -120
  51. package/src/task/douyin_zan.js +89 -89
  52. package/src/task/dy.js +14 -14
  53. package/src/task/dyApp.js +7 -7
  54. package/src/task/tool.js +19 -19
  55. package/src/task.html +4 -4
  56. package/src/test/2.js +2 -2
  57. package/src/test/5.js +4 -4
  58. package/src/test/8.js +36 -36
  59. package/test/2.0/engines/enginesSimple.js +72 -72
  60. package/test/2.js +6 -6
  61. package/test/Access.js +9 -9
  62. package/test/SocketIOClient.js +39 -39
  63. package/test/SocketIOServer.js +49 -49
  64. package/test/Storage.js +3 -3
  65. package/test/console.js +5 -5
  66. package/test/deekeScriptJson.js +5 -5
  67. package/test/device.js +11 -11
  68. package/test/encrypt.js +3 -3
  69. package/test/engines/1.js +4 -4
  70. package/test/engines/eng/1.js +8 -8
  71. package/test/engines/engines.js +6 -6
  72. package/test/engines/relative.dir.js +8 -8
  73. package/test/engines/relative.js +1 -1
  74. package/test/engines/test.js +6 -6
  75. package/test/engines.js +5 -5
  76. package/test/extension.js +27 -27
  77. package/test/files.js +7 -7
  78. package/test/foreground.js +23 -23
  79. package/test/http.js +19 -19
  80. package/test/images/findColor.js +15 -15
  81. package/test/java.js +28 -28
  82. package/test/log.js +10 -10
  83. package/test/module/module.js +4 -4
  84. package/test/notification.js +26 -26
  85. package/test/package.js +3 -3
  86. package/test/permise.js +29 -29
  87. package/test/thread.js +11 -11
  88. package/test/timer.close.js +27 -27
  89. package/test/timer.js +25 -25
  90. package/test/timer.stop.js +28 -28
  91. package/test/webSocket.js +22 -22
  92. package/uglify-config.json +15 -15
  93. package/images/test/statistics.png +0 -0
@@ -1,72 +1,72 @@
1
-
2
- function test() {
3
- let script = "let a = 12;console.log(a);System.sleep(3000);console.log(a);System.sleep(3000);console.log(a);";
4
- Engines.executeScriptStr(script);
5
- }
6
-
7
- // test();
8
-
9
- // console.log(1);
10
- // for(let i = 0;i<1000;i++){
11
- // //
12
- // }
13
- // System.sleep(5000);
14
- // console.log(2);
15
-
16
- function test1() {
17
- console.log("任务开始");
18
- setTimeout(() => {
19
- console.log("延时3秒执行完成");
20
- }, 3000);
21
-
22
- // @ts-ignore
23
- let i = 0;
24
- // @ts-ignore
25
- let timer = setInterval(() => {
26
- if (i >= 3) {
27
- clearInterval(timer);
28
- return;
29
- }
30
- console.log("每3秒执行一次:" + i++);
31
- }, 3000);
32
-
33
- console.log('任务结束');
34
- }
35
-
36
- // test1();
37
-
38
- function test2() {
39
- let script = "let a = 12;console.log(a);System.sleep(3000);setTimeout(()=>console.log(22), 3000);console.log(a);";
40
- Engines.executeScriptStr(script);
41
- setTimeout(() => {
42
- console.log("延时3秒执行完成");
43
- }, 3000);
44
- }
45
- // test2();
46
-
47
- let timerIndex;
48
- function test3() {
49
- let obj = {
50
- run: function () {
51
- console.log('线程');
52
- timerIndex = setInterval(() => {
53
- for (let i = 0; i <= 5; i++) {
54
- console.log('延时3秒执行完成');
55
- }
56
- }, 3000);
57
- }
58
- }
59
-
60
- let thread = new java.lang.Thread(new java.lang.Runnable(obj));
61
-
62
- thread.start();
63
- thread.join();
64
- console.log('主线程');
65
-
66
- // setTimeout(() => {
67
- // console.log("main-延时3秒执行完成", timerIndex);
68
- // clearInterval(timerIndex);
69
- // }, 12000);
70
- }
71
-
72
- test3();
1
+
2
+ function test() {
3
+ let script = "let a = 12;console.log(a);System.sleep(3000);console.log(a);System.sleep(3000);console.log(a);";
4
+ Engines.executeScriptStr(script);
5
+ }
6
+
7
+ // test();
8
+
9
+ // console.log(1);
10
+ // for(let i = 0;i<1000;i++){
11
+ // //
12
+ // }
13
+ // System.sleep(5000);
14
+ // console.log(2);
15
+
16
+ function test1() {
17
+ console.log("任务开始");
18
+ setTimeout(() => {
19
+ console.log("延时3秒执行完成");
20
+ }, 3000);
21
+
22
+ // @ts-ignore
23
+ let i = 0;
24
+ // @ts-ignore
25
+ let timer = setInterval(() => {
26
+ if (i >= 3) {
27
+ clearInterval(timer);
28
+ return;
29
+ }
30
+ console.log("每3秒执行一次:" + i++);
31
+ }, 3000);
32
+
33
+ console.log('任务结束');
34
+ }
35
+
36
+ // test1();
37
+
38
+ function test2() {
39
+ let script = "let a = 12;console.log(a);System.sleep(3000);setTimeout(()=>console.log(22), 3000);console.log(a);";
40
+ Engines.executeScriptStr(script);
41
+ setTimeout(() => {
42
+ console.log("延时3秒执行完成");
43
+ }, 3000);
44
+ }
45
+ // test2();
46
+
47
+ let timerIndex;
48
+ function test3() {
49
+ let obj = {
50
+ run: function () {
51
+ console.log('线程');
52
+ timerIndex = setInterval(() => {
53
+ for (let i = 0; i <= 5; i++) {
54
+ console.log('延时3秒执行完成');
55
+ }
56
+ }, 3000);
57
+ }
58
+ }
59
+
60
+ let thread = new java.lang.Thread(new java.lang.Runnable(obj));
61
+
62
+ thread.start();
63
+ thread.join();
64
+ console.log('主线程');
65
+
66
+ // setTimeout(() => {
67
+ // console.log("main-延时3秒执行完成", timerIndex);
68
+ // clearInterval(timerIndex);
69
+ // }, 12000);
70
+ }
71
+
72
+ test3();
package/test/2.js CHANGED
@@ -1,6 +1,6 @@
1
-
2
-
3
-
4
- let tag = UiSelector().text('QQ').findOne();
5
- console.log(tag);
6
- Gesture.click(tag.bounds().centerX(), tag.bounds().centerY());
1
+
2
+
3
+
4
+ let tag = UiSelector().text('QQ').findOne();
5
+ console.log(tag);
6
+ Gesture.click(tag.bounds().centerX(), tag.bounds().centerY());
package/test/Access.js CHANGED
@@ -1,10 +1,10 @@
1
-
2
- Access.isBackgroundAlertEnabled();
3
- Access.isAccessibilityServiceEnabled();
4
- Access.isFloatWindowsEnabled();
5
- Access.isMediaProjectionEnable();
6
-
7
- Access.openAccessibilityServiceSetting();
8
- Access.openFloatWindowsSetting();
9
- Access.openBackgroundAlertSetting();
1
+
2
+ Access.isBackgroundAlertEnabled();
3
+ Access.isAccessibilityServiceEnabled();
4
+ Access.isFloatWindowsEnabled();
5
+ Access.isMediaProjectionEnable();
6
+
7
+ Access.openAccessibilityServiceSetting();
8
+ Access.openFloatWindowsSetting();
9
+ Access.openBackgroundAlertSetting();
10
10
  Access.openMediaProjectionSetting();
@@ -1,39 +1,39 @@
1
- let socketIoClient = SocketIoClient.getInstance("http://192.168.0.111:3000");
2
-
3
- socketIoClient.on("connect_error", (error) => {
4
- console.error("连接错误:", error);
5
- });
6
-
7
- socketIoClient.on("error", (error) => {
8
- console.error("通用错误:", error);
9
- });
10
-
11
- socketIoClient.on("connect_timeout", () => {
12
- console.error("连接超时");
13
- });
14
-
15
-
16
- socketIoClient.on("connect", function () {
17
- console.log('是否连接成功:', socketIoClient.isConnected());
18
- socketIoClient.on("message", function (data) {
19
- console.log('服务端发来的消息:', data);
20
- });
21
-
22
- let str = JSON.stringify({
23
- name: "DeekeScript",
24
- age: 3,
25
- other: {
26
- sex: ["男"]
27
- }
28
- });
29
- socketIoClient.emit("message", str, function (data) {
30
- console.log('确认参数', data);
31
- });
32
- });
33
-
34
- socketIoClient.connect();
35
-
36
- while (true) {
37
- System.sleep(1000);
38
- console.log('防止脚本终止');
39
- }
1
+ let socketIoClient = SocketIoClient.getInstance("http://192.168.0.111:3000");
2
+
3
+ socketIoClient.on("connect_error", (error) => {
4
+ console.error("连接错误:", error);
5
+ });
6
+
7
+ socketIoClient.on("error", (error) => {
8
+ console.error("通用错误:", error);
9
+ });
10
+
11
+ socketIoClient.on("connect_timeout", () => {
12
+ console.error("连接超时");
13
+ });
14
+
15
+
16
+ socketIoClient.on("connect", function () {
17
+ console.log('是否连接成功:', socketIoClient.isConnected());
18
+ socketIoClient.on("message", function (data) {
19
+ console.log('服务端发来的消息:', data);
20
+ });
21
+
22
+ let str = JSON.stringify({
23
+ name: "DeekeScript",
24
+ age: 3,
25
+ other: {
26
+ sex: ["男"]
27
+ }
28
+ });
29
+ socketIoClient.emit("message", str, function (data) {
30
+ console.log('确认参数', data);
31
+ });
32
+ });
33
+
34
+ socketIoClient.connect();
35
+
36
+ while (true) {
37
+ System.sleep(1000);
38
+ console.log('防止脚本终止');
39
+ }
@@ -1,49 +1,49 @@
1
- const { Server } = require("socket.io");
2
- const readline = require("readline");
3
-
4
- const io = new Server("3000", {
5
- cors: {
6
- origin: "*",
7
- },
8
- });
9
-
10
- io.on("connection", (socket) => {
11
- console.log(`客户端已连接: ${socket.id}`);
12
-
13
- socket.on("message", (data) => {
14
- console.log("收到客户端消息:", data);
15
- console.log(data.name);
16
- socket.emit("message", data);
17
- });
18
-
19
- socket.on("disconnect", () => {
20
- console.log(`客户端断开连接: ${socket.id}`);
21
- });
22
- });
23
-
24
- console.log("Socket.IO 服务启动,监听端口 3000");
25
-
26
- // 创建命令行接口,监听输入
27
- const rl = readline.createInterface({
28
- input: process.stdin,
29
- output: process.stdout,
30
- prompt: '请输入服务器消息> '
31
- });
32
-
33
- rl.prompt();
34
-
35
- rl.on('line', (line) => {
36
- const msg = line.trim();
37
- if(msg.length > 0) {
38
- // 给所有客户端广播 message 事件
39
- io.emit('message', msg);
40
- if(msg === '333'){
41
- io.emit('getAccountInfo', msg);
42
- }
43
- console.log(`已广播消息: ${msg}`);
44
- }
45
- rl.prompt();
46
- }).on('close', () => {
47
- console.log('服务器输入关闭,退出程序');
48
- process.exit(0);
49
- });
1
+ const { Server } = require("socket.io");
2
+ const readline = require("readline");
3
+
4
+ const io = new Server("3000", {
5
+ cors: {
6
+ origin: "*",
7
+ },
8
+ });
9
+
10
+ io.on("connection", (socket) => {
11
+ console.log(`客户端已连接: ${socket.id}`);
12
+
13
+ socket.on("message", (data) => {
14
+ console.log("收到客户端消息:", data);
15
+ console.log(data.name);
16
+ socket.emit("message", data);
17
+ });
18
+
19
+ socket.on("disconnect", () => {
20
+ console.log(`客户端断开连接: ${socket.id}`);
21
+ });
22
+ });
23
+
24
+ console.log("Socket.IO 服务启动,监听端口 3000");
25
+
26
+ // 创建命令行接口,监听输入
27
+ const rl = readline.createInterface({
28
+ input: process.stdin,
29
+ output: process.stdout,
30
+ prompt: '请输入服务器消息> '
31
+ });
32
+
33
+ rl.prompt();
34
+
35
+ rl.on('line', (line) => {
36
+ const msg = line.trim();
37
+ if(msg.length > 0) {
38
+ // 给所有客户端广播 message 事件
39
+ io.emit('message', msg);
40
+ if(msg === '333'){
41
+ io.emit('getAccountInfo', msg);
42
+ }
43
+ console.log(`已广播消息: ${msg}`);
44
+ }
45
+ rl.prompt();
46
+ }).on('close', () => {
47
+ console.log('服务器输入关闭,退出程序');
48
+ process.exit(0);
49
+ });
package/test/Storage.js CHANGED
@@ -1,3 +1,3 @@
1
-
2
- Storage.create('a').clear();
3
-
1
+
2
+ Storage.create('a').clear();
3
+
package/test/console.js CHANGED
@@ -1,5 +1,5 @@
1
- console.log(2);
2
- console.error(3);
3
- console.debug(4);
4
- console.info(5);
5
- console.warn(6);
1
+ console.log(2);
2
+ console.error(3);
3
+ console.debug(4);
4
+ console.info(5);
5
+ console.warn(6);
@@ -1,5 +1,5 @@
1
- DeekeScriptJson.setDeekeScriptJsonGroup("");
2
-
3
- DeekeScriptJson.setSettingLists("str");
4
-
5
- DeekeScriptJson.toJson();
1
+ DeekeScriptJson.setDeekeScriptJsonGroup("");
2
+
3
+ DeekeScriptJson.setSettingLists("str");
4
+
5
+ DeekeScriptJson.toJson();
package/test/device.js CHANGED
@@ -1,11 +1,11 @@
1
- console.log(Device.getUuid());
2
-
3
- console.log(Device.createUuid());
4
-
5
- console.log(Device.getUuid());
6
-
7
-
8
- console.log(Storage.get("uuid"));
9
-
10
- Device.getToken();
11
- Device.getAttr('token');
1
+ console.log(Device.getUuid());
2
+
3
+ console.log(Device.createUuid());
4
+
5
+ console.log(Device.getUuid());
6
+
7
+
8
+ console.log(Storage.get("uuid"));
9
+
10
+ Device.getToken();
11
+ Device.getAttr('token');
package/test/encrypt.js CHANGED
@@ -1,4 +1,4 @@
1
- console.log(Encrypt.md5('DeekeScript'));//输出:82e431569749c90ab31cfac2a9a3c4c3
2
- console.log(Encrypt.base64Encode('DeekeScript'));//输出:82e431569749c90ab31cfac2a9a3c4c3
3
-
1
+ console.log(Encrypt.md5('DeekeScript'));//输出:82e431569749c90ab31cfac2a9a3c4c3
2
+ console.log(Encrypt.base64Encode('DeekeScript'));//输出:82e431569749c90ab31cfac2a9a3c4c3
3
+
4
4
  console.log(Encrypt.base64Decode('RGVla2VTY3JpcHQ='));
package/test/engines/1.js CHANGED
@@ -1,4 +1,4 @@
1
-
2
-
3
- console.log('顺利执行');
4
-
1
+
2
+
3
+ console.log('顺利执行');
4
+
@@ -1,8 +1,8 @@
1
-
2
- let a = {
3
- exec(){
4
- Engines.executeScript("../1.js");
5
- }
6
- }
7
-
8
- module.exports = a;
1
+
2
+ let a = {
3
+ exec(){
4
+ Engines.executeScript("../1.js");
5
+ }
6
+ }
7
+
8
+ module.exports = a;
@@ -1,6 +1,6 @@
1
-
2
- console.log('主线程开始');
3
-
4
- Engines.executeScript("test/engines/test.js");
5
- console.log('主线程结束');
6
-
1
+
2
+ console.log('主线程开始');
3
+
4
+ Engines.executeScript("test/engines/test.js");
5
+ console.log('主线程结束');
6
+
@@ -1,8 +1,8 @@
1
-
2
-
3
- console.log('开始');
4
-
5
- Engines.executeScript('./relative.js');
6
- Engines.executeScript('../engines/eng/1.js');
7
-
8
- System.sleep(3000);
1
+
2
+
3
+ console.log('开始');
4
+
5
+ Engines.executeScript('./relative.js');
6
+ Engines.executeScript('../engines/eng/1.js');
7
+
8
+ System.sleep(3000);
@@ -1 +1 @@
1
- console.log('relative.js');
1
+ console.log('relative.js');
@@ -1,6 +1,6 @@
1
-
2
- console.log('子线程开始1');
3
- let c = require('./eng/1.js');
4
-
5
- c.exec();
6
-
1
+
2
+ console.log('子线程开始1');
3
+ let c = require('./eng/1.js');
4
+
5
+ c.exec();
6
+
package/test/engines.js CHANGED
@@ -1,5 +1,5 @@
1
- Engines.executeScriptStr("console.log('My first DeekeScript');");
2
-
3
- Engines.executeScriptStr("console.log('My first DeekeScript');");
4
-
5
- Engines.closeAll();
1
+ Engines.executeScriptStr("console.log('My first DeekeScript');");
2
+
3
+ Engines.executeScriptStr("console.log('My first DeekeScript');");
4
+
5
+ Engines.closeAll();
package/test/extension.js CHANGED
@@ -1,27 +1,27 @@
1
- let javaString = new java.lang.String('Java');
2
- console.log(javaString);//输出:"Java"
3
- console.log(java.lang.Math.PI);//输出:"3.141592653589793"
4
- console.log(new java.util.Date());//输出:"Tue Jan 14 10:52:55 CST 2025"
5
-
6
- let f = new java.io.File("test.txt");
7
- console.log(f.exists());// false
8
-
9
-
10
- let Files = java.nio.file.Files;
11
- let path = java.nio.file.Paths.get('example.txt');
12
- console.log(Files.exists(path));//输出:false
13
-
14
-
15
- let obj = {
16
- run: function () {
17
- console.log('线程');
18
- }
19
- }
20
-
21
- //注意java.lang.Thread和java.lang.Runnable外层不需要引号
22
- let javaImporterTest = JavaImporter(java.lang.Thread, java.lang.Runnable);
23
-
24
- //@ts-ignore
25
- with (javaImporterTest) {
26
- new Thread(new Runnable(obj)).start();
27
- }
1
+ let javaString = new java.lang.String('Java');
2
+ console.log(javaString);//输出:"Java"
3
+ console.log(java.lang.Math.PI);//输出:"3.141592653589793"
4
+ console.log(new java.util.Date());//输出:"Tue Jan 14 10:52:55 CST 2025"
5
+
6
+ let f = new java.io.File("test.txt");
7
+ console.log(f.exists());// false
8
+
9
+
10
+ let Files = java.nio.file.Files;
11
+ let path = java.nio.file.Paths.get('example.txt');
12
+ console.log(Files.exists(path));//输出:false
13
+
14
+
15
+ let obj = {
16
+ run: function () {
17
+ console.log('线程');
18
+ }
19
+ }
20
+
21
+ //注意java.lang.Thread和java.lang.Runnable外层不需要引号
22
+ let javaImporterTest = JavaImporter(java.lang.Thread, java.lang.Runnable);
23
+
24
+ //@ts-ignore
25
+ with (javaImporterTest) {
26
+ new Thread(new Runnable(obj)).start();
27
+ }
package/test/files.js CHANGED
@@ -1,7 +1,7 @@
1
- let Files = java.nio.file.Files;
2
- let Paths = java.nio.file.Paths;
3
- // console.log(Files.exists(Paths.get("/sdcard/文件夹/2.txt"))); //返回false
4
-
5
- for(let i in Files){
6
- console.log(i);
7
- }
1
+ let Files = java.nio.file.Files;
2
+ let Paths = java.nio.file.Paths;
3
+ // console.log(Files.exists(Paths.get("/sdcard/文件夹/2.txt"))); //返回false
4
+
5
+ for(let i in Files){
6
+ console.log(i);
7
+ }
@@ -1,23 +1,23 @@
1
-
2
- let close = false;
3
- ForegroundServiceBridge.setContent('测试', '前台服务');
4
- ForegroundServiceBridge.register(()=>{
5
- console.log('前台服务启动成功');
6
- let m = setInterval(() => {
7
- console.log('正在执行任务...');
8
- if(close){
9
- clearInterval(m);
10
- }
11
- }, 3000);
12
- });
13
-
14
- ForegroundServiceBridge.startService();
15
-
16
- let i = 0;
17
- setInterval(() => {
18
- console.log('正在监听中...');
19
- if(i++ >= 1){
20
- ForegroundServiceBridge.stopService();
21
- close = true;
22
- }
23
- }, 10000);
1
+
2
+ let close = false;
3
+ ForegroundServiceBridge.setContent('测试', '前台服务');
4
+ ForegroundServiceBridge.register(()=>{
5
+ console.log('前台服务启动成功');
6
+ let m = setInterval(() => {
7
+ console.log('正在执行任务...');
8
+ if(close){
9
+ clearInterval(m);
10
+ }
11
+ }, 3000);
12
+ });
13
+
14
+ ForegroundServiceBridge.startService();
15
+
16
+ let i = 0;
17
+ setInterval(() => {
18
+ console.log('正在监听中...');
19
+ if(i++ >= 1){
20
+ ForegroundServiceBridge.stopService();
21
+ close = true;
22
+ }
23
+ }, 10000);