@whitesev/utils 2.7.8 → 2.8.1
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.
- package/README.md +176 -176
- package/dist/index.amd.js +896 -877
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +896 -877
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +896 -877
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +896 -877
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +896 -877
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +896 -877
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/CommonUtil.d.ts +59 -59
- package/dist/types/src/DOMUtils.d.ts +1 -1
- package/dist/types/src/Dictionary.d.ts +1 -1
- package/dist/types/src/Httpx.d.ts +2 -2
- package/dist/types/src/Progress.d.ts +0 -4
- package/dist/types/src/TryCatch.d.ts +2 -2
- package/dist/types/src/Utils.d.ts +365 -365
- package/dist/types/src/UtilsGMCookie.d.ts +2 -2
- package/dist/types/src/UtilsGMMenu.d.ts +1 -1
- package/dist/types/src/indexedDB.d.ts +3 -3
- package/dist/types/src/types/Event.d.ts +188 -188
- package/dist/types/src/types/Httpx.d.ts +1344 -1343
- package/dist/types/src/types/Log.d.ts +19 -19
- package/dist/types/src/types/Progress.d.ts +20 -20
- package/dist/types/src/types/React.d.ts +119 -119
- package/dist/types/src/types/TryCatch.d.ts +9 -9
- package/dist/types/src/types/UtilsGMCookie.d.ts +93 -93
- package/dist/types/src/types/UtilsGMMenu.d.ts +77 -77
- package/dist/types/src/types/Vue2.d.ts +166 -166
- package/dist/types/src/types/WindowApi.d.ts +14 -14
- package/dist/types/src/types/ajaxHooker.d.ts +151 -151
- package/dist/types/src/types/env.d.ts +7 -2
- package/dist/types/src/types/global.d.ts +31 -31
- package/package.json +16 -7
- package/src/ColorConversion.ts +105 -106
- package/src/CommonUtil.ts +280 -279
- package/src/DOMUtils.ts +251 -272
- package/src/Dictionary.ts +153 -154
- package/src/GBKEncoder.ts +108 -112
- package/src/Hooks.ts +73 -81
- package/src/Httpx.ts +1457 -1466
- package/src/LockFunction.ts +62 -62
- package/src/Log.ts +258 -259
- package/src/ModuleRaid.js +1 -0
- package/src/Progress.ts +108 -114
- package/src/TryCatch.ts +86 -86
- package/src/Utils.ts +4772 -4825
- package/src/UtilsCommon.ts +14 -14
- package/src/UtilsGMCookie.ts +254 -261
- package/src/UtilsGMMenu.ts +445 -454
- package/src/Vue.ts +233 -229
- package/src/WindowApi.ts +59 -59
- package/src/ajaxHooker/ajaxHooker.js +1 -0
- package/src/indexedDB.ts +497 -502
- package/src/types/Event.d.ts +188 -188
- package/src/types/Httpx.d.ts +1344 -1343
- package/src/types/Log.d.ts +19 -19
- package/src/types/Progress.d.ts +20 -20
- package/src/types/React.d.ts +119 -119
- package/src/types/TryCatch.d.ts +9 -9
- package/src/types/UtilsGMCookie.d.ts +93 -93
- package/src/types/UtilsGMMenu.d.ts +77 -77
- package/src/types/Vue2.d.ts +166 -166
- package/src/types/WindowApi.d.ts +14 -14
- package/src/types/ajaxHooker.d.ts +151 -151
- package/src/types/env.d.ts +7 -2
- package/src/types/global.d.ts +31 -31
package/dist/index.amd.js
CHANGED
|
@@ -9,7 +9,7 @@ define((function () { 'use strict';
|
|
|
9
9
|
if (typeof str !== "string") {
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
|
-
if (!str.match(/^(
|
|
12
|
+
if (!str.match(/^(#|)[0-9a-fA-F]{6}$/)) {
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
15
|
return true;
|
|
@@ -23,18 +23,10 @@ define((function () { 'use strict';
|
|
|
23
23
|
*/
|
|
24
24
|
hexToRgba(hex, opacity) {
|
|
25
25
|
if (!this.isHex(hex)) {
|
|
26
|
-
throw new TypeError(
|
|
26
|
+
throw new TypeError(`输入错误的hex:${hex}`);
|
|
27
27
|
}
|
|
28
28
|
return hex && hex.replace(/\s+/g, "").length === 7
|
|
29
|
-
?
|
|
30
|
-
parseInt("0x" + hex.slice(1, 3)) +
|
|
31
|
-
"," +
|
|
32
|
-
parseInt("0x" + hex.slice(3, 5)) +
|
|
33
|
-
"," +
|
|
34
|
-
parseInt("0x" + hex.slice(5, 7)) +
|
|
35
|
-
"," +
|
|
36
|
-
opacity +
|
|
37
|
-
")"
|
|
29
|
+
? `rgba(${parseInt(`0x${hex.slice(1, 3)}`)},${parseInt(`0x${hex.slice(3, 5)}`)},${parseInt(`0x${hex.slice(5, 7)}`)},${opacity})`
|
|
38
30
|
: "";
|
|
39
31
|
}
|
|
40
32
|
/**
|
|
@@ -43,14 +35,15 @@ define((function () { 'use strict';
|
|
|
43
35
|
*/
|
|
44
36
|
hexToRgb(str) {
|
|
45
37
|
if (!this.isHex(str)) {
|
|
46
|
-
throw new TypeError(
|
|
38
|
+
throw new TypeError(`输入错误的hex:${str}`);
|
|
47
39
|
}
|
|
48
40
|
/* replace替换查找的到的字符串 */
|
|
49
41
|
str = str.replace("#", "");
|
|
50
42
|
/* match得到查询数组 */
|
|
51
|
-
|
|
43
|
+
const hxs = str.match(/../g);
|
|
52
44
|
for (let index = 0; index < 3; index++) {
|
|
53
|
-
|
|
45
|
+
const value = parseInt(hxs[index], 16);
|
|
46
|
+
Reflect.set(hxs, index, value);
|
|
54
47
|
}
|
|
55
48
|
return hxs;
|
|
56
49
|
}
|
|
@@ -62,16 +55,16 @@ define((function () { 'use strict';
|
|
|
62
55
|
*/
|
|
63
56
|
rgbToHex(redValue, greenValue, blueValue) {
|
|
64
57
|
/* 验证输入的rgb值是否合法 */
|
|
65
|
-
|
|
58
|
+
const validPattern = /^\d{1,3}$/;
|
|
66
59
|
if (!validPattern.test(redValue.toString()) ||
|
|
67
60
|
!validPattern.test(greenValue.toString()) ||
|
|
68
61
|
!validPattern.test(blueValue.toString()))
|
|
69
62
|
throw new TypeError("输入错误的rgb颜色值");
|
|
70
|
-
|
|
63
|
+
const hexs = [redValue.toString(16), greenValue.toString(16), blueValue.toString(16)];
|
|
71
64
|
for (let index = 0; index < 3; index++)
|
|
72
65
|
if (hexs[index].length == 1)
|
|
73
|
-
hexs[index] =
|
|
74
|
-
return
|
|
66
|
+
hexs[index] = `0${hexs[index]}`;
|
|
67
|
+
return `#${hexs.join("")}`;
|
|
75
68
|
}
|
|
76
69
|
/**
|
|
77
70
|
* 获取颜色变暗或亮
|
|
@@ -80,11 +73,13 @@ define((function () { 'use strict';
|
|
|
80
73
|
*/
|
|
81
74
|
getDarkColor(color, level) {
|
|
82
75
|
if (!this.isHex(color)) {
|
|
83
|
-
throw new TypeError(
|
|
76
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
84
77
|
}
|
|
85
|
-
|
|
78
|
+
const rgbc = this.hexToRgb(color);
|
|
86
79
|
for (let index = 0; index < 3; index++) {
|
|
87
|
-
|
|
80
|
+
const rgbcItemValue = rgbc[index];
|
|
81
|
+
const value = Math.floor(Number(rgbcItemValue) * (1 - Number(level)));
|
|
82
|
+
Reflect.set(rgbc, index, value);
|
|
88
83
|
}
|
|
89
84
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
90
85
|
}
|
|
@@ -95,40 +90,43 @@ define((function () { 'use strict';
|
|
|
95
90
|
*/
|
|
96
91
|
getLightColor(color, level) {
|
|
97
92
|
if (!this.isHex(color)) {
|
|
98
|
-
throw new TypeError(
|
|
93
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
99
94
|
}
|
|
100
|
-
|
|
95
|
+
const rgbc = this.hexToRgb(color);
|
|
101
96
|
for (let index = 0; index < 3; index++) {
|
|
102
|
-
|
|
97
|
+
const rgbcItemValue = Number(rgbc[index]);
|
|
98
|
+
const value = Math.floor(255 - rgbcItemValue * level + rgbcItemValue);
|
|
99
|
+
Reflect.set(rgbc, index, value);
|
|
103
100
|
}
|
|
104
101
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
|
|
108
105
|
class GBKEncoder {
|
|
109
|
-
#data
|
|
106
|
+
#data;
|
|
110
107
|
#U2Ghash = {};
|
|
111
108
|
#G2Uhash = {};
|
|
112
109
|
constructor() {
|
|
113
|
-
let dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
|
|
110
|
+
const dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
|
|
114
111
|
let index = 0;
|
|
115
112
|
this.#data = dataText.match(/..../g);
|
|
116
113
|
for (let i = 0x81; i <= 0xfe; i++) {
|
|
117
114
|
for (let j = 0x40; j <= 0xfe; j++) {
|
|
118
|
-
this.#U2Ghash[this.#data[index++]] =
|
|
115
|
+
this.#U2Ghash[this.#data[index++]] = `%${i.toString(16)}%${j.toString(16)}`.toUpperCase();
|
|
119
116
|
}
|
|
120
117
|
}
|
|
121
|
-
for (
|
|
122
|
-
this.#
|
|
118
|
+
for (const key in this.#U2Ghash) {
|
|
119
|
+
const u2ghashValue = Reflect.get(this.#U2Ghash, key);
|
|
120
|
+
Reflect.set(this.#G2Uhash, u2ghashValue, key);
|
|
123
121
|
}
|
|
124
122
|
}
|
|
125
123
|
handleText(text) {
|
|
126
124
|
text = text
|
|
127
|
-
.replace(/#(\d+)\$/g, function (
|
|
125
|
+
.replace(/#(\d+)\$/g, function (_, b) {
|
|
128
126
|
return Array(+b + 3).join("#");
|
|
129
127
|
})
|
|
130
128
|
.replace(/#/g, "####")
|
|
131
|
-
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (
|
|
129
|
+
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (_, hd, dt) {
|
|
132
130
|
return dt.replace(/../g, function (a) {
|
|
133
131
|
if (a != "##") {
|
|
134
132
|
return hd + a;
|
|
@@ -148,8 +146,8 @@ define((function () { 'use strict';
|
|
|
148
146
|
* @param str
|
|
149
147
|
*/
|
|
150
148
|
encode(str) {
|
|
151
|
-
|
|
152
|
-
return [...str].reduce((result, val
|
|
149
|
+
const that = this;
|
|
150
|
+
return [...str].reduce((result, val) => {
|
|
153
151
|
return result + toGBK(val);
|
|
154
152
|
}, "");
|
|
155
153
|
function toGBK(val) {
|
|
@@ -158,7 +156,7 @@ define((function () { 'use strict';
|
|
|
158
156
|
const codePoint = val.codePointAt(i);
|
|
159
157
|
const code = String.fromCodePoint(codePoint);
|
|
160
158
|
let key = codePoint.toString(16);
|
|
161
|
-
key.length != 4 && (key =
|
|
159
|
+
key.length != 4 && (key = `000${key}`.match(/....$/)?.[0]);
|
|
162
160
|
/* Add up i by code.length */
|
|
163
161
|
i += code.length - 1;
|
|
164
162
|
/* If code is in ascii range */
|
|
@@ -172,9 +170,9 @@ define((function () { 'use strict';
|
|
|
172
170
|
continue;
|
|
173
171
|
}
|
|
174
172
|
/*
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
173
|
+
If 2 or more char combines to one visible code,
|
|
174
|
+
or just this code is not in GBK
|
|
175
|
+
*/
|
|
178
176
|
result += toGBK(`&#${codePoint};`);
|
|
179
177
|
}
|
|
180
178
|
return result;
|
|
@@ -185,18 +183,18 @@ define((function () { 'use strict';
|
|
|
185
183
|
* @param str
|
|
186
184
|
*/
|
|
187
185
|
decode(str) {
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
const GBKMatcher = /%[0-9A-F]{2}%[0-9A-F]{2}/;
|
|
187
|
+
const UTFMatcher = /%[0-9A-F]{2}/;
|
|
190
188
|
// let gbk = true;
|
|
191
189
|
let utf = true;
|
|
192
190
|
const that = this;
|
|
193
191
|
while (utf) {
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
const gbkMatch = str.match(GBKMatcher);
|
|
193
|
+
const utfMatch = str.match(UTFMatcher);
|
|
196
194
|
// gbk = Boolean(gbkMatch);
|
|
197
195
|
utf = Boolean(utfMatch);
|
|
198
196
|
if (gbkMatch && gbkMatch in that.#G2Uhash) {
|
|
199
|
-
str = str.replace(gbkMatch, String.fromCharCode(
|
|
197
|
+
str = str.replace(gbkMatch, String.fromCharCode(`0x${that.#G2Uhash[gbkMatch]}`));
|
|
200
198
|
}
|
|
201
199
|
else {
|
|
202
200
|
str = str.replace(utfMatch, decodeURIComponent(utfMatch));
|
|
@@ -210,7 +208,7 @@ define((function () { 'use strict';
|
|
|
210
208
|
/* 定义变量和函数 */
|
|
211
209
|
let callbackFunction = null;
|
|
212
210
|
let context = null;
|
|
213
|
-
let handleError = (
|
|
211
|
+
let handleError = () => { };
|
|
214
212
|
let defaultDetails = {
|
|
215
213
|
log: true,
|
|
216
214
|
};
|
|
@@ -242,7 +240,7 @@ define((function () { 'use strict';
|
|
|
242
240
|
run(callback, __context__) {
|
|
243
241
|
callbackFunction = callback;
|
|
244
242
|
context = __context__ || this;
|
|
245
|
-
|
|
243
|
+
const result = executeTryCatch(callbackFunction, handleError, context);
|
|
246
244
|
return result !== void 0 ? result : TryCatchCore;
|
|
247
245
|
},
|
|
248
246
|
};
|
|
@@ -266,8 +264,8 @@ define((function () { 'use strict';
|
|
|
266
264
|
catch (error) {
|
|
267
265
|
if (defaultDetails.log) {
|
|
268
266
|
callback = callback;
|
|
269
|
-
console.log(`%c ${callback?.name ? callback?.name : callback
|
|
270
|
-
console.log(`%c
|
|
267
|
+
console.log(`%c ${callback?.name ? callback?.name : `${callback}`} `, "color: #f20000");
|
|
268
|
+
console.log(`%c ${error}`, "color: #f20000");
|
|
271
269
|
console.trace(callback);
|
|
272
270
|
}
|
|
273
271
|
if (handleErrorFunc) {
|
|
@@ -286,9 +284,9 @@ define((function () { 'use strict';
|
|
|
286
284
|
|
|
287
285
|
class CommonUtil {
|
|
288
286
|
assign(target = {}, source = {}, isAdd = false) {
|
|
289
|
-
|
|
287
|
+
const UtilsContext = this;
|
|
290
288
|
if (Array.isArray(source)) {
|
|
291
|
-
|
|
289
|
+
const canTraverse = source.filter((item) => {
|
|
292
290
|
return typeof item === "object";
|
|
293
291
|
});
|
|
294
292
|
if (!canTraverse.length) {
|
|
@@ -304,34 +302,34 @@ define((function () { 'use strict';
|
|
|
304
302
|
if (isAdd) {
|
|
305
303
|
for (const sourceKeyName in source) {
|
|
306
304
|
const targetKeyName = sourceKeyName;
|
|
307
|
-
|
|
308
|
-
|
|
305
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
306
|
+
const sourceValue = Reflect.get(source, sourceKeyName);
|
|
309
307
|
if (typeof sourceValue === "object" &&
|
|
310
308
|
sourceValue != null &&
|
|
311
309
|
sourceKeyName in target &&
|
|
312
310
|
!UtilsContext.isDOM(sourceValue)) {
|
|
313
311
|
/* 源端的值是object类型,且不是元素节点 */
|
|
314
|
-
target
|
|
312
|
+
Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
315
313
|
continue;
|
|
316
314
|
}
|
|
317
|
-
target
|
|
315
|
+
Reflect.set(target, sourceKeyName, sourceValue);
|
|
318
316
|
}
|
|
319
317
|
}
|
|
320
318
|
else {
|
|
321
319
|
for (const targetKeyName in target) {
|
|
322
320
|
if (targetKeyName in source) {
|
|
323
|
-
|
|
324
|
-
|
|
321
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
322
|
+
const sourceValue = Reflect.get(source, targetKeyName);
|
|
325
323
|
if (typeof sourceValue === "object" &&
|
|
326
324
|
sourceValue != null &&
|
|
327
325
|
!UtilsContext.isDOM(sourceValue) &&
|
|
328
326
|
Object.keys(sourceValue).length) {
|
|
329
327
|
/* 源端的值是object类型,且不是元素节点 */
|
|
330
|
-
target
|
|
328
|
+
Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
331
329
|
continue;
|
|
332
330
|
}
|
|
333
331
|
/* 直接赋值 */
|
|
334
|
-
target
|
|
332
|
+
Reflect.set(target, targetKeyName, sourceValue);
|
|
335
333
|
}
|
|
336
334
|
}
|
|
337
335
|
}
|
|
@@ -339,7 +337,7 @@ define((function () { 'use strict';
|
|
|
339
337
|
}
|
|
340
338
|
isNull(...args) {
|
|
341
339
|
let result = true;
|
|
342
|
-
|
|
340
|
+
const checkList = [...args];
|
|
343
341
|
for (const objItem of checkList) {
|
|
344
342
|
let itemResult = false;
|
|
345
343
|
if (objItem === null || objItem === undefined) {
|
|
@@ -365,11 +363,12 @@ define((function () { 'use strict';
|
|
|
365
363
|
case "boolean":
|
|
366
364
|
itemResult = !objItem;
|
|
367
365
|
break;
|
|
368
|
-
case "function":
|
|
369
|
-
|
|
366
|
+
case "function": {
|
|
367
|
+
const funcStr = objItem.toString().replace(/\s/g, "");
|
|
370
368
|
/* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
|
|
371
369
|
itemResult = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
|
|
372
370
|
break;
|
|
371
|
+
}
|
|
373
372
|
}
|
|
374
373
|
}
|
|
375
374
|
result = result && itemResult;
|
|
@@ -390,18 +389,23 @@ define((function () { 'use strict';
|
|
|
390
389
|
return target instanceof Node;
|
|
391
390
|
}
|
|
392
391
|
isNotNull(...args) {
|
|
393
|
-
|
|
392
|
+
const UtilsContext = this;
|
|
394
393
|
return !UtilsContext.isNull.apply(this, args);
|
|
395
394
|
}
|
|
396
395
|
deepClone(obj) {
|
|
397
|
-
|
|
396
|
+
const UtilsContext = this;
|
|
398
397
|
if (obj === void 0)
|
|
399
398
|
return void 0;
|
|
400
399
|
if (obj === null)
|
|
401
400
|
return null;
|
|
402
|
-
|
|
401
|
+
const clone = obj instanceof Array ? [] : {};
|
|
403
402
|
for (const [key, value] of Object.entries(obj)) {
|
|
404
|
-
|
|
403
|
+
if (typeof value === "object") {
|
|
404
|
+
Reflect.set(clone, key, UtilsContext.deepClone(value));
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
Reflect.set(clone, key, value);
|
|
408
|
+
}
|
|
405
409
|
}
|
|
406
410
|
return clone;
|
|
407
411
|
}
|
|
@@ -428,11 +432,11 @@ define((function () { 'use strict';
|
|
|
428
432
|
}
|
|
429
433
|
TryCatch()
|
|
430
434
|
.config({ log: false })
|
|
431
|
-
.error((
|
|
435
|
+
.error(() => {
|
|
432
436
|
TryCatch()
|
|
433
437
|
.error(() => {
|
|
434
438
|
try {
|
|
435
|
-
result = new Function(
|
|
439
|
+
result = new Function(`return ${data}`)();
|
|
436
440
|
}
|
|
437
441
|
catch (error2) {
|
|
438
442
|
if (typeof errorCallBack === "function") {
|
|
@@ -443,14 +447,14 @@ define((function () { 'use strict';
|
|
|
443
447
|
.run(() => {
|
|
444
448
|
if (data &&
|
|
445
449
|
/^[\],:{}\s]*$/.test(data
|
|
446
|
-
.replace(/\\(?:["
|
|
447
|
-
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][
|
|
450
|
+
.replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
|
|
451
|
+
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
|
|
448
452
|
.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
|
|
449
|
-
result = new Function(
|
|
453
|
+
result = new Function(`return ${data}`)();
|
|
450
454
|
}
|
|
451
455
|
else {
|
|
452
456
|
if (typeof errorCallBack === "function") {
|
|
453
|
-
errorCallBack(new Error("target is not
|
|
457
|
+
errorCallBack(new Error("target is not JSON object"));
|
|
454
458
|
}
|
|
455
459
|
}
|
|
456
460
|
});
|
|
@@ -462,7 +466,7 @@ define((function () { 'use strict';
|
|
|
462
466
|
return result;
|
|
463
467
|
}
|
|
464
468
|
}
|
|
465
|
-
|
|
469
|
+
const commonUtil = new CommonUtil();
|
|
466
470
|
|
|
467
471
|
class UtilsGMCookie {
|
|
468
472
|
windowApi = {
|
|
@@ -491,14 +495,14 @@ define((function () { 'use strict';
|
|
|
491
495
|
if (typeof cookieName !== "string") {
|
|
492
496
|
throw new TypeError("Utils.GMCookie.get 参数cookieName 必须为字符串");
|
|
493
497
|
}
|
|
494
|
-
|
|
498
|
+
const cookies = this.getCookiesList();
|
|
495
499
|
let findValue = void 0;
|
|
496
500
|
for (const cookieItem of cookies) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
501
|
+
const item = cookieItem.trim();
|
|
502
|
+
const itemSplit = item.split("=");
|
|
503
|
+
const itemName = itemSplit[0];
|
|
500
504
|
itemSplit.splice(0, 1);
|
|
501
|
-
|
|
505
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
502
506
|
if (itemName === cookieName) {
|
|
503
507
|
findValue = {
|
|
504
508
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -528,7 +532,7 @@ define((function () { 'use strict';
|
|
|
528
532
|
if (option == null) {
|
|
529
533
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
530
534
|
}
|
|
531
|
-
|
|
535
|
+
const resultData = [];
|
|
532
536
|
try {
|
|
533
537
|
let defaultOption = {
|
|
534
538
|
url: this.windowApi.window.location.href,
|
|
@@ -537,16 +541,16 @@ define((function () { 'use strict';
|
|
|
537
541
|
path: "/",
|
|
538
542
|
};
|
|
539
543
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
540
|
-
|
|
544
|
+
const cookies = this.getCookiesList();
|
|
541
545
|
cookies.forEach((item) => {
|
|
542
546
|
item = item.trim();
|
|
543
|
-
|
|
544
|
-
|
|
547
|
+
const itemSplit = item.split("=");
|
|
548
|
+
const itemName = itemSplit[0];
|
|
545
549
|
itemSplit.splice(0, 1);
|
|
546
|
-
|
|
547
|
-
|
|
550
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
551
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
548
552
|
? defaultOption.name
|
|
549
|
-
: new RegExp(
|
|
553
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
550
554
|
if (itemName.match(nameRegexp)) {
|
|
551
555
|
resultData.push({
|
|
552
556
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -580,7 +584,7 @@ define((function () { 'use strict';
|
|
|
580
584
|
if (option == null) {
|
|
581
585
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
582
586
|
}
|
|
583
|
-
|
|
587
|
+
const resultData = [];
|
|
584
588
|
let defaultOption = {
|
|
585
589
|
url: this.windowApi.window.location.href,
|
|
586
590
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -588,16 +592,16 @@ define((function () { 'use strict';
|
|
|
588
592
|
path: "/",
|
|
589
593
|
};
|
|
590
594
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
591
|
-
|
|
595
|
+
const cookies = this.getCookiesList();
|
|
592
596
|
cookies.forEach((item) => {
|
|
593
597
|
item = item.trim();
|
|
594
|
-
|
|
595
|
-
|
|
598
|
+
const itemSplit = item.split("=");
|
|
599
|
+
const itemName = itemSplit[0];
|
|
596
600
|
itemSplit.splice(0, 1);
|
|
597
|
-
|
|
598
|
-
|
|
601
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
602
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
599
603
|
? defaultOption.name
|
|
600
|
-
: new RegExp(
|
|
604
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
601
605
|
if (itemName.match(nameRegexp)) {
|
|
602
606
|
resultData.push({
|
|
603
607
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -637,17 +641,12 @@ define((function () { 'use strict';
|
|
|
637
641
|
expirationDate: Math.floor(Date.now()) + 60 * 60 * 24 * 30,
|
|
638
642
|
};
|
|
639
643
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
640
|
-
|
|
644
|
+
const life = defaultOption.expirationDate
|
|
641
645
|
? defaultOption.expirationDate
|
|
642
646
|
: Math.floor(Date.now()) + 60 * 60 * 24 * 30;
|
|
643
|
-
let cookieStr = defaultOption.name
|
|
644
|
-
"=" +
|
|
645
|
-
decodeURIComponent(defaultOption.value) +
|
|
646
|
-
";expires=" +
|
|
647
|
-
new Date(life).toGMTString() +
|
|
648
|
-
"; path=/";
|
|
647
|
+
let cookieStr = `${defaultOption.name}=${decodeURIComponent(defaultOption.value)};expires=${new Date(life).toGMTString()}; path=/`;
|
|
649
648
|
if (commonUtil.isNull(defaultOption.domain)) {
|
|
650
|
-
cookieStr +=
|
|
649
|
+
cookieStr += `; domain=${defaultOption.domain}`;
|
|
651
650
|
}
|
|
652
651
|
this.windowApi.document.cookie = cookieStr;
|
|
653
652
|
}
|
|
@@ -699,14 +698,14 @@ define((function () { 'use strict';
|
|
|
699
698
|
if (cookieStr.trim() === "") {
|
|
700
699
|
return [];
|
|
701
700
|
}
|
|
702
|
-
|
|
703
|
-
|
|
701
|
+
const cookies = cookieStr.split(";");
|
|
702
|
+
const result = [];
|
|
704
703
|
for (const cookieItem of cookies) {
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
704
|
+
const item = cookieItem.trim();
|
|
705
|
+
const itemSplit = item.split("=");
|
|
706
|
+
const itemName = itemSplit[0];
|
|
708
707
|
itemSplit.splice(0, 1);
|
|
709
|
-
|
|
708
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
710
709
|
result.push({
|
|
711
710
|
key: itemName,
|
|
712
711
|
value: itemValue,
|
|
@@ -716,6 +715,7 @@ define((function () { 'use strict';
|
|
|
716
715
|
}
|
|
717
716
|
}
|
|
718
717
|
|
|
718
|
+
/* eslint-disable */
|
|
719
719
|
// ==UserScript==
|
|
720
720
|
// @name ajaxHooker
|
|
721
721
|
// @author cxxjackie
|
|
@@ -1766,15 +1766,15 @@ define((function () { 'use strict';
|
|
|
1766
1766
|
*/
|
|
1767
1767
|
init() {
|
|
1768
1768
|
for (let index = 0; index < this.$data.data.length; index++) {
|
|
1769
|
-
|
|
1769
|
+
const menuOption = this.$data.data[index]["data"];
|
|
1770
1770
|
menuOption.enable = Boolean(this.getLocalMenuData(menuOption.key, menuOption.enable));
|
|
1771
1771
|
if (typeof menuOption.showText !== "function") {
|
|
1772
1772
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1773
1773
|
if (menuEnable) {
|
|
1774
|
-
return this.$emoji.success
|
|
1774
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1775
1775
|
}
|
|
1776
1776
|
else {
|
|
1777
|
-
return this.$emoji.error
|
|
1777
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1778
1778
|
}
|
|
1779
1779
|
};
|
|
1780
1780
|
}
|
|
@@ -1785,7 +1785,7 @@ define((function () { 'use strict';
|
|
|
1785
1785
|
* @param menuOptions 如果存在,使用它
|
|
1786
1786
|
*/
|
|
1787
1787
|
register(menuOptions) {
|
|
1788
|
-
|
|
1788
|
+
const that = this;
|
|
1789
1789
|
if (menuOptions == null) {
|
|
1790
1790
|
throw new TypeError("register菜单数据不能为空");
|
|
1791
1791
|
}
|
|
@@ -1793,9 +1793,9 @@ define((function () { 'use strict';
|
|
|
1793
1793
|
menuOptions = [menuOptions];
|
|
1794
1794
|
}
|
|
1795
1795
|
for (let index = 0; index < menuOptions.length; index++) {
|
|
1796
|
-
|
|
1796
|
+
const cloneMenuOptionData = commonUtil.deepClone(menuOptions[index].data);
|
|
1797
1797
|
const { showText, clickCallBack } = this.handleMenuData(cloneMenuOptionData);
|
|
1798
|
-
|
|
1798
|
+
const menuId = that.context.GM_Api.registerMenuCommand(showText, clickCallBack);
|
|
1799
1799
|
menuOptions[index].id = menuId;
|
|
1800
1800
|
cloneMenuOptionData.deleteMenu = function () {
|
|
1801
1801
|
that.context.GM_Api.unregisterMenuCommand(menuId);
|
|
@@ -1809,7 +1809,7 @@ define((function () { 'use strict';
|
|
|
1809
1809
|
* @param {string} key 键
|
|
1810
1810
|
*/
|
|
1811
1811
|
getLocalMenuData(key, defaultValue) {
|
|
1812
|
-
|
|
1812
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1813
1813
|
if (key in localData) {
|
|
1814
1814
|
return localData[key];
|
|
1815
1815
|
}
|
|
@@ -1823,7 +1823,7 @@ define((function () { 'use strict';
|
|
|
1823
1823
|
* @param value 值
|
|
1824
1824
|
*/
|
|
1825
1825
|
setLocalMenuData(key, value) {
|
|
1826
|
-
|
|
1826
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1827
1827
|
localData[key] = value;
|
|
1828
1828
|
this.context.GM_Api.setValue(this.$data.key, localData);
|
|
1829
1829
|
},
|
|
@@ -1836,10 +1836,10 @@ define((function () { 'use strict';
|
|
|
1836
1836
|
if (typeof menuOption.showText !== "function") {
|
|
1837
1837
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1838
1838
|
if (menuEnable) {
|
|
1839
|
-
return this.$emoji.success
|
|
1839
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1840
1840
|
}
|
|
1841
1841
|
else {
|
|
1842
|
-
return this.$emoji.error
|
|
1842
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1843
1843
|
}
|
|
1844
1844
|
};
|
|
1845
1845
|
}
|
|
@@ -1850,12 +1850,12 @@ define((function () { 'use strict';
|
|
|
1850
1850
|
* @param menuOption
|
|
1851
1851
|
*/
|
|
1852
1852
|
handleMenuData(menuOption) {
|
|
1853
|
-
|
|
1854
|
-
|
|
1853
|
+
const that = this;
|
|
1854
|
+
const menuLocalDataItemKey = menuOption.key;
|
|
1855
1855
|
/* 菜单默认开启的状态 */
|
|
1856
|
-
|
|
1856
|
+
const defaultEnable = Boolean(this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable));
|
|
1857
1857
|
/** 油猴菜单上显示的文本 */
|
|
1858
|
-
|
|
1858
|
+
const showText = menuOption.showText(menuOption.text, defaultEnable);
|
|
1859
1859
|
// const GMMenuOptions = {
|
|
1860
1860
|
// /**
|
|
1861
1861
|
// * 菜单的id
|
|
@@ -1885,7 +1885,7 @@ define((function () { 'use strict';
|
|
|
1885
1885
|
* @param event
|
|
1886
1886
|
*/
|
|
1887
1887
|
function clickCallBack(event) {
|
|
1888
|
-
|
|
1888
|
+
const localEnable = Boolean(that.getLocalMenuData(menuLocalDataItemKey, defaultEnable));
|
|
1889
1889
|
if (menuOption.isStoreValue) {
|
|
1890
1890
|
that.setLocalMenuData(menuLocalDataItemKey, !localEnable);
|
|
1891
1891
|
}
|
|
@@ -1998,7 +1998,7 @@ define((function () { 'use strict';
|
|
|
1998
1998
|
menuOptionList = [...menuOptionList, options];
|
|
1999
1999
|
}
|
|
2000
2000
|
menuOptionList.forEach((menuOption) => {
|
|
2001
|
-
|
|
2001
|
+
const oldMenuOption = this.MenuHandle.getMenuOption(menuOption.key);
|
|
2002
2002
|
if (oldMenuOption) {
|
|
2003
2003
|
// 覆盖
|
|
2004
2004
|
Object.assign(oldMenuOption, menuOption);
|
|
@@ -2166,42 +2166,42 @@ define((function () { 'use strict';
|
|
|
2166
2166
|
* 在Function原型上添加自定义方法.hook和.unhook
|
|
2167
2167
|
*/
|
|
2168
2168
|
initEnv() {
|
|
2169
|
-
Function.prototype.hook = function (
|
|
2169
|
+
Function.prototype.hook = function (_, hookFunc, context) {
|
|
2170
2170
|
let _context = null; //函数上下文
|
|
2171
2171
|
let _funcName = null; //函数名
|
|
2172
2172
|
_context = context || window;
|
|
2173
2173
|
_funcName = getFuncName(this);
|
|
2174
|
-
_context[
|
|
2174
|
+
_context[`realFunc_${_funcName}`] = this;
|
|
2175
2175
|
if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
|
|
2176
2176
|
console.log("Already has been hooked,unhook first");
|
|
2177
2177
|
return false;
|
|
2178
2178
|
}
|
|
2179
2179
|
function getFuncName(fn) {
|
|
2180
2180
|
// 获取函数名
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2181
|
+
const strFunc = fn.toString();
|
|
2182
|
+
const _regex = /function\s+(\w+)\s*\(/;
|
|
2183
|
+
const patten = strFunc.match(_regex);
|
|
2184
2184
|
if (patten) {
|
|
2185
2185
|
return patten[1];
|
|
2186
2186
|
}
|
|
2187
2187
|
return "";
|
|
2188
2188
|
}
|
|
2189
2189
|
try {
|
|
2190
|
-
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2191
|
-
let args = Array.prototype.slice.call(arguments, 0);
|
|
2192
|
-
let obj = this;
|
|
2193
|
-
hookFunc.apply(obj, args);
|
|
2194
|
-
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2190
|
+
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2191
|
+
let args = Array.prototype.slice.call(arguments, 0);
|
|
2192
|
+
let obj = this;
|
|
2193
|
+
hookFunc.apply(obj, args);
|
|
2194
|
+
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2195
2195
|
};`)(_context, _funcName, hookFunc);
|
|
2196
2196
|
_context[_funcName].prototype.isHooked = true;
|
|
2197
2197
|
return true;
|
|
2198
2198
|
}
|
|
2199
2199
|
catch (e) {
|
|
2200
|
-
console.log("Hook failed,check the params.");
|
|
2200
|
+
console.log("Hook failed,check the params.", e);
|
|
2201
2201
|
return false;
|
|
2202
2202
|
}
|
|
2203
2203
|
};
|
|
2204
|
-
Function.prototype.unhook = function (
|
|
2204
|
+
Function.prototype.unhook = function (_, funcName, context) {
|
|
2205
2205
|
let _context = null;
|
|
2206
2206
|
let _funcName = null;
|
|
2207
2207
|
_context = context || window;
|
|
@@ -2210,8 +2210,8 @@ define((function () { 'use strict';
|
|
|
2210
2210
|
console.log("No function is hooked on");
|
|
2211
2211
|
return false;
|
|
2212
2212
|
}
|
|
2213
|
-
_context[_funcName] = _context[
|
|
2214
|
-
Reflect.deleteProperty(_context,
|
|
2213
|
+
_context[_funcName] = _context[`realFunc${_funcName}`];
|
|
2214
|
+
Reflect.deleteProperty(_context, `realFunc_${_funcName}`);
|
|
2215
2215
|
return true;
|
|
2216
2216
|
};
|
|
2217
2217
|
}
|
|
@@ -2219,10 +2219,10 @@ define((function () { 'use strict';
|
|
|
2219
2219
|
* 删除在Function原型上添加的自定义方法.hook和.unhook
|
|
2220
2220
|
*/
|
|
2221
2221
|
cleanEnv() {
|
|
2222
|
-
if (
|
|
2222
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "hook")) {
|
|
2223
2223
|
Reflect.deleteProperty(Function.prototype, "hook");
|
|
2224
2224
|
}
|
|
2225
|
-
if (
|
|
2225
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "unhook")) {
|
|
2226
2226
|
Reflect.deleteProperty(Function.prototype, "unhook");
|
|
2227
2227
|
}
|
|
2228
2228
|
return true;
|
|
@@ -2238,7 +2238,7 @@ define((function () { 'use strict';
|
|
|
2238
2238
|
}
|
|
2239
2239
|
else {
|
|
2240
2240
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (charStr) {
|
|
2241
|
-
|
|
2241
|
+
const randomValue = (Math.random() * 16) | 0, randomCharValue = charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
|
|
2242
2242
|
return randomCharValue.toString(16);
|
|
2243
2243
|
});
|
|
2244
2244
|
}
|
|
@@ -2280,9 +2280,9 @@ define((function () { 'use strict';
|
|
|
2280
2280
|
}
|
|
2281
2281
|
}
|
|
2282
2282
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2283
|
-
|
|
2283
|
+
const item = this.$config.configList[index];
|
|
2284
2284
|
if (typeof item.fn === "function") {
|
|
2285
|
-
|
|
2285
|
+
const result = await item.fn(details);
|
|
2286
2286
|
if (result == null) {
|
|
2287
2287
|
return;
|
|
2288
2288
|
}
|
|
@@ -2295,7 +2295,7 @@ define((function () { 'use strict';
|
|
|
2295
2295
|
*/
|
|
2296
2296
|
add(fn) {
|
|
2297
2297
|
if (typeof fn === "function") {
|
|
2298
|
-
|
|
2298
|
+
const uuid = GenerateUUID();
|
|
2299
2299
|
this.$config.configList.push({
|
|
2300
2300
|
id: uuid,
|
|
2301
2301
|
fn: fn,
|
|
@@ -2312,7 +2312,7 @@ define((function () { 'use strict';
|
|
|
2312
2312
|
*/
|
|
2313
2313
|
delete(id) {
|
|
2314
2314
|
if (typeof id === "string") {
|
|
2315
|
-
|
|
2315
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2316
2316
|
if (findIndex !== -1) {
|
|
2317
2317
|
this.$config.configList.splice(findIndex, 1);
|
|
2318
2318
|
return true;
|
|
@@ -2358,9 +2358,9 @@ define((function () { 'use strict';
|
|
|
2358
2358
|
}
|
|
2359
2359
|
}
|
|
2360
2360
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2361
|
-
|
|
2361
|
+
const item = this.$config.configList[index];
|
|
2362
2362
|
if (typeof item.successFn === "function") {
|
|
2363
|
-
|
|
2363
|
+
const result = await item.successFn(response, details);
|
|
2364
2364
|
if (result == null) {
|
|
2365
2365
|
return;
|
|
2366
2366
|
}
|
|
@@ -2393,9 +2393,9 @@ define((function () { 'use strict';
|
|
|
2393
2393
|
}
|
|
2394
2394
|
}
|
|
2395
2395
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2396
|
-
|
|
2396
|
+
const item = this.$config.configList[index];
|
|
2397
2397
|
if (typeof item.errorFn === "function") {
|
|
2398
|
-
|
|
2398
|
+
const result = await item.errorFn(data);
|
|
2399
2399
|
if (result == null) {
|
|
2400
2400
|
return;
|
|
2401
2401
|
}
|
|
@@ -2407,7 +2407,7 @@ define((function () { 'use strict';
|
|
|
2407
2407
|
* 添加请求前的回调处理配置
|
|
2408
2408
|
*/
|
|
2409
2409
|
add(successFn, errorFn) {
|
|
2410
|
-
|
|
2410
|
+
const id = GenerateUUID();
|
|
2411
2411
|
this.$config.configList.push({
|
|
2412
2412
|
id: id,
|
|
2413
2413
|
successFn: successFn,
|
|
@@ -2421,7 +2421,7 @@ define((function () { 'use strict';
|
|
|
2421
2421
|
*/
|
|
2422
2422
|
delete(id) {
|
|
2423
2423
|
if (typeof id === "string") {
|
|
2424
|
-
|
|
2424
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2425
2425
|
if (findIndex !== -1) {
|
|
2426
2426
|
this.$config.configList.splice(findIndex, 1);
|
|
2427
2427
|
return true;
|
|
@@ -2442,23 +2442,23 @@ define((function () { 'use strict';
|
|
|
2442
2442
|
* 对请求的参数进行合并处理
|
|
2443
2443
|
*/
|
|
2444
2444
|
handleBeforeRequestOptionArgs(...args) {
|
|
2445
|
-
|
|
2445
|
+
const option = {
|
|
2446
2446
|
url: void 0,
|
|
2447
2447
|
};
|
|
2448
2448
|
if (typeof args[0] === "string") {
|
|
2449
2449
|
/* 传入的是url,转为配置 */
|
|
2450
|
-
|
|
2450
|
+
const url = args[0];
|
|
2451
2451
|
option.url = url;
|
|
2452
2452
|
if (typeof args[1] === "object") {
|
|
2453
2453
|
/* 处理第二个参数details */
|
|
2454
|
-
|
|
2454
|
+
const optionArg = args[1];
|
|
2455
2455
|
commonUtil.assign(option, optionArg, true);
|
|
2456
2456
|
option.url = url;
|
|
2457
2457
|
}
|
|
2458
2458
|
}
|
|
2459
2459
|
else {
|
|
2460
2460
|
/* 传入的是配置 */
|
|
2461
|
-
|
|
2461
|
+
const optionArg = args[0];
|
|
2462
2462
|
commonUtil.assign(option, optionArg, true);
|
|
2463
2463
|
}
|
|
2464
2464
|
return option;
|
|
@@ -2471,7 +2471,7 @@ define((function () { 'use strict';
|
|
|
2471
2471
|
* @param reject promise抛出错误回调
|
|
2472
2472
|
*/
|
|
2473
2473
|
getRequestOption(method, userRequestOption, resolve, reject) {
|
|
2474
|
-
|
|
2474
|
+
const that = this;
|
|
2475
2475
|
let url = userRequestOption.url || this.context.#defaultRequestOption.url;
|
|
2476
2476
|
if (typeof url === "string") {
|
|
2477
2477
|
// 去除左右空格
|
|
@@ -2484,7 +2484,7 @@ define((function () { 'use strict';
|
|
|
2484
2484
|
}
|
|
2485
2485
|
}
|
|
2486
2486
|
}
|
|
2487
|
-
|
|
2487
|
+
const requestOption = {
|
|
2488
2488
|
url: url,
|
|
2489
2489
|
method: (method || "GET").toString().toUpperCase().trim(),
|
|
2490
2490
|
timeout: userRequestOption.timeout || this.context.#defaultRequestOption.timeout,
|
|
@@ -2506,9 +2506,12 @@ define((function () { 'use strict';
|
|
|
2506
2506
|
/* 对象使用深拷贝 */
|
|
2507
2507
|
fetchInit: commonUtil.deepClone(this.context.#defaultRequestOption.fetchInit),
|
|
2508
2508
|
allowInterceptConfig: {
|
|
2509
|
-
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2510
|
-
|
|
2511
|
-
|
|
2509
|
+
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2510
|
+
.beforeRequest,
|
|
2511
|
+
afterResponseSuccess: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2512
|
+
.afterResponseSuccess,
|
|
2513
|
+
afterResponseError: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2514
|
+
.afterResponseError,
|
|
2512
2515
|
},
|
|
2513
2516
|
user: userRequestOption.user || this.context.#defaultRequestOption.user,
|
|
2514
2517
|
password: userRequestOption.password || this.context.#defaultRequestOption.password,
|
|
@@ -2536,15 +2539,17 @@ define((function () { 'use strict';
|
|
|
2536
2539
|
};
|
|
2537
2540
|
// 补全allowInterceptConfig参数
|
|
2538
2541
|
if (typeof userRequestOption.allowInterceptConfig === "boolean") {
|
|
2539
|
-
Object.keys(requestOption.allowInterceptConfig)
|
|
2542
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2543
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2540
2544
|
Reflect.set(requestOption.allowInterceptConfig, keyName, userRequestOption.allowInterceptConfig);
|
|
2541
2545
|
});
|
|
2542
2546
|
}
|
|
2543
2547
|
else {
|
|
2544
2548
|
if (typeof userRequestOption.allowInterceptConfig === "object" &&
|
|
2545
2549
|
userRequestOption.allowInterceptConfig != null) {
|
|
2546
|
-
Object.keys(
|
|
2547
|
-
|
|
2550
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2551
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2552
|
+
const value = Reflect.get(userRequestOption.allowInterceptConfig, keyName);
|
|
2548
2553
|
if (typeof value === "boolean" &&
|
|
2549
2554
|
Reflect.has(requestOption.allowInterceptConfig, keyName)) {
|
|
2550
2555
|
Reflect.set(requestOption.allowInterceptConfig, keyName, value);
|
|
@@ -2558,7 +2563,8 @@ define((function () { 'use strict';
|
|
|
2558
2563
|
}
|
|
2559
2564
|
if (typeof requestOption.headers === "object") {
|
|
2560
2565
|
if (typeof userRequestOption.headers === "object") {
|
|
2561
|
-
Object.keys(
|
|
2566
|
+
const headerKeys = Object.keys(requestOption.headers);
|
|
2567
|
+
headerKeys.forEach((keyName) => {
|
|
2562
2568
|
if (keyName in requestOption.headers && userRequestOption.headers?.[keyName] == null) {
|
|
2563
2569
|
/* 在默认的header中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2564
2570
|
Reflect.deleteProperty(requestOption.headers, keyName);
|
|
@@ -2576,8 +2582,9 @@ define((function () { 'use strict';
|
|
|
2576
2582
|
if (typeof requestOption.fetchInit === "object") {
|
|
2577
2583
|
/* 使用assign替换且添加 */
|
|
2578
2584
|
if (typeof userRequestOption.fetchInit === "object") {
|
|
2579
|
-
Object.keys(
|
|
2580
|
-
|
|
2585
|
+
const fetchInitKeys = Object.keys(requestOption.fetchInit);
|
|
2586
|
+
fetchInitKeys.forEach((keyName) => {
|
|
2587
|
+
if (keyName in requestOption.fetchInit && Reflect.get(userRequestOption.fetchInit ?? {}, keyName) == null) {
|
|
2581
2588
|
/* 在默认的fetchInit中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2582
2589
|
Reflect.deleteProperty(requestOption.fetchInit, keyName);
|
|
2583
2590
|
}
|
|
@@ -2602,7 +2609,7 @@ define((function () { 'use strict';
|
|
|
2602
2609
|
try {
|
|
2603
2610
|
new URL(requestOption.url);
|
|
2604
2611
|
}
|
|
2605
|
-
catch
|
|
2612
|
+
catch {
|
|
2606
2613
|
if (requestOption.url.startsWith("//")) {
|
|
2607
2614
|
// 补充https:
|
|
2608
2615
|
requestOption.url = globalThis.location.protocol + requestOption.url;
|
|
@@ -2613,7 +2620,7 @@ define((function () { 'use strict';
|
|
|
2613
2620
|
}
|
|
2614
2621
|
else {
|
|
2615
2622
|
// 补充origin+/
|
|
2616
|
-
requestOption.url = globalThis.location.origin
|
|
2623
|
+
requestOption.url = `${globalThis.location.origin}/${requestOption.url}`;
|
|
2617
2624
|
}
|
|
2618
2625
|
}
|
|
2619
2626
|
if (requestOption.fetchInit && !requestOption.fetch) {
|
|
@@ -2623,12 +2630,12 @@ define((function () { 'use strict';
|
|
|
2623
2630
|
// 转换data类型
|
|
2624
2631
|
try {
|
|
2625
2632
|
/** 是否对数据进行处理 */
|
|
2626
|
-
|
|
2633
|
+
const processData = userRequestOption.processData ?? true;
|
|
2627
2634
|
if (requestOption.data != null && processData) {
|
|
2628
|
-
|
|
2635
|
+
const method = requestOption.method;
|
|
2629
2636
|
if (method === "GET" || method === "HEAD") {
|
|
2630
2637
|
// GET类型,data如果有,那么需要转为searchParams
|
|
2631
|
-
|
|
2638
|
+
const urlObj = new URL(requestOption.url);
|
|
2632
2639
|
let urlSearch = "";
|
|
2633
2640
|
let isHandler = false;
|
|
2634
2641
|
if (typeof requestOption.data === "string") {
|
|
@@ -2638,7 +2645,7 @@ define((function () { 'use strict';
|
|
|
2638
2645
|
else if (typeof requestOption.data === "object") {
|
|
2639
2646
|
isHandler = true;
|
|
2640
2647
|
// URLSearchParams参数可以转普通的string:string,包括FormData
|
|
2641
|
-
|
|
2648
|
+
const searchParams = new URLSearchParams(requestOption.data);
|
|
2642
2649
|
urlSearch = searchParams.toString();
|
|
2643
2650
|
}
|
|
2644
2651
|
if (isHandler) {
|
|
@@ -2659,7 +2666,7 @@ define((function () { 'use strict';
|
|
|
2659
2666
|
}
|
|
2660
2667
|
else {
|
|
2661
2668
|
// xxx=xxx&xxx=
|
|
2662
|
-
urlObj.search = urlObj.search
|
|
2669
|
+
urlObj.search = `${urlObj.search}&${urlSearch}`;
|
|
2663
2670
|
}
|
|
2664
2671
|
}
|
|
2665
2672
|
}
|
|
@@ -2667,14 +2674,14 @@ define((function () { 'use strict';
|
|
|
2667
2674
|
}
|
|
2668
2675
|
else if (method === "POST" && requestOption.headers != null) {
|
|
2669
2676
|
// POST类型,data如果是FormData,那么需要转为string
|
|
2670
|
-
|
|
2671
|
-
|
|
2677
|
+
const headersKeyList = Object.keys(requestOption.headers);
|
|
2678
|
+
const ContentTypeIndex = headersKeyList.findIndex((headerKey) => {
|
|
2672
2679
|
return (headerKey.trim().toLowerCase() === "content-type" &&
|
|
2673
2680
|
typeof requestOption.headers[headerKey] === "string");
|
|
2674
2681
|
});
|
|
2675
2682
|
if (ContentTypeIndex !== -1) {
|
|
2676
|
-
|
|
2677
|
-
|
|
2683
|
+
const ContentTypeKey = headersKeyList[ContentTypeIndex];
|
|
2684
|
+
const ContentType = requestOption.headers[ContentTypeKey];
|
|
2678
2685
|
// 设置了Content-Type
|
|
2679
2686
|
if (ContentType.includes("application/json")) {
|
|
2680
2687
|
// application/json
|
|
@@ -2715,10 +2722,10 @@ define((function () { 'use strict';
|
|
|
2715
2722
|
* @param option 请求配置
|
|
2716
2723
|
*/
|
|
2717
2724
|
removeRequestNullOption(option) {
|
|
2718
|
-
Object.keys(option)
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2725
|
+
const optionKeys = Object.keys(option);
|
|
2726
|
+
optionKeys.forEach((keyName) => {
|
|
2727
|
+
const optionValue = option[keyName];
|
|
2728
|
+
if (optionValue == null || (optionValue instanceof Function && commonUtil.isNull(optionValue))) {
|
|
2722
2729
|
Reflect.deleteProperty(option, keyName);
|
|
2723
2730
|
return;
|
|
2724
2731
|
}
|
|
@@ -2736,14 +2743,14 @@ define((function () { 'use strict';
|
|
|
2736
2743
|
/**
|
|
2737
2744
|
* fetch的请求配置
|
|
2738
2745
|
**/
|
|
2739
|
-
|
|
2746
|
+
const fetchRequestOption = {};
|
|
2740
2747
|
if ((option.method === "GET" || option.method === "HEAD") && option.data != null) {
|
|
2741
2748
|
/* GET 或 HEAD 方法的请求不能包含 body 信息 */
|
|
2742
2749
|
Reflect.deleteProperty(option, "data");
|
|
2743
2750
|
}
|
|
2744
2751
|
/* 中止信号控制器 */
|
|
2745
|
-
|
|
2746
|
-
|
|
2752
|
+
const abortController = new AbortController();
|
|
2753
|
+
const signal = abortController.signal;
|
|
2747
2754
|
signal.onabort = () => {
|
|
2748
2755
|
option.onabort({
|
|
2749
2756
|
isFetch: true,
|
|
@@ -2788,10 +2795,10 @@ define((function () { 'use strict';
|
|
|
2788
2795
|
* onabort请求被取消-触发
|
|
2789
2796
|
* @param details 配置
|
|
2790
2797
|
* @param resolve promise回调
|
|
2791
|
-
* @param
|
|
2798
|
+
* @param _reject promise抛出错误回调
|
|
2792
2799
|
* @param argsResult 返回的参数列表
|
|
2793
2800
|
*/
|
|
2794
|
-
async onAbort(details, resolve,
|
|
2801
|
+
async onAbort(details, resolve, _reject, argsResult) {
|
|
2795
2802
|
// console.log(argsResult);
|
|
2796
2803
|
if (typeof details?.onabort === "function") {
|
|
2797
2804
|
details.onabort.apply(this, argsResult);
|
|
@@ -2828,7 +2835,7 @@ define((function () { 'use strict';
|
|
|
2828
2835
|
* @param reject 抛出错误
|
|
2829
2836
|
* @param argsResult 返回的参数列表
|
|
2830
2837
|
*/
|
|
2831
|
-
async onTimeout(details, resolve,
|
|
2838
|
+
async onTimeout(details, resolve, _reject, argsResult) {
|
|
2832
2839
|
// console.log(argsResult);
|
|
2833
2840
|
if (typeof details?.ontimeout === "function") {
|
|
2834
2841
|
// 执行配置中的ontime回调
|
|
@@ -2866,10 +2873,10 @@ define((function () { 'use strict';
|
|
|
2866
2873
|
* onerror请求异常-触发
|
|
2867
2874
|
* @param details 配置
|
|
2868
2875
|
* @param resolve 回调
|
|
2869
|
-
* @param
|
|
2876
|
+
* @param _reject 抛出错误
|
|
2870
2877
|
* @param argsResult 返回的参数列表
|
|
2871
2878
|
*/
|
|
2872
|
-
async onError(details, resolve,
|
|
2879
|
+
async onError(details, resolve, _reject, argsResult) {
|
|
2873
2880
|
// console.log(argsResult);
|
|
2874
2881
|
if (typeof details?.onerror === "function") {
|
|
2875
2882
|
details.onerror.apply(this, argsResult);
|
|
@@ -2903,16 +2910,15 @@ define((function () { 'use strict';
|
|
|
2903
2910
|
* onload加载完毕-触发
|
|
2904
2911
|
* @param details 请求的配置
|
|
2905
2912
|
* @param resolve 回调
|
|
2906
|
-
* @param
|
|
2913
|
+
* @param _reject 抛出错误
|
|
2907
2914
|
* @param argsResult 返回的参数列表
|
|
2908
2915
|
*/
|
|
2909
|
-
async onLoad(details, resolve,
|
|
2916
|
+
async onLoad(details, resolve, _reject, argsResult) {
|
|
2910
2917
|
// console.log(argsResult);
|
|
2911
2918
|
/* X浏览器会因为设置了responseType导致不返回responseText */
|
|
2912
|
-
|
|
2919
|
+
const originResponse = argsResult[0];
|
|
2913
2920
|
/* responseText为空,response不为空的情况 */
|
|
2914
|
-
if (commonUtil.isNull(originResponse["responseText"]) &&
|
|
2915
|
-
commonUtil.isNotNull(originResponse["response"])) {
|
|
2921
|
+
if (commonUtil.isNull(originResponse["responseText"]) && commonUtil.isNotNull(originResponse["response"])) {
|
|
2916
2922
|
if (typeof originResponse["response"] === "object") {
|
|
2917
2923
|
TryCatch().run(() => {
|
|
2918
2924
|
originResponse["responseText"] = JSON.stringify(originResponse["response"]);
|
|
@@ -2927,51 +2933,51 @@ define((function () { 'use strict';
|
|
|
2927
2933
|
typeof originResponse["responseText"] === "string" &&
|
|
2928
2934
|
originResponse["responseText"].trim() !== "") {
|
|
2929
2935
|
/** 原始的请求text */
|
|
2930
|
-
|
|
2936
|
+
const httpxResponseText = originResponse.responseText;
|
|
2931
2937
|
// 自定义个新的response
|
|
2932
2938
|
let httpxResponse = httpxResponseText;
|
|
2933
2939
|
if (details.responseType === "json") {
|
|
2934
2940
|
httpxResponse = commonUtil.toJSON(httpxResponseText);
|
|
2935
2941
|
}
|
|
2936
2942
|
else if (details.responseType === "document") {
|
|
2937
|
-
|
|
2943
|
+
const parser = new DOMParser();
|
|
2938
2944
|
httpxResponse = parser.parseFromString(httpxResponseText, "text/html");
|
|
2939
2945
|
}
|
|
2940
2946
|
else if (details.responseType === "arraybuffer") {
|
|
2941
|
-
|
|
2942
|
-
|
|
2947
|
+
const encoder = new TextEncoder();
|
|
2948
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2943
2949
|
httpxResponse = arrayBuffer;
|
|
2944
2950
|
}
|
|
2945
2951
|
else if (details.responseType === "blob") {
|
|
2946
|
-
|
|
2947
|
-
|
|
2952
|
+
const encoder = new TextEncoder();
|
|
2953
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2948
2954
|
httpxResponse = new Blob([arrayBuffer]);
|
|
2949
2955
|
}
|
|
2950
2956
|
// 尝试覆盖原response
|
|
2951
2957
|
try {
|
|
2952
|
-
|
|
2958
|
+
const setStatus = Reflect.set(originResponse, "response", httpxResponse);
|
|
2953
2959
|
if (!setStatus) {
|
|
2954
2960
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 覆盖原始 response 失败,尝试添加新的httpxResponse");
|
|
2955
2961
|
try {
|
|
2956
2962
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2957
2963
|
}
|
|
2958
|
-
catch
|
|
2964
|
+
catch {
|
|
2959
2965
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2960
2966
|
}
|
|
2961
2967
|
}
|
|
2962
2968
|
}
|
|
2963
|
-
catch
|
|
2969
|
+
catch {
|
|
2964
2970
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 原始 response 无法被覆盖,尝试添加新的httpxResponse");
|
|
2965
2971
|
try {
|
|
2966
2972
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2967
2973
|
}
|
|
2968
|
-
catch
|
|
2974
|
+
catch {
|
|
2969
2975
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2970
2976
|
}
|
|
2971
2977
|
}
|
|
2972
2978
|
}
|
|
2973
2979
|
/* Stay扩展中没有finalUrl,对应的是responseURL */
|
|
2974
|
-
|
|
2980
|
+
const originResponseURL = Reflect.get(originResponse, "responseURL");
|
|
2975
2981
|
if (originResponse["finalUrl"] == null && originResponseURL != null) {
|
|
2976
2982
|
Reflect.set(originResponse, "finalUrl", originResponseURL);
|
|
2977
2983
|
}
|
|
@@ -2991,7 +2997,7 @@ define((function () { 'use strict';
|
|
|
2991
2997
|
});
|
|
2992
2998
|
}
|
|
2993
2999
|
else {
|
|
2994
|
-
this.context.HttpxResponseCallBack.onError(details, resolve,
|
|
3000
|
+
this.context.HttpxResponseCallBack.onError(details, resolve, _reject, argsResult);
|
|
2995
3001
|
}
|
|
2996
3002
|
},
|
|
2997
3003
|
/**
|
|
@@ -3048,7 +3054,7 @@ define((function () { 'use strict';
|
|
|
3048
3054
|
console.log("[Httpx-HttpxRequest.request] 请求前的配置👇", details);
|
|
3049
3055
|
}
|
|
3050
3056
|
if (typeof this.context.HttpxRequestHook.beforeRequestCallBack === "function") {
|
|
3051
|
-
|
|
3057
|
+
const hookResult = await this.context.HttpxRequestHook.beforeRequestCallBack(details);
|
|
3052
3058
|
if (hookResult == null) {
|
|
3053
3059
|
return;
|
|
3054
3060
|
}
|
|
@@ -3080,7 +3086,7 @@ define((function () { 'use strict';
|
|
|
3080
3086
|
fetch(option.url, fetchRequestOption)
|
|
3081
3087
|
.then(async (fetchResponse) => {
|
|
3082
3088
|
/** 自定义的response */
|
|
3083
|
-
|
|
3089
|
+
const httpxResponse = {
|
|
3084
3090
|
isFetch: true,
|
|
3085
3091
|
finalUrl: fetchResponse.url,
|
|
3086
3092
|
readyState: 4,
|
|
@@ -3095,9 +3101,9 @@ define((function () { 'use strict';
|
|
|
3095
3101
|
};
|
|
3096
3102
|
Object.assign(httpxResponse, option.context || {});
|
|
3097
3103
|
// 把headers转为字符串
|
|
3098
|
-
|
|
3104
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
3099
3105
|
httpxResponse.responseHeaders += `${key}: ${value}\n`;
|
|
3100
|
-
}
|
|
3106
|
+
});
|
|
3101
3107
|
/** 请求返回的类型 */
|
|
3102
3108
|
const fetchResponseType = fetchResponse.headers.get("Content-Type");
|
|
3103
3109
|
/* 如果需要stream,且获取到的是stream,那直接返回 */
|
|
@@ -3118,11 +3124,11 @@ define((function () { 'use strict';
|
|
|
3118
3124
|
/** 响应xml文档 */
|
|
3119
3125
|
let responseXML = "";
|
|
3120
3126
|
/** 先获取二进制数据 */
|
|
3121
|
-
|
|
3127
|
+
const arrayBuffer = await fetchResponse.arrayBuffer();
|
|
3122
3128
|
/** 数据编码 */
|
|
3123
3129
|
let encoding = "utf-8";
|
|
3124
3130
|
if (fetchResponse.headers.has("Content-Type")) {
|
|
3125
|
-
|
|
3131
|
+
const charsetMatched = fetchResponse.headers.get("Content-Type")?.match(/charset=(.+)/);
|
|
3126
3132
|
if (charsetMatched) {
|
|
3127
3133
|
encoding = charsetMatched[1];
|
|
3128
3134
|
encoding = encoding.toLowerCase();
|
|
@@ -3132,7 +3138,7 @@ define((function () { 'use strict';
|
|
|
3132
3138
|
// 去除引号
|
|
3133
3139
|
encoding = encoding.replace(/('|")/gi, "");
|
|
3134
3140
|
// 编码
|
|
3135
|
-
|
|
3141
|
+
const textDecoder = new TextDecoder(encoding);
|
|
3136
3142
|
responseText = textDecoder.decode(arrayBuffer);
|
|
3137
3143
|
response = responseText;
|
|
3138
3144
|
if (option.responseType === "arraybuffer") {
|
|
@@ -3150,11 +3156,11 @@ define((function () { 'use strict';
|
|
|
3150
3156
|
}
|
|
3151
3157
|
else if (option.responseType === "document" || option.responseType == null) {
|
|
3152
3158
|
// response返回格式是文档格式
|
|
3153
|
-
|
|
3159
|
+
const parser = new DOMParser();
|
|
3154
3160
|
response = parser.parseFromString(responseText, "text/html");
|
|
3155
3161
|
}
|
|
3156
3162
|
// 转为XML结构
|
|
3157
|
-
|
|
3163
|
+
const parser = new DOMParser();
|
|
3158
3164
|
responseXML = parser.parseFromString(responseText, "text/xml");
|
|
3159
3165
|
httpxResponse.response = response;
|
|
3160
3166
|
httpxResponse.responseText = responseText;
|
|
@@ -3228,6 +3234,9 @@ define((function () { 'use strict';
|
|
|
3228
3234
|
onreadystatechange() { },
|
|
3229
3235
|
onprogress() { },
|
|
3230
3236
|
};
|
|
3237
|
+
/**
|
|
3238
|
+
* 实例化的默认配置
|
|
3239
|
+
*/
|
|
3231
3240
|
#defaultInitOption = {
|
|
3232
3241
|
/**
|
|
3233
3242
|
* `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
|
|
@@ -3343,7 +3352,7 @@ define((function () { 'use strict';
|
|
|
3343
3352
|
* @param details 配置
|
|
3344
3353
|
*/
|
|
3345
3354
|
get(...args) {
|
|
3346
|
-
|
|
3355
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3347
3356
|
useRequestOption.method = "GET";
|
|
3348
3357
|
return this.request(useRequestOption, (option) => {
|
|
3349
3358
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3353,7 +3362,7 @@ define((function () { 'use strict';
|
|
|
3353
3362
|
* POST 请求
|
|
3354
3363
|
*/
|
|
3355
3364
|
post(...args) {
|
|
3356
|
-
|
|
3365
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3357
3366
|
useRequestOption.method = "POST";
|
|
3358
3367
|
return this.request(useRequestOption);
|
|
3359
3368
|
}
|
|
@@ -3361,7 +3370,7 @@ define((function () { 'use strict';
|
|
|
3361
3370
|
* HEAD 请求
|
|
3362
3371
|
*/
|
|
3363
3372
|
head(...args) {
|
|
3364
|
-
|
|
3373
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3365
3374
|
useRequestOption.method = "HEAD";
|
|
3366
3375
|
return this.request(useRequestOption, (option) => {
|
|
3367
3376
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3371,7 +3380,7 @@ define((function () { 'use strict';
|
|
|
3371
3380
|
* OPTIONS 请求
|
|
3372
3381
|
*/
|
|
3373
3382
|
options(...args) {
|
|
3374
|
-
|
|
3383
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3375
3384
|
useRequestOption.method = "OPTIONS";
|
|
3376
3385
|
return this.request(useRequestOption, (option) => {
|
|
3377
3386
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3381,7 +3390,7 @@ define((function () { 'use strict';
|
|
|
3381
3390
|
* DELETE 请求
|
|
3382
3391
|
*/
|
|
3383
3392
|
delete(...args) {
|
|
3384
|
-
|
|
3393
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3385
3394
|
useRequestOption.method = "DELETE";
|
|
3386
3395
|
return this.request(useRequestOption, (option) => {
|
|
3387
3396
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3391,7 +3400,7 @@ define((function () { 'use strict';
|
|
|
3391
3400
|
* PUT 请求
|
|
3392
3401
|
*/
|
|
3393
3402
|
put(...args) {
|
|
3394
|
-
|
|
3403
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3395
3404
|
userRequestOption.method = "PUT";
|
|
3396
3405
|
return this.request(userRequestOption);
|
|
3397
3406
|
}
|
|
@@ -3401,18 +3410,30 @@ define((function () { 'use strict';
|
|
|
3401
3410
|
* @param beforeRequestOption 处理请求前的配置
|
|
3402
3411
|
*/
|
|
3403
3412
|
request(details, beforeRequestOption) {
|
|
3404
|
-
|
|
3405
|
-
|
|
3413
|
+
// 对请求的参数进行合并处理
|
|
3414
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(details);
|
|
3415
|
+
/**
|
|
3416
|
+
* 取消请求
|
|
3417
|
+
*/
|
|
3406
3418
|
let abortFn = null;
|
|
3407
|
-
|
|
3408
|
-
|
|
3419
|
+
const promise = new globalThis.Promise(async (resolve, reject) => {
|
|
3420
|
+
// 请求配置
|
|
3421
|
+
let requestOption = this.HttpxRequestOption.getRequestOption(userRequestOption.method, userRequestOption, (resultOption) => {
|
|
3422
|
+
resolve(resultOption);
|
|
3423
|
+
}, (...args) => {
|
|
3424
|
+
reject(...args);
|
|
3425
|
+
});
|
|
3426
|
+
requestOption = this.HttpxRequestOption.removeRequestNullOption(requestOption);
|
|
3409
3427
|
if (typeof beforeRequestOption === "function") {
|
|
3410
3428
|
beforeRequestOption(requestOption);
|
|
3411
3429
|
}
|
|
3412
|
-
|
|
3430
|
+
// 处理重试逻辑
|
|
3413
3431
|
const requestResult = await this.HttpxRequest.request(requestOption);
|
|
3414
3432
|
if (requestResult != null && typeof requestResult.abort === "function") {
|
|
3415
|
-
abortFn =
|
|
3433
|
+
abortFn = () => {
|
|
3434
|
+
// 取消请求
|
|
3435
|
+
requestResult.abort();
|
|
3436
|
+
};
|
|
3416
3437
|
}
|
|
3417
3438
|
});
|
|
3418
3439
|
promise.abort = () => {
|
|
@@ -3431,10 +3452,7 @@ define((function () { 'use strict';
|
|
|
3431
3452
|
/* websql的版本号,由于ios的问题,版本号的写法不一样 */
|
|
3432
3453
|
// #slqVersion = "1";
|
|
3433
3454
|
/* 监听IndexDB */
|
|
3434
|
-
#indexedDB =
|
|
3435
|
-
window.mozIndexedDB ||
|
|
3436
|
-
window.webkitIndexedDB ||
|
|
3437
|
-
window.msIndexedDB;
|
|
3455
|
+
#indexedDB = globalThis.indexedDB || globalThis.mozIndexedDB || globalThis.webkitIndexedDB || globalThis.msIndexedDB;
|
|
3438
3456
|
/* 缓存数据库,避免同一个页面重复创建和销毁 */
|
|
3439
3457
|
#db = {};
|
|
3440
3458
|
// #store: IDBObjectStore = null as any;
|
|
@@ -3469,7 +3487,7 @@ define((function () { 'use strict';
|
|
|
3469
3487
|
this.#storeName = storeName;
|
|
3470
3488
|
this.#dbVersion = dbVersion;
|
|
3471
3489
|
if (!this.#indexedDB) {
|
|
3472
|
-
alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3490
|
+
window.alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3473
3491
|
throw new TypeError("很抱歉,您的浏览器不支持indexedDB");
|
|
3474
3492
|
}
|
|
3475
3493
|
}
|
|
@@ -3478,10 +3496,9 @@ define((function () { 'use strict';
|
|
|
3478
3496
|
* @param dbName 表名
|
|
3479
3497
|
*/
|
|
3480
3498
|
createStore(dbName) {
|
|
3481
|
-
|
|
3482
|
-
txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3499
|
+
const txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3483
3500
|
/* IndexDB的读写权限 */
|
|
3484
|
-
store = txn.objectStore(this.#storeName);
|
|
3501
|
+
const store = txn.objectStore(this.#storeName);
|
|
3485
3502
|
// this.#store = store;
|
|
3486
3503
|
return store;
|
|
3487
3504
|
}
|
|
@@ -3491,12 +3508,12 @@ define((function () { 'use strict';
|
|
|
3491
3508
|
* @param dbName 数据库名
|
|
3492
3509
|
*/
|
|
3493
3510
|
open(callback, dbName) {
|
|
3494
|
-
|
|
3511
|
+
const that = this;
|
|
3495
3512
|
/* 打开数据库 */
|
|
3496
3513
|
/* 如果支持IndexDB */
|
|
3497
3514
|
if (!that.#db[dbName]) {
|
|
3498
3515
|
/* 如果缓存中没有,则进行数据库的创建或打开,提高效率 */
|
|
3499
|
-
|
|
3516
|
+
const request = that.#indexedDB.open(dbName, that.#dbVersion);
|
|
3500
3517
|
request.onerror = function (event) {
|
|
3501
3518
|
callback(null, {
|
|
3502
3519
|
code: that.#statusCode.openFailed.code,
|
|
@@ -3506,26 +3523,26 @@ define((function () { 'use strict';
|
|
|
3506
3523
|
};
|
|
3507
3524
|
request.onsuccess = function (event) {
|
|
3508
3525
|
if (!that.#db[dbName]) {
|
|
3509
|
-
|
|
3526
|
+
const target = event.target;
|
|
3510
3527
|
that.#db[dbName] = target.result;
|
|
3511
3528
|
}
|
|
3512
|
-
|
|
3529
|
+
const store = that.createStore(dbName);
|
|
3513
3530
|
callback(store);
|
|
3514
3531
|
};
|
|
3515
3532
|
request.onupgradeneeded = function (event) {
|
|
3516
|
-
|
|
3533
|
+
const target = event.target;
|
|
3517
3534
|
that.#db[dbName] = target.result;
|
|
3518
|
-
|
|
3535
|
+
const store = that.#db[dbName].createObjectStore(that.#storeName, {
|
|
3519
3536
|
keyPath: "key",
|
|
3520
3537
|
});
|
|
3521
|
-
store.transaction.oncomplete = function (
|
|
3538
|
+
store.transaction.oncomplete = function () {
|
|
3522
3539
|
callback(store);
|
|
3523
3540
|
};
|
|
3524
3541
|
};
|
|
3525
3542
|
}
|
|
3526
3543
|
else {
|
|
3527
3544
|
/* 如果缓存中已经打开了数据库,就直接使用 */
|
|
3528
|
-
|
|
3545
|
+
const store = this.createStore(dbName);
|
|
3529
3546
|
callback(store);
|
|
3530
3547
|
}
|
|
3531
3548
|
}
|
|
@@ -3535,10 +3552,10 @@ define((function () { 'use strict';
|
|
|
3535
3552
|
* @param value 数据值
|
|
3536
3553
|
*/
|
|
3537
3554
|
async save(key, value) {
|
|
3538
|
-
|
|
3555
|
+
const that = this;
|
|
3539
3556
|
return new Promise((resolve) => {
|
|
3540
|
-
|
|
3541
|
-
|
|
3557
|
+
const dbName = this.#dbName;
|
|
3558
|
+
const inData = {
|
|
3542
3559
|
key: key,
|
|
3543
3560
|
value: value,
|
|
3544
3561
|
};
|
|
@@ -3551,7 +3568,7 @@ define((function () { 'use strict';
|
|
|
3551
3568
|
});
|
|
3552
3569
|
}
|
|
3553
3570
|
else {
|
|
3554
|
-
|
|
3571
|
+
const request = idbStore.put(inData);
|
|
3555
3572
|
request.onsuccess = function (event) {
|
|
3556
3573
|
/* 保存成功有success 字段 */
|
|
3557
3574
|
resolve({
|
|
@@ -3578,9 +3595,9 @@ define((function () { 'use strict';
|
|
|
3578
3595
|
* @param key 数据key
|
|
3579
3596
|
*/
|
|
3580
3597
|
async has(key) {
|
|
3581
|
-
|
|
3598
|
+
const that = this;
|
|
3582
3599
|
return new Promise((resolve) => {
|
|
3583
|
-
|
|
3600
|
+
const dbName = this.#dbName;
|
|
3584
3601
|
this.open(function (idbStore) {
|
|
3585
3602
|
/* 判断返回的数据中是否有error字段 */
|
|
3586
3603
|
if (idbStore == null) {
|
|
@@ -3591,7 +3608,7 @@ define((function () { 'use strict';
|
|
|
3591
3608
|
});
|
|
3592
3609
|
}
|
|
3593
3610
|
else {
|
|
3594
|
-
|
|
3611
|
+
const request = idbStore.get(key);
|
|
3595
3612
|
request.onsuccess = function (event) {
|
|
3596
3613
|
/* result 返回的是 {key: string, value: any} */
|
|
3597
3614
|
/* 键值对存储 */
|
|
@@ -3619,9 +3636,9 @@ define((function () { 'use strict';
|
|
|
3619
3636
|
* @param key 数据key
|
|
3620
3637
|
*/
|
|
3621
3638
|
async get(key) {
|
|
3622
|
-
|
|
3639
|
+
const that = this;
|
|
3623
3640
|
return new Promise((resolve) => {
|
|
3624
|
-
|
|
3641
|
+
const dbName = this.#dbName;
|
|
3625
3642
|
this.open(function (idbStore) {
|
|
3626
3643
|
/* 判断返回的数据中是否有error字段 */
|
|
3627
3644
|
if (idbStore == null) {
|
|
@@ -3633,13 +3650,13 @@ define((function () { 'use strict';
|
|
|
3633
3650
|
});
|
|
3634
3651
|
}
|
|
3635
3652
|
else {
|
|
3636
|
-
|
|
3653
|
+
const request = idbStore.get(key);
|
|
3637
3654
|
request.onsuccess = function (event) {
|
|
3638
|
-
|
|
3639
|
-
|
|
3655
|
+
const target = event.target;
|
|
3656
|
+
const result = target.result;
|
|
3640
3657
|
/* result 返回的是 {key: string, value: any} */
|
|
3641
3658
|
/* 键值对存储 */
|
|
3642
|
-
|
|
3659
|
+
const data = result ? result.value : void 0;
|
|
3643
3660
|
if (data == null) {
|
|
3644
3661
|
resolve({
|
|
3645
3662
|
success: true,
|
|
@@ -3680,10 +3697,10 @@ define((function () { 'use strict';
|
|
|
3680
3697
|
*/
|
|
3681
3698
|
async regexpGet(key) {
|
|
3682
3699
|
let list = [];
|
|
3683
|
-
|
|
3700
|
+
const that = this;
|
|
3684
3701
|
return new Promise((resolve) => {
|
|
3685
3702
|
/* 正则查询 */
|
|
3686
|
-
|
|
3703
|
+
const dbName = that.#dbName;
|
|
3687
3704
|
this.open(function (idbStore) {
|
|
3688
3705
|
/* 判断返回的数据中是否有error字段 */
|
|
3689
3706
|
if (idbStore == null) {
|
|
@@ -3695,16 +3712,16 @@ define((function () { 'use strict';
|
|
|
3695
3712
|
});
|
|
3696
3713
|
}
|
|
3697
3714
|
else {
|
|
3698
|
-
|
|
3715
|
+
const request = idbStore.getAll();
|
|
3699
3716
|
request.onsuccess = function (event) {
|
|
3700
|
-
|
|
3701
|
-
|
|
3717
|
+
const target = event.target;
|
|
3718
|
+
const result = target.result;
|
|
3702
3719
|
if (result.length !== 0) {
|
|
3703
|
-
result.forEach((dataItem
|
|
3720
|
+
result.forEach((dataItem) => {
|
|
3704
3721
|
// 当前项的key
|
|
3705
|
-
|
|
3722
|
+
const __key = dataItem["key"];
|
|
3706
3723
|
// 当前项的value
|
|
3707
|
-
|
|
3724
|
+
const __value = dataItem["value"];
|
|
3708
3725
|
if (__key.match(key)) {
|
|
3709
3726
|
list = list.concat(__value);
|
|
3710
3727
|
}
|
|
@@ -3736,10 +3753,10 @@ define((function () { 'use strict';
|
|
|
3736
3753
|
* @param key 数据key
|
|
3737
3754
|
*/
|
|
3738
3755
|
async delete(key) {
|
|
3739
|
-
|
|
3756
|
+
const that = this;
|
|
3740
3757
|
return new Promise((resolve) => {
|
|
3741
3758
|
/* 根据key删除某条数据 */
|
|
3742
|
-
|
|
3759
|
+
const dbName = that.#dbName;
|
|
3743
3760
|
this.open(function (idbStore) {
|
|
3744
3761
|
if (idbStore == null) {
|
|
3745
3762
|
resolve({
|
|
@@ -3750,7 +3767,7 @@ define((function () { 'use strict';
|
|
|
3750
3767
|
}
|
|
3751
3768
|
else {
|
|
3752
3769
|
// 删除键
|
|
3753
|
-
|
|
3770
|
+
const request = idbStore.delete(key);
|
|
3754
3771
|
request.onsuccess = function (event) {
|
|
3755
3772
|
resolve({
|
|
3756
3773
|
success: true,
|
|
@@ -3775,10 +3792,10 @@ define((function () { 'use strict';
|
|
|
3775
3792
|
* 删除所有数据
|
|
3776
3793
|
*/
|
|
3777
3794
|
async deleteAll() {
|
|
3778
|
-
|
|
3795
|
+
const that = this;
|
|
3779
3796
|
return new Promise((resolve) => {
|
|
3780
3797
|
/* 清空数据库 */
|
|
3781
|
-
|
|
3798
|
+
const dbName = that.#dbName;
|
|
3782
3799
|
this.open(function (idbStore) {
|
|
3783
3800
|
if (idbStore == null) {
|
|
3784
3801
|
resolve({
|
|
@@ -3789,7 +3806,7 @@ define((function () { 'use strict';
|
|
|
3789
3806
|
}
|
|
3790
3807
|
else {
|
|
3791
3808
|
// 清空
|
|
3792
|
-
|
|
3809
|
+
const operateResult = idbStore.clear();
|
|
3793
3810
|
operateResult.onsuccess = function (event) {
|
|
3794
3811
|
resolve({
|
|
3795
3812
|
success: true,
|
|
@@ -3822,7 +3839,7 @@ define((function () { 'use strict';
|
|
|
3822
3839
|
run;
|
|
3823
3840
|
isLock;
|
|
3824
3841
|
constructor(callback, context, delayTime) {
|
|
3825
|
-
|
|
3842
|
+
const that = this;
|
|
3826
3843
|
this.#callback = callback;
|
|
3827
3844
|
if (typeof context === "number") {
|
|
3828
3845
|
this.#delayTime = context;
|
|
@@ -3912,14 +3929,14 @@ define((function () { 'use strict';
|
|
|
3912
3929
|
* @param stack
|
|
3913
3930
|
*/
|
|
3914
3931
|
parseErrorStack(stack) {
|
|
3915
|
-
|
|
3932
|
+
const result = {
|
|
3916
3933
|
name: "",
|
|
3917
3934
|
position: "",
|
|
3918
3935
|
};
|
|
3919
3936
|
for (let stackString of stack) {
|
|
3920
3937
|
stackString = stackString.trim();
|
|
3921
|
-
|
|
3922
|
-
|
|
3938
|
+
const stackFunctionNameMatch = stackString.match(/^at[\s]+(.+?)[\s]+/i);
|
|
3939
|
+
const stackFunctionNamePositionMatch = stackString.match(/^at[\s]+.+[\s]+\((.+?)\)/i);
|
|
3923
3940
|
if (stackFunctionNameMatch == null) {
|
|
3924
3941
|
continue;
|
|
3925
3942
|
}
|
|
@@ -3927,8 +3944,8 @@ define((function () { 'use strict';
|
|
|
3927
3944
|
continue;
|
|
3928
3945
|
}
|
|
3929
3946
|
/* 获取最后一个,因为第一个是包含了at */
|
|
3930
|
-
|
|
3931
|
-
|
|
3947
|
+
const stackFunctionName = stackFunctionNameMatch[stackFunctionNameMatch.length - 1];
|
|
3948
|
+
const stackFunctionNamePosition = stackFunctionNamePositionMatch[stackFunctionNamePositionMatch.length - 1];
|
|
3932
3949
|
if (stackFunctionName === "" ||
|
|
3933
3950
|
stackFunctionName.match(/^(Utils\.|)Log(\.|)|.<anonymous>$|^Function.each|^NodeList.forEach|^k.fn.init.each/g)) {
|
|
3934
3951
|
continue;
|
|
@@ -3940,9 +3957,9 @@ define((function () { 'use strict';
|
|
|
3940
3957
|
}
|
|
3941
3958
|
}
|
|
3942
3959
|
if (result.position === "") {
|
|
3943
|
-
|
|
3960
|
+
const lastStackString = stack[stack.length - 1].trim();
|
|
3944
3961
|
if (lastStackString.startsWith("at chrome-extension://")) {
|
|
3945
|
-
|
|
3962
|
+
const lastStackMatch = lastStackString.match(/^at[\s]+(.+)/);
|
|
3946
3963
|
if (lastStackMatch) {
|
|
3947
3964
|
result.position = lastStackMatch[lastStackMatch.length - 1];
|
|
3948
3965
|
}
|
|
@@ -3972,16 +3989,18 @@ define((function () { 'use strict';
|
|
|
3972
3989
|
printContent(msg, color, otherStyle) {
|
|
3973
3990
|
this.checkClearConsole();
|
|
3974
3991
|
otherStyle = otherStyle || "";
|
|
3975
|
-
|
|
3992
|
+
const stackSplit = new Error().stack.split("\n");
|
|
3976
3993
|
stackSplit.splice(0, 2);
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3994
|
+
const { name: callerName, position: callerPosition } = this.parseErrorStack(stackSplit);
|
|
3995
|
+
const tagName = this.tag;
|
|
3996
|
+
const that = this;
|
|
3980
3997
|
/** tag的html输出格式 */
|
|
3981
|
-
|
|
3998
|
+
const tagNameHTML = `%c[${tagName}%c`;
|
|
3982
3999
|
/** 调用的函数名的html输出格式 */
|
|
3983
4000
|
let callerNameHTML = `%c${callerName}%c]%c`;
|
|
3984
|
-
callerName.trim()
|
|
4001
|
+
if (callerName.trim() === "") {
|
|
4002
|
+
callerNameHTML = `-${callerNameHTML}`;
|
|
4003
|
+
}
|
|
3985
4004
|
/**
|
|
3986
4005
|
* 输出消息到控制台
|
|
3987
4006
|
* @param message
|
|
@@ -4067,14 +4086,14 @@ define((function () { 'use strict';
|
|
|
4067
4086
|
if (this.#disable)
|
|
4068
4087
|
return;
|
|
4069
4088
|
this.checkClearConsole();
|
|
4070
|
-
|
|
4089
|
+
const stack = new Error().stack.split("\n");
|
|
4071
4090
|
stack.splice(0, 1);
|
|
4072
|
-
|
|
4091
|
+
const errorStackParse = this.parseErrorStack(stack);
|
|
4073
4092
|
/** 堆栈函数名 */
|
|
4074
|
-
|
|
4093
|
+
const stackFunctionName = errorStackParse.name;
|
|
4075
4094
|
/** 堆栈位置 */
|
|
4076
|
-
|
|
4077
|
-
|
|
4095
|
+
const stackFunctionNamePosition = errorStackParse.position;
|
|
4096
|
+
const callerName = stackFunctionName;
|
|
4078
4097
|
this.#console.log(`%c[${this.tag}%c-%c${callerName}%c]%c`, ...this.#msgColorDetails, `color: ${this.#details.infoColor};`);
|
|
4079
4098
|
this.#console.table(msg);
|
|
4080
4099
|
if (this.#details.debug) {
|
|
@@ -4137,9 +4156,9 @@ define((function () { 'use strict';
|
|
|
4137
4156
|
*/
|
|
4138
4157
|
circleRadius: 50,
|
|
4139
4158
|
};
|
|
4140
|
-
#ctx
|
|
4141
|
-
#width
|
|
4142
|
-
#height
|
|
4159
|
+
#ctx;
|
|
4160
|
+
#width;
|
|
4161
|
+
#height;
|
|
4143
4162
|
/**
|
|
4144
4163
|
*
|
|
4145
4164
|
* @param paramConfig 配置信息
|
|
@@ -4149,14 +4168,8 @@ define((function () { 'use strict';
|
|
|
4149
4168
|
if (!(this.#config.canvasNode instanceof HTMLCanvasElement)) {
|
|
4150
4169
|
throw new Error("Utils.Progress 参数 canvasNode 必须是 HTMLCanvasElement");
|
|
4151
4170
|
}
|
|
4152
|
-
this.init();
|
|
4153
|
-
}
|
|
4154
|
-
/**
|
|
4155
|
-
* 初始化
|
|
4156
|
-
*/
|
|
4157
|
-
init() {
|
|
4158
4171
|
/* 获取画笔 */
|
|
4159
|
-
|
|
4172
|
+
const ctx = this.#config.canvasNode.getContext("2d");
|
|
4160
4173
|
if (ctx == null) {
|
|
4161
4174
|
throw new Error("Utils.Progress 获取画笔失败");
|
|
4162
4175
|
}
|
|
@@ -4167,8 +4180,8 @@ define((function () { 'use strict';
|
|
|
4167
4180
|
this.#height = this.#config.canvasNode.height;
|
|
4168
4181
|
/* 清除锯齿 */
|
|
4169
4182
|
if (window.devicePixelRatio) {
|
|
4170
|
-
this.#config.canvasNode.style.width = this.#width
|
|
4171
|
-
this.#config.canvasNode.style.height = this.#height
|
|
4183
|
+
this.#config.canvasNode.style.width = `${this.#width}px`;
|
|
4184
|
+
this.#config.canvasNode.style.height = `${this.#height}px`;
|
|
4172
4185
|
this.#config.canvasNode.height = this.#height * window.devicePixelRatio;
|
|
4173
4186
|
this.#config.canvasNode.width = this.#width * window.devicePixelRatio;
|
|
4174
4187
|
this.#ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
|
|
@@ -4180,7 +4193,7 @@ define((function () { 'use strict';
|
|
|
4180
4193
|
* 绘制
|
|
4181
4194
|
*/
|
|
4182
4195
|
draw() {
|
|
4183
|
-
|
|
4196
|
+
const degActive = (this.#config.progress * 360) / 100;
|
|
4184
4197
|
/* 清除画布 */
|
|
4185
4198
|
this.#ctx.clearRect(0, 0, this.#width, this.#height);
|
|
4186
4199
|
/* 开始绘制底圆 */
|
|
@@ -4194,11 +4207,11 @@ define((function () { 'use strict';
|
|
|
4194
4207
|
this.#ctx.strokeStyle = this.#config.lineColor;
|
|
4195
4208
|
this.#ctx.stroke();
|
|
4196
4209
|
/* 获取百分比 */
|
|
4197
|
-
|
|
4198
|
-
this.#ctx.font = this.#config.fontSize
|
|
4210
|
+
const txt = `${parseInt(this.#config.progress.toString())}%`;
|
|
4211
|
+
this.#ctx.font = `${this.#config.fontSize}px SimHei`;
|
|
4199
4212
|
/* 获取文本宽度 */
|
|
4200
|
-
|
|
4201
|
-
|
|
4213
|
+
const w = this.#ctx.measureText(txt).width;
|
|
4214
|
+
const h = this.#config.fontSize / 2;
|
|
4202
4215
|
this.#ctx.fillStyle = this.#config.textColor;
|
|
4203
4216
|
this.#ctx.fillText(txt, this.#width / 2 - w / 2, this.#height / 2 + h / 2);
|
|
4204
4217
|
}
|
|
@@ -4222,9 +4235,9 @@ define((function () { 'use strict';
|
|
|
4222
4235
|
* 迭代器
|
|
4223
4236
|
*/
|
|
4224
4237
|
get entries() {
|
|
4225
|
-
|
|
4238
|
+
const that = this;
|
|
4226
4239
|
return function* () {
|
|
4227
|
-
|
|
4240
|
+
const itemKeys = Object.keys(that.getItems());
|
|
4228
4241
|
for (const keyName of itemKeys) {
|
|
4229
4242
|
yield [keyName, that.get(keyName)];
|
|
4230
4243
|
}
|
|
@@ -4234,9 +4247,8 @@ define((function () { 'use strict';
|
|
|
4234
4247
|
* 是否可遍历
|
|
4235
4248
|
*/
|
|
4236
4249
|
get [Symbol.iterator]() {
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
return that.entries();
|
|
4250
|
+
return () => {
|
|
4251
|
+
return this.entries();
|
|
4240
4252
|
};
|
|
4241
4253
|
}
|
|
4242
4254
|
/**
|
|
@@ -4283,13 +4295,13 @@ define((function () { 'use strict';
|
|
|
4283
4295
|
* 获取字典所有的键
|
|
4284
4296
|
*/
|
|
4285
4297
|
keys() {
|
|
4286
|
-
return this.items.keys()
|
|
4298
|
+
return Array.from(this.items.keys());
|
|
4287
4299
|
}
|
|
4288
4300
|
/**
|
|
4289
4301
|
* 返回字典中的所有值
|
|
4290
4302
|
*/
|
|
4291
4303
|
values() {
|
|
4292
|
-
return this.items.values()
|
|
4304
|
+
return Array.from(this.items.values());
|
|
4293
4305
|
}
|
|
4294
4306
|
/**
|
|
4295
4307
|
* 清空字典
|
|
@@ -4323,7 +4335,7 @@ define((function () { 'use strict';
|
|
|
4323
4335
|
* @param callbackfn 回调函数
|
|
4324
4336
|
*/
|
|
4325
4337
|
forEach(callbackfn) {
|
|
4326
|
-
this.items.forEach((value, key
|
|
4338
|
+
this.items.forEach((value, key) => {
|
|
4327
4339
|
callbackfn(value, key, this);
|
|
4328
4340
|
});
|
|
4329
4341
|
}
|
|
@@ -4415,6 +4427,7 @@ define((function () { 'use strict';
|
|
|
4415
4427
|
}
|
|
4416
4428
|
}
|
|
4417
4429
|
|
|
4430
|
+
// @ts-nocheck
|
|
4418
4431
|
const VueUtils = {
|
|
4419
4432
|
/** 标签 */
|
|
4420
4433
|
ReactiveFlags: {
|
|
@@ -4453,10 +4466,10 @@ define((function () { 'use strict';
|
|
|
4453
4466
|
deps = [];
|
|
4454
4467
|
active = true;
|
|
4455
4468
|
fn;
|
|
4456
|
-
|
|
4469
|
+
scheduler;
|
|
4457
4470
|
constructor(fn, scheduler) {
|
|
4458
4471
|
this.fn = fn;
|
|
4459
|
-
|
|
4472
|
+
this.scheduler = scheduler;
|
|
4460
4473
|
}
|
|
4461
4474
|
run(cb) {
|
|
4462
4475
|
if (!this.active) {
|
|
@@ -4528,7 +4541,7 @@ define((function () { 'use strict';
|
|
|
4528
4541
|
if (VueUtils.isReactive(target)) {
|
|
4529
4542
|
return target;
|
|
4530
4543
|
}
|
|
4531
|
-
|
|
4544
|
+
const exisProxy = this.reactMap.get(target);
|
|
4532
4545
|
if (exisProxy) {
|
|
4533
4546
|
return exisProxy;
|
|
4534
4547
|
}
|
|
@@ -4541,8 +4554,8 @@ define((function () { 'use strict';
|
|
|
4541
4554
|
return Reflect.get(target, key, receiver);
|
|
4542
4555
|
},
|
|
4543
4556
|
set(target, key, value, receiver) {
|
|
4544
|
-
|
|
4545
|
-
|
|
4557
|
+
const oldValue = target[key];
|
|
4558
|
+
const result = Reflect.set(target, key, value, receiver);
|
|
4546
4559
|
if (oldValue !== value) {
|
|
4547
4560
|
that.trigger(target, "set", key, oldValue, value);
|
|
4548
4561
|
}
|
|
@@ -4592,11 +4605,12 @@ define((function () { 'use strict';
|
|
|
4592
4605
|
}
|
|
4593
4606
|
toRefs(object) {
|
|
4594
4607
|
const result = VueUtils.isArray(object) ? new Array(object.length) : {};
|
|
4595
|
-
for (
|
|
4608
|
+
for (const key in object) {
|
|
4596
4609
|
result[key] = this.toRef(object, key);
|
|
4597
4610
|
}
|
|
4598
4611
|
return result;
|
|
4599
4612
|
}
|
|
4613
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4600
4614
|
trigger(target, type, key, oldValue, value) {
|
|
4601
4615
|
const depsMap = this.targetMap.get(target);
|
|
4602
4616
|
if (!depsMap)
|
|
@@ -4604,8 +4618,9 @@ define((function () { 'use strict';
|
|
|
4604
4618
|
const effects = depsMap.get(key);
|
|
4605
4619
|
this.triggerEffect(effects, "effects");
|
|
4606
4620
|
}
|
|
4621
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4607
4622
|
triggerEffect(effects, name) {
|
|
4608
|
-
effects
|
|
4623
|
+
if (effects) {
|
|
4609
4624
|
effects.forEach((effect) => {
|
|
4610
4625
|
if (effect.scheduler) {
|
|
4611
4626
|
effect.scheduler();
|
|
@@ -4614,6 +4629,7 @@ define((function () { 'use strict';
|
|
|
4614
4629
|
effect.run();
|
|
4615
4630
|
}
|
|
4616
4631
|
});
|
|
4632
|
+
}
|
|
4617
4633
|
}
|
|
4618
4634
|
track(target, type, key) {
|
|
4619
4635
|
if (!this.activeEffect)
|
|
@@ -4630,7 +4646,7 @@ define((function () { 'use strict';
|
|
|
4630
4646
|
}
|
|
4631
4647
|
trackEffect(dep) {
|
|
4632
4648
|
if (this.activeEffect) {
|
|
4633
|
-
|
|
4649
|
+
const shouldTrack = !dep.has(this.activeEffect);
|
|
4634
4650
|
if (shouldTrack) {
|
|
4635
4651
|
dep.add(this.activeEffect);
|
|
4636
4652
|
this.activeEffect.deps.push(dep);
|
|
@@ -4644,7 +4660,7 @@ define((function () { 'use strict';
|
|
|
4644
4660
|
return value;
|
|
4645
4661
|
}
|
|
4646
4662
|
set.add(value);
|
|
4647
|
-
for (
|
|
4663
|
+
for (const key in value) {
|
|
4648
4664
|
this.traversal(value[key], set);
|
|
4649
4665
|
}
|
|
4650
4666
|
return value;
|
|
@@ -4896,6 +4912,7 @@ define((function () { 'use strict';
|
|
|
4896
4912
|
const setInterval = (...args) => loadOrReturnBroker().setInterval(...args);
|
|
4897
4913
|
const setTimeout$1 = (...args) => loadOrReturnBroker().setTimeout(...args);
|
|
4898
4914
|
|
|
4915
|
+
/* eslint-disable */
|
|
4899
4916
|
// ==UserScript==
|
|
4900
4917
|
// @name ModuleRaid.js
|
|
4901
4918
|
// @namespace http://tampermonkey.net/
|
|
@@ -5313,28 +5330,26 @@ define((function () { 'use strict';
|
|
|
5313
5330
|
return $ele?.innerHTML?.trim() === "";
|
|
5314
5331
|
});
|
|
5315
5332
|
}
|
|
5316
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5317
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5333
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5318
5334
|
// contains 语法
|
|
5319
|
-
|
|
5320
|
-
|
|
5335
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5336
|
+
const text = textMatch[2];
|
|
5321
5337
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5322
5338
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5323
5339
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
5324
5340
|
});
|
|
5325
5341
|
}
|
|
5326
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5327
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5342
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5328
5343
|
// regexp 语法
|
|
5329
|
-
|
|
5344
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5330
5345
|
let pattern = textMatch[2];
|
|
5331
|
-
|
|
5346
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5332
5347
|
let flags = "";
|
|
5333
5348
|
if (flagMatch) {
|
|
5334
5349
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5335
5350
|
flags = flagMatch[3];
|
|
5336
5351
|
}
|
|
5337
|
-
|
|
5352
|
+
const regexp = new RegExp(pattern, flags);
|
|
5338
5353
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5339
5354
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5340
5355
|
return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
|
|
@@ -5376,11 +5391,10 @@ define((function () { 'use strict';
|
|
|
5376
5391
|
selector = selector.replace(/:empty$/gi, "");
|
|
5377
5392
|
return $el.matches(selector) && $el?.innerHTML?.trim() === "";
|
|
5378
5393
|
}
|
|
5379
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5380
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5394
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5381
5395
|
// contains 语法
|
|
5382
|
-
|
|
5383
|
-
|
|
5396
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5397
|
+
const text = textMatch[2];
|
|
5384
5398
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5385
5399
|
let content = $el?.textContent || $el?.innerText;
|
|
5386
5400
|
if (typeof content !== "string") {
|
|
@@ -5388,18 +5402,17 @@ define((function () { 'use strict';
|
|
|
5388
5402
|
}
|
|
5389
5403
|
return $el.matches(selector) && content?.includes(text);
|
|
5390
5404
|
}
|
|
5391
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5392
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5405
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5393
5406
|
// regexp 语法
|
|
5394
|
-
|
|
5407
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5395
5408
|
let pattern = textMatch[2];
|
|
5396
|
-
|
|
5409
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5397
5410
|
let flags = "";
|
|
5398
5411
|
if (flagMatch) {
|
|
5399
5412
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5400
5413
|
flags = flagMatch[3];
|
|
5401
5414
|
}
|
|
5402
|
-
|
|
5415
|
+
const regexp = new RegExp(pattern, flags);
|
|
5403
5416
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5404
5417
|
let content = $el?.textContent || $el?.innerText;
|
|
5405
5418
|
if (typeof content !== "string") {
|
|
@@ -5417,43 +5430,41 @@ define((function () { 'use strict';
|
|
|
5417
5430
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
5418
5431
|
// empty 语法
|
|
5419
5432
|
selector = selector.replace(/:empty$/gi, "");
|
|
5420
|
-
|
|
5433
|
+
const $closest = $el?.closest(selector);
|
|
5421
5434
|
if ($closest && $closest?.innerHTML?.trim() === "") {
|
|
5422
5435
|
return $closest;
|
|
5423
5436
|
}
|
|
5424
5437
|
return null;
|
|
5425
5438
|
}
|
|
5426
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5427
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5439
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5428
5440
|
// contains 语法
|
|
5429
|
-
|
|
5430
|
-
|
|
5441
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5442
|
+
const text = textMatch[2];
|
|
5431
5443
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5432
|
-
|
|
5444
|
+
const $closest = $el?.closest(selector);
|
|
5433
5445
|
if ($closest) {
|
|
5434
|
-
|
|
5446
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5435
5447
|
if (typeof content === "string" && content.includes(text)) {
|
|
5436
5448
|
return $closest;
|
|
5437
5449
|
}
|
|
5438
5450
|
}
|
|
5439
5451
|
return null;
|
|
5440
5452
|
}
|
|
5441
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5442
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5453
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5443
5454
|
// regexp 语法
|
|
5444
|
-
|
|
5455
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5445
5456
|
let pattern = textMatch[2];
|
|
5446
|
-
|
|
5457
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5447
5458
|
let flags = "";
|
|
5448
5459
|
if (flagMatch) {
|
|
5449
5460
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5450
5461
|
flags = flagMatch[3];
|
|
5451
5462
|
}
|
|
5452
|
-
|
|
5463
|
+
const regexp = new RegExp(pattern, flags);
|
|
5453
5464
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5454
|
-
|
|
5465
|
+
const $closest = $el?.closest(selector);
|
|
5455
5466
|
if ($closest) {
|
|
5456
|
-
|
|
5467
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5457
5468
|
if (typeof content === "string" && content.match(regexp)) {
|
|
5458
5469
|
return $closest;
|
|
5459
5470
|
}
|
|
@@ -5462,12 +5473,12 @@ define((function () { 'use strict';
|
|
|
5462
5473
|
}
|
|
5463
5474
|
else {
|
|
5464
5475
|
// 普通语法
|
|
5465
|
-
|
|
5476
|
+
const $closest = $el?.closest(selector);
|
|
5466
5477
|
return $closest;
|
|
5467
5478
|
}
|
|
5468
5479
|
}
|
|
5469
5480
|
}
|
|
5470
|
-
|
|
5481
|
+
const domUtils = new DOMUtils();
|
|
5471
5482
|
|
|
5472
5483
|
class Utils {
|
|
5473
5484
|
windowApi;
|
|
@@ -5475,12 +5486,12 @@ define((function () { 'use strict';
|
|
|
5475
5486
|
this.windowApi = new WindowApi(option);
|
|
5476
5487
|
}
|
|
5477
5488
|
/** 版本号 */
|
|
5478
|
-
version = "2025.9.
|
|
5489
|
+
version = "2025.9.14";
|
|
5479
5490
|
addStyle(cssText) {
|
|
5480
5491
|
if (typeof cssText !== "string") {
|
|
5481
5492
|
throw new Error("Utils.addStyle 参数cssText 必须为String类型");
|
|
5482
5493
|
}
|
|
5483
|
-
|
|
5494
|
+
const cssNode = this.windowApi.document.createElement("style");
|
|
5484
5495
|
cssNode.setAttribute("type", "text/css");
|
|
5485
5496
|
cssNode.innerHTML = cssText;
|
|
5486
5497
|
if (this.windowApi.document.head) {
|
|
@@ -5502,23 +5513,23 @@ define((function () { 'use strict';
|
|
|
5502
5513
|
return cssNode;
|
|
5503
5514
|
}
|
|
5504
5515
|
/**
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5516
|
+
* JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
|
|
5517
|
+
* @param target 目标数据
|
|
5518
|
+
* @param source 源数据
|
|
5519
|
+
* @param isAdd 是否可以追加键,默认false
|
|
5520
|
+
* @example
|
|
5521
|
+
* Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
|
|
5522
|
+
* >
|
|
5523
|
+
* {
|
|
5524
|
+
"1": 1,
|
|
5525
|
+
"2": {
|
|
5526
|
+
"3": 4
|
|
5527
|
+
}
|
|
5528
|
+
}
|
|
5529
|
+
*/
|
|
5519
5530
|
assign = commonUtil.assign.bind(commonUtil);
|
|
5520
5531
|
async asyncReplaceAll(string, pattern, asyncFn) {
|
|
5521
|
-
|
|
5532
|
+
const UtilsContext = this;
|
|
5522
5533
|
if (typeof string !== "string") {
|
|
5523
5534
|
throw new TypeError("string必须是字符串");
|
|
5524
5535
|
}
|
|
@@ -5590,18 +5601,18 @@ define((function () { 'use strict';
|
|
|
5590
5601
|
canvasElement.dispatchEvent(new MouseEvent("mouseup", eventInit));
|
|
5591
5602
|
}
|
|
5592
5603
|
checkUserClickInNode(element) {
|
|
5593
|
-
|
|
5604
|
+
const UtilsContext = this;
|
|
5594
5605
|
if (!UtilsContext.isDOM(element)) {
|
|
5595
5606
|
throw new Error("Utils.checkUserClickInNode 参数 targetNode 必须为 Element|Node 类型");
|
|
5596
5607
|
}
|
|
5597
|
-
|
|
5598
|
-
|
|
5599
|
-
|
|
5608
|
+
const clickEvent = UtilsContext.windowApi.window.event;
|
|
5609
|
+
const touchEvent = UtilsContext.windowApi.window.event;
|
|
5610
|
+
const $click = clickEvent?.composedPath()?.[0];
|
|
5600
5611
|
// 点击的x坐标
|
|
5601
|
-
|
|
5612
|
+
const clickPosX = clickEvent?.clientX != null ? clickEvent.clientX : touchEvent.touches[0].clientX;
|
|
5602
5613
|
// 点击的y坐标
|
|
5603
|
-
|
|
5604
|
-
|
|
5614
|
+
const clickPosY = clickEvent?.clientY != null ? clickEvent.clientY : touchEvent.touches[0].clientY;
|
|
5615
|
+
const {
|
|
5605
5616
|
/* 要检测的元素的相对屏幕的横坐标最左边 */
|
|
5606
5617
|
left: elementPosXLeft,
|
|
5607
5618
|
/* 要检测的元素的相对屏幕的横坐标最右边 */
|
|
@@ -5629,32 +5640,32 @@ define((function () { 'use strict';
|
|
|
5629
5640
|
* @param formData 需要clone的数据
|
|
5630
5641
|
*/
|
|
5631
5642
|
cloneFormData(formData, filterFn) {
|
|
5632
|
-
|
|
5633
|
-
|
|
5634
|
-
|
|
5643
|
+
const clonedFormData = new FormData();
|
|
5644
|
+
formData.forEach((value, key) => {
|
|
5645
|
+
const isFilter = typeof filterFn === "function" ? filterFn(key, value) : false;
|
|
5635
5646
|
if (typeof isFilter === "boolean" && isFilter) {
|
|
5636
|
-
|
|
5647
|
+
return;
|
|
5637
5648
|
}
|
|
5638
5649
|
clonedFormData.append(key, value);
|
|
5639
|
-
}
|
|
5650
|
+
});
|
|
5640
5651
|
return clonedFormData;
|
|
5641
5652
|
}
|
|
5642
5653
|
createOverload() {
|
|
5643
|
-
|
|
5654
|
+
const fnMap = new Map();
|
|
5644
5655
|
function overload(...args) {
|
|
5645
|
-
|
|
5646
|
-
|
|
5656
|
+
const key = args.map((it) => typeof it).join(",");
|
|
5657
|
+
const fn = fnMap.get(key);
|
|
5647
5658
|
if (!fn) {
|
|
5648
5659
|
throw new TypeError("没有找到对应的实现");
|
|
5649
5660
|
}
|
|
5650
5661
|
return fn.apply(this, args);
|
|
5651
5662
|
}
|
|
5652
5663
|
overload.addImpl = function (...args) {
|
|
5653
|
-
|
|
5664
|
+
const fn = args.pop();
|
|
5654
5665
|
if (typeof fn !== "function") {
|
|
5655
5666
|
throw new TypeError("最后一个参数必须是函数");
|
|
5656
5667
|
}
|
|
5657
|
-
|
|
5668
|
+
const key = args.join(",");
|
|
5658
5669
|
fnMap.set(key, fn);
|
|
5659
5670
|
};
|
|
5660
5671
|
return overload;
|
|
@@ -5671,7 +5682,7 @@ define((function () { 'use strict';
|
|
|
5671
5682
|
deepClone = commonUtil.deepClone.bind(commonUtil);
|
|
5672
5683
|
debounce(fn, delay = 0) {
|
|
5673
5684
|
let timer = null;
|
|
5674
|
-
|
|
5685
|
+
const UtilsContext = this;
|
|
5675
5686
|
return function (...args) {
|
|
5676
5687
|
UtilsContext.workerClearTimeout(timer);
|
|
5677
5688
|
timer = UtilsContext.workerSetTimeout(function () {
|
|
@@ -5680,7 +5691,7 @@ define((function () { 'use strict';
|
|
|
5680
5691
|
};
|
|
5681
5692
|
}
|
|
5682
5693
|
deleteParentNode(element, targetSelector) {
|
|
5683
|
-
|
|
5694
|
+
const UtilsContext = this;
|
|
5684
5695
|
if (element == null) {
|
|
5685
5696
|
return;
|
|
5686
5697
|
}
|
|
@@ -5691,7 +5702,7 @@ define((function () { 'use strict';
|
|
|
5691
5702
|
throw new Error("Utils.deleteParentNode 参数 targetSelector 必须为 string 类型");
|
|
5692
5703
|
}
|
|
5693
5704
|
let result = false;
|
|
5694
|
-
|
|
5705
|
+
const needRemoveDOM = domUtils.closest(element, targetSelector);
|
|
5695
5706
|
if (needRemoveDOM) {
|
|
5696
5707
|
needRemoveDOM.remove();
|
|
5697
5708
|
result = true;
|
|
@@ -5721,7 +5732,7 @@ define((function () { 'use strict';
|
|
|
5721
5732
|
eventNameList = [...eventName];
|
|
5722
5733
|
}
|
|
5723
5734
|
eventNameList.forEach((_eventName_) => {
|
|
5724
|
-
|
|
5735
|
+
const event = new Event(_eventName_);
|
|
5725
5736
|
if (details) {
|
|
5726
5737
|
Object.assign(event, details);
|
|
5727
5738
|
}
|
|
@@ -5729,7 +5740,7 @@ define((function () { 'use strict';
|
|
|
5729
5740
|
});
|
|
5730
5741
|
}
|
|
5731
5742
|
downloadBase64(base64Data, fileName, isIFrame = false) {
|
|
5732
|
-
|
|
5743
|
+
const UtilsContext = this;
|
|
5733
5744
|
if (typeof base64Data !== "string") {
|
|
5734
5745
|
throw new Error("Utils.downloadBase64 参数 base64Data 必须为 string 类型");
|
|
5735
5746
|
}
|
|
@@ -5761,7 +5772,7 @@ define((function () { 'use strict';
|
|
|
5761
5772
|
let strFound;
|
|
5762
5773
|
if (this.windowApi.globalThis.find) {
|
|
5763
5774
|
/* CODE FOR BROWSERS THAT SUPPORT window.find */
|
|
5764
|
-
|
|
5775
|
+
const windowFind = this.windowApi.self.find;
|
|
5765
5776
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
5766
5777
|
if (strFound && this.windowApi.self.getSelection && !this.windowApi.self.getSelection().anchorNode) {
|
|
5767
5778
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
@@ -5795,19 +5806,19 @@ define((function () { 'use strict';
|
|
|
5795
5806
|
return strFound ? true : false;
|
|
5796
5807
|
}
|
|
5797
5808
|
*findElementsWithText(element, text, filter) {
|
|
5798
|
-
|
|
5809
|
+
const that = this;
|
|
5799
5810
|
if (element.outerHTML.includes(text)) {
|
|
5800
5811
|
if (element.children.length === 0) {
|
|
5801
|
-
|
|
5812
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5802
5813
|
if (!filterResult) {
|
|
5803
5814
|
yield element;
|
|
5804
5815
|
}
|
|
5805
5816
|
}
|
|
5806
5817
|
else {
|
|
5807
|
-
|
|
5808
|
-
for (
|
|
5818
|
+
const textElement = Array.from(element.childNodes).filter((ele) => ele.nodeType === Node.TEXT_NODE);
|
|
5819
|
+
for (const $child of textElement) {
|
|
5809
5820
|
if ($child.textContent.includes(text)) {
|
|
5810
|
-
|
|
5821
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5811
5822
|
if (!filterResult) {
|
|
5812
5823
|
yield $child;
|
|
5813
5824
|
}
|
|
@@ -5816,7 +5827,7 @@ define((function () { 'use strict';
|
|
|
5816
5827
|
}
|
|
5817
5828
|
}
|
|
5818
5829
|
for (let index = 0; index < element.children.length; index++) {
|
|
5819
|
-
|
|
5830
|
+
const $child = element.children[index];
|
|
5820
5831
|
yield* that.findElementsWithText($child, text, filter);
|
|
5821
5832
|
}
|
|
5822
5833
|
}
|
|
@@ -5830,8 +5841,8 @@ define((function () { 'use strict';
|
|
|
5830
5841
|
findVisibleElement(element) {
|
|
5831
5842
|
let currentElement = element;
|
|
5832
5843
|
while (currentElement) {
|
|
5833
|
-
|
|
5834
|
-
if (
|
|
5844
|
+
const elementRect = currentElement.getBoundingClientRect();
|
|
5845
|
+
if (elementRect.length) {
|
|
5835
5846
|
return currentElement;
|
|
5836
5847
|
}
|
|
5837
5848
|
currentElement = currentElement.parentElement;
|
|
@@ -5845,7 +5856,7 @@ define((function () { 'use strict';
|
|
|
5845
5856
|
}
|
|
5846
5857
|
let result = 0;
|
|
5847
5858
|
let resultType = "KB";
|
|
5848
|
-
|
|
5859
|
+
const sizeData = {};
|
|
5849
5860
|
sizeData.B = 1;
|
|
5850
5861
|
sizeData.KB = 1024;
|
|
5851
5862
|
sizeData.MB = sizeData.KB * sizeData.KB;
|
|
@@ -5858,7 +5869,7 @@ define((function () { 'use strict';
|
|
|
5858
5869
|
sizeData.BB = sizeData.YB * sizeData.KB;
|
|
5859
5870
|
sizeData.NB = sizeData.BB * sizeData.KB;
|
|
5860
5871
|
sizeData.DB = sizeData.NB * sizeData.KB;
|
|
5861
|
-
for (
|
|
5872
|
+
for (const key in sizeData) {
|
|
5862
5873
|
result = byteSize / sizeData[key];
|
|
5863
5874
|
resultType = key;
|
|
5864
5875
|
if (sizeData.KB >= result) {
|
|
@@ -5871,7 +5882,7 @@ define((function () { 'use strict';
|
|
|
5871
5882
|
}
|
|
5872
5883
|
getNodeListValue(...args) {
|
|
5873
5884
|
let resultArray = [];
|
|
5874
|
-
for (
|
|
5885
|
+
for (const arg of args) {
|
|
5875
5886
|
let value = arg;
|
|
5876
5887
|
if (typeof arg === "function") {
|
|
5877
5888
|
/* 方法 */
|
|
@@ -5886,7 +5897,7 @@ define((function () { 'use strict';
|
|
|
5886
5897
|
}
|
|
5887
5898
|
getNonNullValue(...args) {
|
|
5888
5899
|
let resultValue = args[args.length - 1];
|
|
5889
|
-
|
|
5900
|
+
const UtilsContext = this;
|
|
5890
5901
|
for (const argValue of args) {
|
|
5891
5902
|
if (UtilsContext.isNotNull(argValue)) {
|
|
5892
5903
|
resultValue = argValue;
|
|
@@ -5896,7 +5907,7 @@ define((function () { 'use strict';
|
|
|
5896
5907
|
return resultValue;
|
|
5897
5908
|
}
|
|
5898
5909
|
formatTime(text = new Date(), formatType = "yyyy-MM-dd HH:mm:ss") {
|
|
5899
|
-
|
|
5910
|
+
const time = text == null ? new Date() : new Date(text);
|
|
5900
5911
|
/**
|
|
5901
5912
|
* 校验时间补0
|
|
5902
5913
|
* @param timeNum
|
|
@@ -5904,7 +5915,7 @@ define((function () { 'use strict';
|
|
|
5904
5915
|
*/
|
|
5905
5916
|
function checkTime(timeNum) {
|
|
5906
5917
|
if (timeNum < 10)
|
|
5907
|
-
return
|
|
5918
|
+
return `0${timeNum}`;
|
|
5908
5919
|
return timeNum;
|
|
5909
5920
|
}
|
|
5910
5921
|
/**
|
|
@@ -5915,7 +5926,7 @@ define((function () { 'use strict';
|
|
|
5915
5926
|
function timeSystemChange(hourNum) {
|
|
5916
5927
|
return hourNum > 12 ? hourNum - 12 : hourNum;
|
|
5917
5928
|
}
|
|
5918
|
-
|
|
5929
|
+
const timeRegexp = {
|
|
5919
5930
|
yyyy: time.getFullYear(),
|
|
5920
5931
|
/* 年 */
|
|
5921
5932
|
MM: checkTime(time.getMonth() + 1),
|
|
@@ -5932,7 +5943,7 @@ define((function () { 'use strict';
|
|
|
5932
5943
|
/* 秒 */
|
|
5933
5944
|
};
|
|
5934
5945
|
Object.keys(timeRegexp).forEach(function (key) {
|
|
5935
|
-
|
|
5946
|
+
const replaecRegexp = new RegExp(key, "g");
|
|
5936
5947
|
formatType = formatType.replace(replaecRegexp, timeRegexp[key]);
|
|
5937
5948
|
});
|
|
5938
5949
|
return formatType;
|
|
@@ -5944,12 +5955,12 @@ define((function () { 'use strict';
|
|
|
5944
5955
|
}
|
|
5945
5956
|
if (text.length === 8) {
|
|
5946
5957
|
/* 该字符串只有时分秒 */
|
|
5947
|
-
|
|
5948
|
-
text = today.getFullYear()
|
|
5958
|
+
const today = new Date();
|
|
5959
|
+
text = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()} ${text}`;
|
|
5949
5960
|
}
|
|
5950
5961
|
text = text.substring(0, 19);
|
|
5951
5962
|
text = text.replace(/-/g, "/");
|
|
5952
|
-
|
|
5963
|
+
const timestamp = new Date(text).getTime();
|
|
5953
5964
|
return timestamp;
|
|
5954
5965
|
}
|
|
5955
5966
|
/**
|
|
@@ -5999,16 +6010,16 @@ define((function () { 'use strict';
|
|
|
5999
6010
|
if (timestamp2.toString().length === 10) {
|
|
6000
6011
|
timestamp2 = timestamp2 * 1000;
|
|
6001
6012
|
}
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6013
|
+
const smallTimeStamp = timestamp1 > timestamp2 ? timestamp2 : timestamp1;
|
|
6014
|
+
const bigTimeStamp = timestamp1 > timestamp2 ? timestamp1 : timestamp2;
|
|
6015
|
+
const oneSecond = 1000; /* 一秒的毫秒数 */
|
|
6016
|
+
const oneMinute = 60 * oneSecond; /* 一分钟的毫秒数 */
|
|
6017
|
+
const oneHour = 60 * oneMinute; /* 一小时的毫秒数 */
|
|
6018
|
+
const oneDay = 24 * oneHour; /* 一天的毫秒数 */
|
|
6019
|
+
const oneMonth = 30 * oneDay; /* 一个月的毫秒数(30天) */
|
|
6020
|
+
const oneYear = 12 * oneMonth; /* 一年的毫秒数 */
|
|
6021
|
+
const bigDate = new Date(bigTimeStamp);
|
|
6022
|
+
const smallDate = new Date(smallTimeStamp);
|
|
6012
6023
|
let remainderValue = 1;
|
|
6013
6024
|
if (type === "年") {
|
|
6014
6025
|
remainderValue = oneYear;
|
|
@@ -6030,30 +6041,30 @@ define((function () { 'use strict';
|
|
|
6030
6041
|
}
|
|
6031
6042
|
let diffValue = Math.round(Math.abs((bigDate - smallDate) / remainderValue));
|
|
6032
6043
|
if (type === "auto") {
|
|
6033
|
-
|
|
6044
|
+
const timeDifference = bigTimeStamp - smallTimeStamp;
|
|
6034
6045
|
diffValue = Math.floor(timeDifference / (24 * 3600 * 1000));
|
|
6035
6046
|
if (diffValue > 0) {
|
|
6036
|
-
diffValue = diffValue
|
|
6047
|
+
diffValue = `${diffValue}天`;
|
|
6037
6048
|
}
|
|
6038
6049
|
else {
|
|
6039
6050
|
/* 计算出小时数 */
|
|
6040
|
-
|
|
6041
|
-
|
|
6051
|
+
const leave1 = timeDifference % (24 * 3600 * 1000); /* 计算天数后剩余的毫秒数 */
|
|
6052
|
+
const hours = Math.floor(leave1 / (3600 * 1000));
|
|
6042
6053
|
if (hours > 0) {
|
|
6043
|
-
diffValue = hours
|
|
6054
|
+
diffValue = `${hours}小时`;
|
|
6044
6055
|
}
|
|
6045
6056
|
else {
|
|
6046
6057
|
/* 计算相差分钟数 */
|
|
6047
|
-
|
|
6048
|
-
|
|
6058
|
+
const leave2 = leave1 % (3600 * 1000); /* 计算小时数后剩余的毫秒数 */
|
|
6059
|
+
const minutes = Math.floor(leave2 / (60 * 1000));
|
|
6049
6060
|
if (minutes > 0) {
|
|
6050
|
-
diffValue = minutes
|
|
6061
|
+
diffValue = `${minutes}分钟`;
|
|
6051
6062
|
}
|
|
6052
6063
|
else {
|
|
6053
6064
|
/* 计算相差秒数 */
|
|
6054
|
-
|
|
6055
|
-
|
|
6056
|
-
diffValue = seconds
|
|
6065
|
+
const leave3 = leave2 % (60 * 1000); /* 计算分钟数后剩余的毫秒数 */
|
|
6066
|
+
const seconds = Math.round(leave3 / 1000);
|
|
6067
|
+
diffValue = `${seconds}秒`;
|
|
6057
6068
|
}
|
|
6058
6069
|
}
|
|
6059
6070
|
}
|
|
@@ -6061,14 +6072,14 @@ define((function () { 'use strict';
|
|
|
6061
6072
|
return diffValue;
|
|
6062
6073
|
}
|
|
6063
6074
|
getElementSelector(element) {
|
|
6064
|
-
|
|
6075
|
+
const UtilsContext = this;
|
|
6065
6076
|
if (!element)
|
|
6066
6077
|
return void 0;
|
|
6067
6078
|
if (!element.parentElement)
|
|
6068
6079
|
return void 0;
|
|
6069
6080
|
/* 如果元素有id属性,则直接返回id选择器 */
|
|
6070
6081
|
if (element.id)
|
|
6071
|
-
return
|
|
6082
|
+
return `#${element.id}`;
|
|
6072
6083
|
/* 递归地获取父元素的选择器 */
|
|
6073
6084
|
let selector = UtilsContext.getElementSelector(element.parentElement);
|
|
6074
6085
|
if (!selector) {
|
|
@@ -6076,11 +6087,11 @@ define((function () { 'use strict';
|
|
|
6076
6087
|
}
|
|
6077
6088
|
/* 如果有多个相同类型的兄弟元素,则需要添加索引 */
|
|
6078
6089
|
if (element.parentElement.querySelectorAll(element.tagName).length > 1) {
|
|
6079
|
-
|
|
6080
|
-
selector +=
|
|
6090
|
+
const index = Array.prototype.indexOf.call(element.parentElement.children, element) + 1;
|
|
6091
|
+
selector += ` > ${element.tagName.toLowerCase()}:nth-child(${index})`;
|
|
6081
6092
|
}
|
|
6082
6093
|
else {
|
|
6083
|
-
selector +=
|
|
6094
|
+
selector += ` > ${element.tagName.toLowerCase()}`;
|
|
6084
6095
|
}
|
|
6085
6096
|
return selector;
|
|
6086
6097
|
}
|
|
@@ -6091,15 +6102,15 @@ define((function () { 'use strict';
|
|
|
6091
6102
|
* > 2
|
|
6092
6103
|
*/
|
|
6093
6104
|
getMaxValue(...args) {
|
|
6094
|
-
|
|
6105
|
+
const result = [...args];
|
|
6095
6106
|
let newResult = [];
|
|
6096
6107
|
if (result.length === 0) {
|
|
6097
6108
|
return void 0;
|
|
6098
6109
|
}
|
|
6099
6110
|
if (result.length > 1) {
|
|
6100
6111
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6101
|
-
|
|
6102
|
-
|
|
6112
|
+
const data = result[0];
|
|
6113
|
+
const handleDataFunc = result[1];
|
|
6103
6114
|
Object.keys(data).forEach((keyName) => {
|
|
6104
6115
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6105
6116
|
});
|
|
@@ -6147,7 +6158,7 @@ define((function () { 'use strict';
|
|
|
6147
6158
|
*/
|
|
6148
6159
|
function queryMaxZIndex($ele) {
|
|
6149
6160
|
if (typeof ignoreCallBack === "function") {
|
|
6150
|
-
|
|
6161
|
+
const ignoreResult = ignoreCallBack($ele);
|
|
6151
6162
|
if (typeof ignoreResult === "boolean" && !ignoreResult) {
|
|
6152
6163
|
return;
|
|
6153
6164
|
}
|
|
@@ -6156,7 +6167,7 @@ define((function () { 'use strict';
|
|
|
6156
6167
|
const nodeStyle = UtilsContext.windowApi.window.getComputedStyle($ele);
|
|
6157
6168
|
/* 不对position为static和display为none的元素进行获取它们的z-index */
|
|
6158
6169
|
if (isVisibleNode(nodeStyle)) {
|
|
6159
|
-
|
|
6170
|
+
const nodeZIndex = parseInt(nodeStyle.zIndex);
|
|
6160
6171
|
if (!isNaN(nodeZIndex)) {
|
|
6161
6172
|
if (nodeZIndex > zIndex) {
|
|
6162
6173
|
// 赋值到全局
|
|
@@ -6172,7 +6183,7 @@ define((function () { 'use strict';
|
|
|
6172
6183
|
}
|
|
6173
6184
|
}
|
|
6174
6185
|
}
|
|
6175
|
-
target.querySelectorAll("*").forEach(($ele
|
|
6186
|
+
target.querySelectorAll("*").forEach(($ele) => {
|
|
6176
6187
|
queryMaxZIndex($ele);
|
|
6177
6188
|
});
|
|
6178
6189
|
zIndex += deviation;
|
|
@@ -6189,15 +6200,15 @@ define((function () { 'use strict';
|
|
|
6189
6200
|
return this.getMaxZIndexNodeInfo(deviation, target, ignoreCallBack).zIndex;
|
|
6190
6201
|
}
|
|
6191
6202
|
getMinValue(...args) {
|
|
6192
|
-
|
|
6203
|
+
const result = [...args];
|
|
6193
6204
|
let newResult = [];
|
|
6194
6205
|
if (result.length === 0) {
|
|
6195
6206
|
return void 0;
|
|
6196
6207
|
}
|
|
6197
6208
|
if (result.length > 1) {
|
|
6198
6209
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6199
|
-
|
|
6200
|
-
|
|
6210
|
+
const data = result[0];
|
|
6211
|
+
const handleDataFunc = result[1];
|
|
6201
6212
|
Object.keys(data).forEach((keyName) => {
|
|
6202
6213
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6203
6214
|
});
|
|
@@ -6227,8 +6238,8 @@ define((function () { 'use strict';
|
|
|
6227
6238
|
* > 'Mozilla/5.0 (Linux; Android 10; MI 13 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.3490.40 Mobile Safari/537.36'
|
|
6228
6239
|
**/
|
|
6229
6240
|
getRandomAndroidUA() {
|
|
6230
|
-
|
|
6231
|
-
|
|
6241
|
+
const UtilsContext = this;
|
|
6242
|
+
const mobileNameList = [
|
|
6232
6243
|
"LDN-LX3",
|
|
6233
6244
|
"RNE-L03",
|
|
6234
6245
|
"ASUS_X00ID Build/NMF26F",
|
|
@@ -6245,14 +6256,14 @@ define((function () { 'use strict';
|
|
|
6245
6256
|
"MI 13 Build/OPR1.170623.027; wv",
|
|
6246
6257
|
];
|
|
6247
6258
|
/* 安卓版本 */
|
|
6248
|
-
|
|
6259
|
+
const androidVersion = UtilsContext.getRandomValue(12, 14);
|
|
6249
6260
|
/* 手机型号 */
|
|
6250
|
-
|
|
6261
|
+
const randomMobile = UtilsContext.getRandomValue(mobileNameList);
|
|
6251
6262
|
/* chrome大版本号 */
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6263
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6264
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6265
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6266
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6256
6267
|
return `Mozilla/5.0 (Linux; Android ${androidVersion}; ${randomMobile}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Mobile Safari/537.36`;
|
|
6257
6268
|
}
|
|
6258
6269
|
/**
|
|
@@ -6274,20 +6285,20 @@ define((function () { 'use strict';
|
|
|
6274
6285
|
* > 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5068.19 Safari/537.36'
|
|
6275
6286
|
**/
|
|
6276
6287
|
getRandomPCUA() {
|
|
6277
|
-
|
|
6288
|
+
const UtilsContext = this;
|
|
6278
6289
|
/* chrome大版本号 */
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6290
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6291
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6292
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6293
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6283
6294
|
return `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Safari/537.36`;
|
|
6284
6295
|
}
|
|
6285
6296
|
getRandomValue(...args) {
|
|
6286
|
-
|
|
6297
|
+
const result = [...args];
|
|
6287
6298
|
if (result.length > 1) {
|
|
6288
6299
|
if (result.length === 2 && typeof result[0] === "number" && typeof result[1] === "number") {
|
|
6289
|
-
|
|
6290
|
-
|
|
6300
|
+
const leftNumber = result[0] > result[1] ? result[1] : result[0];
|
|
6301
|
+
const rightNumber = result[0] > result[1] ? result[0] : result[1];
|
|
6291
6302
|
return Math.round(Math.random() * (rightNumber - leftNumber)) + leftNumber;
|
|
6292
6303
|
}
|
|
6293
6304
|
else {
|
|
@@ -6295,12 +6306,12 @@ define((function () { 'use strict';
|
|
|
6295
6306
|
}
|
|
6296
6307
|
}
|
|
6297
6308
|
else if (result.length === 1) {
|
|
6298
|
-
|
|
6309
|
+
const paramData = result[0];
|
|
6299
6310
|
if (Array.isArray(paramData)) {
|
|
6300
6311
|
return paramData[Math.floor(Math.random() * paramData.length)];
|
|
6301
6312
|
}
|
|
6302
6313
|
else if (typeof paramData === "object" && Object.keys(paramData).length > 0) {
|
|
6303
|
-
|
|
6314
|
+
const paramObjDataKey = Object.keys(paramData)[Math.floor(Math.random() * Object.keys(paramData).length)];
|
|
6304
6315
|
return paramData[paramObjDataKey];
|
|
6305
6316
|
}
|
|
6306
6317
|
else {
|
|
@@ -6316,7 +6327,7 @@ define((function () { 'use strict';
|
|
|
6316
6327
|
* Utils.getReactObj(document.querySelector("input"))?.reactProps?.onChange({target:{value:"123"}});
|
|
6317
6328
|
*/
|
|
6318
6329
|
getReactObj(element) {
|
|
6319
|
-
|
|
6330
|
+
const result = {};
|
|
6320
6331
|
if (element == null) {
|
|
6321
6332
|
return result;
|
|
6322
6333
|
}
|
|
@@ -6342,9 +6353,9 @@ define((function () { 'use strict';
|
|
|
6342
6353
|
if (typeof target !== "object") {
|
|
6343
6354
|
throw new TypeError("target不是一个对象");
|
|
6344
6355
|
}
|
|
6345
|
-
|
|
6356
|
+
const objectsSymbols = Object.getOwnPropertySymbols(target);
|
|
6346
6357
|
if (typeof keyName === "string") {
|
|
6347
|
-
|
|
6358
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6348
6359
|
return key.toString() === keyName;
|
|
6349
6360
|
});
|
|
6350
6361
|
if (findSymbol) {
|
|
@@ -6352,7 +6363,7 @@ define((function () { 'use strict';
|
|
|
6352
6363
|
}
|
|
6353
6364
|
}
|
|
6354
6365
|
else if (typeof keyName === "symbol") {
|
|
6355
|
-
|
|
6366
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6356
6367
|
return key === keyName;
|
|
6357
6368
|
});
|
|
6358
6369
|
if (findSymbol) {
|
|
@@ -6360,7 +6371,7 @@ define((function () { 'use strict';
|
|
|
6360
6371
|
}
|
|
6361
6372
|
}
|
|
6362
6373
|
else {
|
|
6363
|
-
|
|
6374
|
+
const result = {};
|
|
6364
6375
|
objectsSymbols.forEach((item) => {
|
|
6365
6376
|
result[item] = target[item];
|
|
6366
6377
|
});
|
|
@@ -6375,12 +6386,12 @@ define((function () { 'use strict';
|
|
|
6375
6386
|
* > 12
|
|
6376
6387
|
*/
|
|
6377
6388
|
getTextLength(text) {
|
|
6378
|
-
|
|
6379
|
-
|
|
6389
|
+
const encoder = new TextEncoder();
|
|
6390
|
+
const bytes = encoder.encode(text);
|
|
6380
6391
|
return bytes.length;
|
|
6381
6392
|
}
|
|
6382
6393
|
getTextStorageSize(text, addType = true) {
|
|
6383
|
-
|
|
6394
|
+
const UtilsContext = this;
|
|
6384
6395
|
return UtilsContext.formatByteToSize(UtilsContext.getTextLength(text), addType);
|
|
6385
6396
|
}
|
|
6386
6397
|
getThunderUrl(url) {
|
|
@@ -6393,88 +6404,75 @@ define((function () { 'use strict';
|
|
|
6393
6404
|
if (url.trim() === "") {
|
|
6394
6405
|
throw new TypeError("url不能为空字符串或纯空格");
|
|
6395
6406
|
}
|
|
6396
|
-
return `thunder://${this.windowApi.globalThis.btoa(
|
|
6407
|
+
return `thunder://${this.windowApi.globalThis.btoa(`AA${url}ZZ`)}`;
|
|
6397
6408
|
}
|
|
6398
6409
|
/**
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
|
|
6420
|
-
|
|
6421
|
-
|
|
6422
|
-
|
|
6423
|
-
|
|
6424
|
-
|
|
6410
|
+
* 对于GM_cookie的兼容写法,当无法使用GM_cookie时可以使用这个,但是并不完全兼容,有些写不出来且限制了httponly是无法访问的
|
|
6411
|
+
* @example
|
|
6412
|
+
let GM_cookie = new Utils.GM_Cookie();
|
|
6413
|
+
GM_cookie.list({name:"xxx_cookie_xxx"},function(cookies,error){
|
|
6414
|
+
if (!error) {
|
|
6415
|
+
console.log(cookies);
|
|
6416
|
+
console.log(cookies.value);
|
|
6417
|
+
} else {
|
|
6418
|
+
console.error(error);
|
|
6419
|
+
}
|
|
6420
|
+
});
|
|
6421
|
+
GM_cookie.set({name:"xxx_cookie_test_xxx",value:"这是Cookie测试值"},function(error){
|
|
6422
|
+
if (error) {
|
|
6423
|
+
console.error(error);
|
|
6424
|
+
} else {
|
|
6425
|
+
console.log('Cookie set successfully.');
|
|
6426
|
+
}
|
|
6427
|
+
})
|
|
6428
|
+
GM_cookie.delete({name:"xxx_cookie_test_xxx"},function(error){
|
|
6429
|
+
if (error) {
|
|
6430
|
+
console.error(error);
|
|
6431
|
+
} else {
|
|
6432
|
+
console.log('Cookie set successfully.');
|
|
6433
|
+
}
|
|
6434
|
+
})
|
|
6435
|
+
**/
|
|
6425
6436
|
GM_Cookie = UtilsGMCookie;
|
|
6426
6437
|
/**
|
|
6427
|
-
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6438
|
+
* 注册油猴菜单,要求本地存储的键名不能存在其它键名`GM_Menu_Local_Map`会冲突/覆盖
|
|
6439
|
+
* @example
|
|
6440
|
+
let GM_Menu = new Utils.GM_Menu({
|
|
6441
|
+
data: [
|
|
6442
|
+
{
|
|
6443
|
+
menu_key: "menu_key",
|
|
6444
|
+
text: "测试按钮",
|
|
6445
|
+
enable: true,
|
|
6446
|
+
accessKey: "a",
|
|
6447
|
+
autoClose: false,
|
|
6448
|
+
showText(text, enable) {
|
|
6449
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6450
|
+
},
|
|
6451
|
+
callback(data) {
|
|
6452
|
+
console.log("点击菜单,值修改为", data.enable);
|
|
6453
|
+
},
|
|
6439
6454
|
},
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
// 添加键为menu_key2的菜单项
|
|
6462
|
-
GM_Menu.add({
|
|
6463
|
-
key:"menu_key2",
|
|
6464
|
-
text: "测试按钮2",
|
|
6465
|
-
enable: false,
|
|
6466
|
-
showText(text,enable){
|
|
6467
|
-
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6468
|
-
},
|
|
6469
|
-
callback(data){
|
|
6470
|
-
console.log("点击菜单,值修改为",data.enable);
|
|
6471
|
-
}
|
|
6472
|
-
});
|
|
6473
|
-
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6474
|
-
GM_Menu.add([
|
|
6475
|
-
{
|
|
6476
|
-
key:"menu_key3",
|
|
6477
|
-
text: "测试按钮3",
|
|
6455
|
+
],
|
|
6456
|
+
autoReload: false,
|
|
6457
|
+
GM_getValue,
|
|
6458
|
+
GM_setValue,
|
|
6459
|
+
GM_registerMenuCommand,
|
|
6460
|
+
GM_unregisterMenuCommand,
|
|
6461
|
+
});
|
|
6462
|
+
|
|
6463
|
+
|
|
6464
|
+
// 获取某个菜单项的值
|
|
6465
|
+
GM_Menu.get("menu_key");
|
|
6466
|
+
> true
|
|
6467
|
+
|
|
6468
|
+
// 获取某个菜单项的开启/关闭后显示的文本
|
|
6469
|
+
GM_Menu.getShowTextValue("menu_key");
|
|
6470
|
+
> √测试按钮
|
|
6471
|
+
|
|
6472
|
+
// 添加键为menu_key2的菜单项
|
|
6473
|
+
GM_Menu.add({
|
|
6474
|
+
key:"menu_key2",
|
|
6475
|
+
text: "测试按钮2",
|
|
6478
6476
|
enable: false,
|
|
6479
6477
|
showText(text,enable){
|
|
6480
6478
|
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
@@ -6482,152 +6480,165 @@ define((function () { 'use strict';
|
|
|
6482
6480
|
callback(data){
|
|
6483
6481
|
console.log("点击菜单,值修改为",data.enable);
|
|
6484
6482
|
}
|
|
6485
|
-
}
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
|
|
6490
|
-
|
|
6491
|
-
|
|
6483
|
+
});
|
|
6484
|
+
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6485
|
+
GM_Menu.add([
|
|
6486
|
+
{
|
|
6487
|
+
key:"menu_key3",
|
|
6488
|
+
text: "测试按钮3",
|
|
6489
|
+
enable: false,
|
|
6490
|
+
showText(text,enable){
|
|
6491
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6492
|
+
},
|
|
6493
|
+
callback(data){
|
|
6494
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6495
|
+
}
|
|
6492
6496
|
},
|
|
6493
|
-
|
|
6494
|
-
|
|
6497
|
+
{
|
|
6498
|
+
key:"menu_key4",
|
|
6499
|
+
text: "测试按钮4",
|
|
6500
|
+
enable: false,
|
|
6501
|
+
showText(text,enable){
|
|
6502
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6503
|
+
},
|
|
6504
|
+
callback(data){
|
|
6505
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6506
|
+
}
|
|
6495
6507
|
}
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6508
|
+
]);
|
|
6509
|
+
|
|
6510
|
+
// 更新键为menu_key的显示文字和点击回调
|
|
6511
|
+
GM_Menu.update({
|
|
6512
|
+
menu_key:{
|
|
6513
|
+
text: "更新后的测试按钮",
|
|
6514
|
+
enable: true,
|
|
6515
|
+
showText(text,enable){
|
|
6516
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6517
|
+
},
|
|
6518
|
+
callback(data){
|
|
6519
|
+
console.log("点击菜单更新后的测试按钮,新值修改为",data.enable);
|
|
6520
|
+
}
|
|
6509
6521
|
}
|
|
6510
|
-
}
|
|
6511
|
-
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
**/
|
|
6522
|
+
});
|
|
6523
|
+
|
|
6524
|
+
// 删除键为menu_key的菜单
|
|
6525
|
+
GM_Menu.delete("menu_key");
|
|
6526
|
+
**/
|
|
6516
6527
|
GM_Menu = GMMenu;
|
|
6517
6528
|
/**
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6529
|
+
* 基于Function prototype,能够勾住和释放任何函数
|
|
6530
|
+
*
|
|
6531
|
+
* .hook
|
|
6532
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6533
|
+
* + hookFunc {string} 替换的hook函数
|
|
6534
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6535
|
+
* + methodName {string} 匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}
|
|
6536
|
+
*
|
|
6537
|
+
* .unhook
|
|
6538
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6539
|
+
* + funcName {string} 被Hook的函数名称
|
|
6540
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6541
|
+
* @example
|
|
6542
|
+
let hook = new Utils.Hooks();
|
|
6543
|
+
hook.initEnv();
|
|
6544
|
+
function myFunction(){
|
|
6545
|
+
console.log("我自己需要执行的函数");
|
|
6546
|
+
}
|
|
6547
|
+
function testFunction(){
|
|
6548
|
+
console.log("正常执行的函数");
|
|
6549
|
+
}
|
|
6550
|
+
testFunction.hook(testFunction,myFunction,window);
|
|
6551
|
+
**/
|
|
6541
6552
|
Hooks = Hooks;
|
|
6542
6553
|
/**
|
|
6543
|
-
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6568
|
-
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
|
|
6572
|
-
|
|
6573
|
-
|
|
6574
|
-
|
|
6575
|
-
|
|
6576
|
-
|
|
6577
|
-
|
|
6578
|
-
|
|
6579
|
-
|
|
6554
|
+
* 为减少代码量和回调,把GM_xmlhttpRequest封装
|
|
6555
|
+
* 文档地址: https://www.tampermonkey.net/documentation.php?ext=iikm
|
|
6556
|
+
* 其中onloadstart、onprogress、onreadystatechange是回调形式,onabort、ontimeout、onerror可以设置全局回调函数
|
|
6557
|
+
* @param _GM_xmlHttpRequest_ 油猴中的GM_xmlhttpRequest
|
|
6558
|
+
* @example
|
|
6559
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6560
|
+
let postResp = await httpx.post({
|
|
6561
|
+
url:url,
|
|
6562
|
+
data:JSON.stringify({
|
|
6563
|
+
test:1
|
|
6564
|
+
}),
|
|
6565
|
+
timeout: 5000
|
|
6566
|
+
});
|
|
6567
|
+
console.log(postResp);
|
|
6568
|
+
> {
|
|
6569
|
+
status: true,
|
|
6570
|
+
data: {responseText: "...", response: xxx,...},
|
|
6571
|
+
msg: "请求完毕",
|
|
6572
|
+
type: "onload",
|
|
6573
|
+
}
|
|
6574
|
+
|
|
6575
|
+
if(postResp === "onload" && postResp.status){
|
|
6576
|
+
// onload
|
|
6577
|
+
}else if(postResp === "ontimeout"){
|
|
6578
|
+
// ontimeout
|
|
6579
|
+
}
|
|
6580
|
+
* @example
|
|
6581
|
+
// 也可以先配置全局参数
|
|
6582
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6583
|
+
httpx.config({
|
|
6584
|
+
timeout: 5000,
|
|
6585
|
+
async: false,
|
|
6586
|
+
responseType: "html",
|
|
6587
|
+
redirect: "follow",
|
|
6588
|
+
})
|
|
6589
|
+
// 优先级为 默认details < 全局details < 单独的details
|
|
6590
|
+
*/
|
|
6580
6591
|
Httpx = Httpx;
|
|
6581
6592
|
/**
|
|
6582
|
-
|
|
6583
|
-
|
|
6584
|
-
|
|
6585
|
-
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6604
|
-
|
|
6605
|
-
|
|
6593
|
+
* 浏览器端的indexedDB操作封装
|
|
6594
|
+
* @example
|
|
6595
|
+
let db = new Utils.indexedDB('web_DB', 'nav_text')
|
|
6596
|
+
let data = {name:'管理员', roleId: 1, type: 1};
|
|
6597
|
+
db.save('list',data).then((resolve)=>{
|
|
6598
|
+
console.log(resolve,'存储成功')
|
|
6599
|
+
})
|
|
6600
|
+
|
|
6601
|
+
db.get('list').then((resolve)=>{
|
|
6602
|
+
console.log(resolve,'查询成功')
|
|
6603
|
+
})
|
|
6604
|
+
|
|
6605
|
+
db.getPaging('list',20,10).then((resolve)=>{
|
|
6606
|
+
console.log(resolve,'查询分页偏移第20,一共10行成功');
|
|
6607
|
+
})
|
|
6608
|
+
|
|
6609
|
+
db.delete('list').then(resolve=>{
|
|
6610
|
+
console.log(resolve,'删除成功---->>>>>>name')
|
|
6611
|
+
})
|
|
6612
|
+
|
|
6613
|
+
db.deleteAll().then(resolve=>{
|
|
6614
|
+
console.log(resolve,'清除数据库---->>>>>>name')
|
|
6615
|
+
})
|
|
6616
|
+
**/
|
|
6606
6617
|
indexedDB = indexedDB;
|
|
6607
6618
|
isNativeFunc(target) {
|
|
6608
6619
|
return Boolean(target.toString().match(/^function .*\(\) { \[native code\] }$/));
|
|
6609
6620
|
}
|
|
6610
6621
|
isNearBottom(...args) {
|
|
6611
6622
|
let nearBottomHeight = 50;
|
|
6612
|
-
|
|
6623
|
+
const checkWindow = () => {
|
|
6613
6624
|
// 已滚动的距离
|
|
6614
|
-
|
|
6625
|
+
const scrollTop = this.windowApi.window.pageYOffset || this.windowApi.document.documentElement.scrollTop;
|
|
6615
6626
|
// 视窗高度
|
|
6616
|
-
|
|
6627
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6617
6628
|
// 最大滚动距离
|
|
6618
|
-
|
|
6629
|
+
const maxScrollHeight = this.windowApi.document.documentElement.scrollHeight - nearBottomHeight;
|
|
6619
6630
|
return scrollTop + viewportHeight >= maxScrollHeight;
|
|
6620
6631
|
};
|
|
6621
|
-
|
|
6632
|
+
const checkNode = ($ele) => {
|
|
6622
6633
|
// 已滚动的距离
|
|
6623
|
-
|
|
6634
|
+
const scrollTop = $ele.scrollTop;
|
|
6624
6635
|
// 视窗高度
|
|
6625
|
-
|
|
6636
|
+
const viewportHeight = $ele.clientHeight;
|
|
6626
6637
|
// 最大滚动距离
|
|
6627
|
-
|
|
6638
|
+
const maxScrollHeight = $ele.scrollHeight - viewportHeight - nearBottomHeight;
|
|
6628
6639
|
return scrollTop >= maxScrollHeight;
|
|
6629
6640
|
};
|
|
6630
|
-
|
|
6641
|
+
const firstArg = args[0];
|
|
6631
6642
|
if (args.length === 0 || typeof args[0] === "number") {
|
|
6632
6643
|
// nearBottomHeight
|
|
6633
6644
|
//
|
|
@@ -6642,7 +6653,7 @@ define((function () { 'use strict';
|
|
|
6642
6653
|
return checkNode(args[0]);
|
|
6643
6654
|
}
|
|
6644
6655
|
else {
|
|
6645
|
-
throw new TypeError(
|
|
6656
|
+
throw new TypeError(`参数1类型错误${typeof firstArg}`);
|
|
6646
6657
|
}
|
|
6647
6658
|
}
|
|
6648
6659
|
/**
|
|
@@ -6672,7 +6683,7 @@ define((function () { 'use strict';
|
|
|
6672
6683
|
}
|
|
6673
6684
|
if (typeof target === "object") {
|
|
6674
6685
|
/* 也有种可能,这个jQuery对象是1.8.3版本的,页面中的jQuery是3.4.1版本的 */
|
|
6675
|
-
|
|
6686
|
+
const jQueryProps = [
|
|
6676
6687
|
"add",
|
|
6677
6688
|
"addBack",
|
|
6678
6689
|
"addClass",
|
|
@@ -6856,50 +6867,50 @@ define((function () { 'use strict';
|
|
|
6856
6867
|
*/
|
|
6857
6868
|
isNotNull = commonUtil.isNotNull.bind(commonUtil);
|
|
6858
6869
|
/**
|
|
6859
|
-
|
|
6860
|
-
|
|
6861
|
-
|
|
6862
|
-
|
|
6863
|
-
|
|
6864
|
-
|
|
6865
|
-
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
|
|
6869
|
-
|
|
6870
|
-
|
|
6871
|
-
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
|
|
6875
|
-
|
|
6876
|
-
|
|
6877
|
-
|
|
6878
|
-
|
|
6879
|
-
|
|
6880
|
-
|
|
6881
|
-
|
|
6882
|
-
|
|
6883
|
-
|
|
6884
|
-
|
|
6885
|
-
|
|
6886
|
-
|
|
6887
|
-
|
|
6888
|
-
|
|
6889
|
-
|
|
6890
|
-
|
|
6891
|
-
|
|
6892
|
-
|
|
6893
|
-
|
|
6894
|
-
|
|
6895
|
-
|
|
6896
|
-
|
|
6897
|
-
|
|
6898
|
-
|
|
6899
|
-
|
|
6900
|
-
|
|
6901
|
-
|
|
6902
|
-
|
|
6870
|
+
* 判断对象或数据是否为空
|
|
6871
|
+
* + `String`判空的值,如 ""、"null"、"undefined"、" "
|
|
6872
|
+
* + `Number`判空的值,如 0
|
|
6873
|
+
* + `Object`判空的值,如 {}、null、undefined
|
|
6874
|
+
* + `Array`(存在属性Symbol.iterator)判空的值,如 []
|
|
6875
|
+
* + `Boolean`判空的值,如false
|
|
6876
|
+
* + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
|
|
6877
|
+
* @returns
|
|
6878
|
+
* + true 为空
|
|
6879
|
+
* + false 不为空
|
|
6880
|
+
* @example
|
|
6881
|
+
Utils.isNull({});
|
|
6882
|
+
> true
|
|
6883
|
+
* @example
|
|
6884
|
+
Utils.isNull([]);
|
|
6885
|
+
> true
|
|
6886
|
+
* @example
|
|
6887
|
+
Utils.isNull(" ");
|
|
6888
|
+
> true
|
|
6889
|
+
* @example
|
|
6890
|
+
Utils.isNull(function(){});
|
|
6891
|
+
> true
|
|
6892
|
+
* @example
|
|
6893
|
+
Utils.isNull(()=>{}));
|
|
6894
|
+
> true
|
|
6895
|
+
* @example
|
|
6896
|
+
Utils.isNull("undefined");
|
|
6897
|
+
> true
|
|
6898
|
+
* @example
|
|
6899
|
+
Utils.isNull("null");
|
|
6900
|
+
> true
|
|
6901
|
+
* @example
|
|
6902
|
+
Utils.isNull(" ", false);
|
|
6903
|
+
> true
|
|
6904
|
+
* @example
|
|
6905
|
+
Utils.isNull([1],[]);
|
|
6906
|
+
> false
|
|
6907
|
+
* @example
|
|
6908
|
+
Utils.isNull([],[1]);
|
|
6909
|
+
> false
|
|
6910
|
+
* @example
|
|
6911
|
+
Utils.isNull(false,[123]);
|
|
6912
|
+
> false
|
|
6913
|
+
**/
|
|
6903
6914
|
isNull = commonUtil.isNull.bind(commonUtil);
|
|
6904
6915
|
isThemeDark() {
|
|
6905
6916
|
return this.windowApi.globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
@@ -6928,15 +6939,15 @@ define((function () { 'use strict';
|
|
|
6928
6939
|
}
|
|
6929
6940
|
let result = true;
|
|
6930
6941
|
for (const domItem of needCheckDomList) {
|
|
6931
|
-
|
|
6942
|
+
const domDisplay = this.windowApi.window.getComputedStyle(domItem);
|
|
6932
6943
|
if (domDisplay.display === "none") {
|
|
6933
6944
|
result = false;
|
|
6934
6945
|
}
|
|
6935
6946
|
else {
|
|
6936
|
-
|
|
6947
|
+
const domClientRect = domItem.getBoundingClientRect();
|
|
6937
6948
|
if (inView) {
|
|
6938
|
-
|
|
6939
|
-
|
|
6949
|
+
const viewportWidth = this.windowApi.window.innerWidth || this.windowApi.document.documentElement.clientWidth;
|
|
6950
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6940
6951
|
result = !(domClientRect.right < 0 ||
|
|
6941
6952
|
domClientRect.left > viewportWidth ||
|
|
6942
6953
|
domClientRect.bottom < 0 ||
|
|
@@ -6955,11 +6966,11 @@ define((function () { 'use strict';
|
|
|
6955
6966
|
}
|
|
6956
6967
|
isWebView_Via() {
|
|
6957
6968
|
let result = true;
|
|
6958
|
-
|
|
6969
|
+
const UtilsContext = this;
|
|
6959
6970
|
if (typeof this.windowApi.top.window.via === "object") {
|
|
6960
6971
|
for (const key in Object.values(this.windowApi.top.window.via)) {
|
|
6961
6972
|
if (Reflect.has(this.windowApi.top.window.via, key)) {
|
|
6962
|
-
|
|
6973
|
+
const objValueFunc = this.windowApi.top.window.via[key];
|
|
6963
6974
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6964
6975
|
result = true;
|
|
6965
6976
|
}
|
|
@@ -6977,11 +6988,11 @@ define((function () { 'use strict';
|
|
|
6977
6988
|
}
|
|
6978
6989
|
isWebView_X() {
|
|
6979
6990
|
let result = true;
|
|
6980
|
-
|
|
6991
|
+
const UtilsContext = this;
|
|
6981
6992
|
if (typeof this.windowApi.top.window.mbrowser === "object") {
|
|
6982
6993
|
for (const key in Object.values(this.windowApi.top.window.mbrowser)) {
|
|
6983
6994
|
if (Reflect.has(this.windowApi.top.window.mbrowser, key)) {
|
|
6984
|
-
|
|
6995
|
+
const objValueFunc = this.windowApi.top.window.mbrowser[key];
|
|
6985
6996
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6986
6997
|
result = true;
|
|
6987
6998
|
}
|
|
@@ -7008,46 +7019,46 @@ define((function () { 'use strict';
|
|
|
7008
7019
|
return result;
|
|
7009
7020
|
}
|
|
7010
7021
|
/**
|
|
7011
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7022
|
+
* 自动锁对象,用于循环判断运行的函数,在循环外new后使用,注意,如果函数内部存在异步操作,需要使用await
|
|
7023
|
+
* @example
|
|
7024
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}))
|
|
7025
|
+
lock.run();
|
|
7026
|
+
> 1
|
|
7027
|
+
* @example
|
|
7028
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}),true) -- 异步操作
|
|
7029
|
+
await lock.run();
|
|
7030
|
+
> 1
|
|
7031
|
+
**/
|
|
7021
7032
|
LockFunction = LockFunction;
|
|
7022
7033
|
/**
|
|
7023
|
-
|
|
7024
|
-
|
|
7025
|
-
|
|
7026
|
-
|
|
7027
|
-
|
|
7028
|
-
|
|
7029
|
-
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7043
|
-
|
|
7044
|
-
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7034
|
+
* 日志对象
|
|
7035
|
+
* @param _GM_info_ 油猴管理器的API GM_info,或者是一个对象,如{"script":{name:"Utils.Log"}}
|
|
7036
|
+
* @example
|
|
7037
|
+
let log = new Utils.Log(GM_info);
|
|
7038
|
+
log.info("普通输出");
|
|
7039
|
+
> 普通输出
|
|
7040
|
+
|
|
7041
|
+
log.success("成功输出");
|
|
7042
|
+
> 成功输出
|
|
7043
|
+
|
|
7044
|
+
log.error("错误输出");
|
|
7045
|
+
> 错误输出
|
|
7046
|
+
|
|
7047
|
+
log.warn("警告输出");
|
|
7048
|
+
> 警告输出
|
|
7049
|
+
|
|
7050
|
+
log.tag = "自定义tag信息";
|
|
7051
|
+
log.info("自定义info的颜色","#e0e0e0");
|
|
7052
|
+
> 自定义info的颜色
|
|
7053
|
+
|
|
7054
|
+
log.config({
|
|
7055
|
+
successColor: "#31dc02",
|
|
7056
|
+
errorColor: "#e02d2d",
|
|
7057
|
+
infoColor: "black",
|
|
7058
|
+
})
|
|
7059
|
+
log.success("颜色为#31dc02");
|
|
7060
|
+
> 颜色为#31dc02
|
|
7061
|
+
*/
|
|
7051
7062
|
Log = Log;
|
|
7052
7063
|
mergeArrayToString(data, handleFunc) {
|
|
7053
7064
|
if (!(data instanceof Array)) {
|
|
@@ -7076,8 +7087,8 @@ define((function () { 'use strict';
|
|
|
7076
7087
|
return content;
|
|
7077
7088
|
}
|
|
7078
7089
|
mutationObserver(target, observer_config) {
|
|
7079
|
-
|
|
7080
|
-
|
|
7090
|
+
const UtilsContext = this;
|
|
7091
|
+
const default_obverser_config = {
|
|
7081
7092
|
/* 监听到元素有反馈,需执行的函数 */
|
|
7082
7093
|
callback: () => { },
|
|
7083
7094
|
config: {
|
|
@@ -7119,11 +7130,11 @@ define((function () { 'use strict';
|
|
|
7119
7130
|
immediate: false,
|
|
7120
7131
|
};
|
|
7121
7132
|
observer_config = UtilsContext.assign(default_obverser_config, observer_config);
|
|
7122
|
-
|
|
7133
|
+
const windowMutationObserver = this.windowApi.window.MutationObserver ||
|
|
7123
7134
|
this.windowApi.window.webkitMutationObserver ||
|
|
7124
7135
|
this.windowApi.window.MozMutationObserver;
|
|
7125
7136
|
// 观察者对象
|
|
7126
|
-
|
|
7137
|
+
const mutationObserver = new windowMutationObserver(function (mutations, observer) {
|
|
7127
7138
|
if (typeof observer_config.callback === "function") {
|
|
7128
7139
|
observer_config.callback(mutations, observer);
|
|
7129
7140
|
}
|
|
@@ -7136,7 +7147,7 @@ define((function () { 'use strict';
|
|
|
7136
7147
|
}
|
|
7137
7148
|
else if (UtilsContext.isJQuery(target)) {
|
|
7138
7149
|
/* 传入的参数是jQuery对象 */
|
|
7139
|
-
target.each((
|
|
7150
|
+
target.each((_, item) => {
|
|
7140
7151
|
mutationObserver.observe(item, observer_config.config);
|
|
7141
7152
|
});
|
|
7142
7153
|
}
|
|
@@ -7174,7 +7185,7 @@ define((function () { 'use strict';
|
|
|
7174
7185
|
threshold: [0.01, 0.99],
|
|
7175
7186
|
};
|
|
7176
7187
|
defaultOptions = this.assign(defaultOptions, options || {});
|
|
7177
|
-
|
|
7188
|
+
const intersectionObserver = new IntersectionObserver((entries, observer) => {
|
|
7178
7189
|
if (entries[0].isIntersecting) {
|
|
7179
7190
|
if (typeof callback === "function") {
|
|
7180
7191
|
callback(entries, observer);
|
|
@@ -7204,7 +7215,7 @@ define((function () { 'use strict';
|
|
|
7204
7215
|
return utils;
|
|
7205
7216
|
}
|
|
7206
7217
|
noConflictFunc(needReleaseObject, needReleaseName, functionNameList = [], release = true) {
|
|
7207
|
-
|
|
7218
|
+
const UtilsContext = this;
|
|
7208
7219
|
if (typeof needReleaseObject !== "object") {
|
|
7209
7220
|
throw new Error("Utils.noConflictFunc 参数 needReleaseObject 必须为 object 类型");
|
|
7210
7221
|
}
|
|
@@ -7214,7 +7225,7 @@ define((function () { 'use strict';
|
|
|
7214
7225
|
if (!Array.isArray(functionNameList)) {
|
|
7215
7226
|
throw new Error("Utils.noConflictFunc 参数 functionNameList 必须为 Array 类型");
|
|
7216
7227
|
}
|
|
7217
|
-
|
|
7228
|
+
const needReleaseKey = `__${needReleaseName}`;
|
|
7218
7229
|
/**
|
|
7219
7230
|
* 释放所有
|
|
7220
7231
|
*/
|
|
@@ -7302,7 +7313,9 @@ define((function () { 'use strict';
|
|
|
7302
7313
|
if (typeof dataUri !== "string") {
|
|
7303
7314
|
throw new Error("Utils.parseBase64ToBlob 参数 dataUri 必须为 string 类型");
|
|
7304
7315
|
}
|
|
7305
|
-
|
|
7316
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7317
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7318
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7306
7319
|
while (dataUriLength--) {
|
|
7307
7320
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7308
7321
|
}
|
|
@@ -7317,7 +7330,9 @@ define((function () { 'use strict';
|
|
|
7317
7330
|
if (typeof fileName !== "string") {
|
|
7318
7331
|
throw new Error("Utils.parseBase64ToFile 参数 fileName 必须为 string 类型");
|
|
7319
7332
|
}
|
|
7320
|
-
|
|
7333
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7334
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7335
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7321
7336
|
while (dataUriLength--) {
|
|
7322
7337
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7323
7338
|
}
|
|
@@ -7351,15 +7366,15 @@ define((function () { 'use strict';
|
|
|
7351
7366
|
}
|
|
7352
7367
|
parseCDATA(text = "") {
|
|
7353
7368
|
let result = "";
|
|
7354
|
-
|
|
7355
|
-
|
|
7369
|
+
const cdataRegexp = /<!\[CDATA\[([\s\S]*)\]\]>/;
|
|
7370
|
+
const cdataMatch = cdataRegexp.exec(text.trim());
|
|
7356
7371
|
if (cdataMatch && cdataMatch.length > 1) {
|
|
7357
7372
|
result = cdataMatch[cdataMatch.length - 1];
|
|
7358
7373
|
}
|
|
7359
7374
|
return result;
|
|
7360
7375
|
}
|
|
7361
7376
|
async parseFileToBase64(fileObj) {
|
|
7362
|
-
|
|
7377
|
+
const reader = new FileReader();
|
|
7363
7378
|
reader.readAsDataURL(fileObj);
|
|
7364
7379
|
return new Promise((resolve) => {
|
|
7365
7380
|
reader.onload = function (event) {
|
|
@@ -7368,14 +7383,14 @@ define((function () { 'use strict';
|
|
|
7368
7383
|
});
|
|
7369
7384
|
}
|
|
7370
7385
|
parseFromString(text, mimeType = "text/html") {
|
|
7371
|
-
|
|
7386
|
+
const parser = new DOMParser();
|
|
7372
7387
|
return parser.parseFromString(text, mimeType);
|
|
7373
7388
|
}
|
|
7374
7389
|
parseStringToRegExpString(text) {
|
|
7375
7390
|
if (typeof text !== "string") {
|
|
7376
7391
|
throw new TypeError("string必须是字符串");
|
|
7377
7392
|
}
|
|
7378
|
-
|
|
7393
|
+
const regString = text.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
|
|
7379
7394
|
return regString;
|
|
7380
7395
|
}
|
|
7381
7396
|
preventEvent(element, eventNameList = [], capture) {
|
|
@@ -7390,6 +7405,7 @@ define((function () { 'use strict';
|
|
|
7390
7405
|
}
|
|
7391
7406
|
if (arguments.length === 1) {
|
|
7392
7407
|
/* 直接阻止事件 */
|
|
7408
|
+
// eslint-disable-next-line prefer-rest-params
|
|
7393
7409
|
return stopEvent(arguments[0]);
|
|
7394
7410
|
}
|
|
7395
7411
|
else {
|
|
@@ -7405,11 +7421,11 @@ define((function () { 'use strict';
|
|
|
7405
7421
|
}
|
|
7406
7422
|
}
|
|
7407
7423
|
/**
|
|
7408
|
-
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7424
|
+
* 在canvas元素节点上绘制进度圆圈
|
|
7425
|
+
* @example
|
|
7426
|
+
let progress = new Utils.Process({canvasNode:document.querySelector("canvas")});
|
|
7427
|
+
progress.draw();
|
|
7428
|
+
* **/
|
|
7413
7429
|
Progress = Progress;
|
|
7414
7430
|
registerTrustClickEvent(isTrustValue = true, filter) {
|
|
7415
7431
|
function trustEvent(event) {
|
|
@@ -7431,8 +7447,8 @@ define((function () { 'use strict';
|
|
|
7431
7447
|
}
|
|
7432
7448
|
const originalListener = EventTarget.prototype.addEventListener;
|
|
7433
7449
|
EventTarget.prototype.addEventListener = function (...args) {
|
|
7434
|
-
|
|
7435
|
-
|
|
7450
|
+
const type = args[0];
|
|
7451
|
+
const callback = args[1];
|
|
7436
7452
|
// let options = args[2];
|
|
7437
7453
|
if (filter(type)) {
|
|
7438
7454
|
if (typeof callback === "function") {
|
|
@@ -7441,7 +7457,7 @@ define((function () { 'use strict';
|
|
|
7441
7457
|
};
|
|
7442
7458
|
}
|
|
7443
7459
|
else if (typeof callback === "object" && "handleEvent" in callback) {
|
|
7444
|
-
|
|
7460
|
+
const oldHandleEvent = callback["handleEvent"];
|
|
7445
7461
|
args[1]["handleEvent"] = function (event) {
|
|
7446
7462
|
if (event == null) {
|
|
7447
7463
|
return;
|
|
@@ -7452,7 +7468,7 @@ define((function () { 'use strict';
|
|
|
7452
7468
|
event instanceof Proxy;
|
|
7453
7469
|
oldHandleEvent.call(this, trustEvent(event));
|
|
7454
7470
|
}
|
|
7455
|
-
catch
|
|
7471
|
+
catch {
|
|
7456
7472
|
Reflect.set(event, "isTrusted", isTrustValue);
|
|
7457
7473
|
}
|
|
7458
7474
|
};
|
|
@@ -7475,7 +7491,7 @@ define((function () { 'use strict';
|
|
|
7475
7491
|
return isNegative ? -reversedNum : reversedNum;
|
|
7476
7492
|
}
|
|
7477
7493
|
selectElementText(element, childTextNode, startIndex, endIndex) {
|
|
7478
|
-
|
|
7494
|
+
const range = this.windowApi.document.createRange();
|
|
7479
7495
|
range.selectNodeContents(element);
|
|
7480
7496
|
if (childTextNode) {
|
|
7481
7497
|
if (childTextNode.nodeType !== Node.TEXT_NODE) {
|
|
@@ -7486,7 +7502,7 @@ define((function () { 'use strict';
|
|
|
7486
7502
|
range.setEnd(childTextNode, endIndex);
|
|
7487
7503
|
}
|
|
7488
7504
|
}
|
|
7489
|
-
|
|
7505
|
+
const selection = this.windowApi.globalThis.getSelection();
|
|
7490
7506
|
if (selection) {
|
|
7491
7507
|
selection.removeAllRanges();
|
|
7492
7508
|
selection.addRange(range);
|
|
@@ -7514,7 +7530,7 @@ define((function () { 'use strict';
|
|
|
7514
7530
|
else {
|
|
7515
7531
|
textType = "text/plain";
|
|
7516
7532
|
}
|
|
7517
|
-
|
|
7533
|
+
const UtilsContext = this;
|
|
7518
7534
|
class UtilsClipboard {
|
|
7519
7535
|
#resolve;
|
|
7520
7536
|
#copyData;
|
|
@@ -7526,7 +7542,7 @@ define((function () { 'use strict';
|
|
|
7526
7542
|
}
|
|
7527
7543
|
async init() {
|
|
7528
7544
|
let copyStatus = false;
|
|
7529
|
-
|
|
7545
|
+
const requestPermissionStatus = await this.requestClipboardPermission();
|
|
7530
7546
|
console.log(requestPermissionStatus);
|
|
7531
7547
|
if (this.hasClipboard() && (this.hasClipboardWrite() || this.hasClipboardWriteText())) {
|
|
7532
7548
|
try {
|
|
@@ -7565,7 +7581,7 @@ define((function () { 'use strict';
|
|
|
7565
7581
|
*/
|
|
7566
7582
|
copyTextByTextArea() {
|
|
7567
7583
|
try {
|
|
7568
|
-
|
|
7584
|
+
const copyElement = UtilsContext.windowApi.document.createElement("textarea");
|
|
7569
7585
|
copyElement.value = this.#copyData;
|
|
7570
7586
|
copyElement.setAttribute("type", "text");
|
|
7571
7587
|
copyElement.setAttribute("style", "opacity:0;position:absolute;");
|
|
@@ -7585,20 +7601,17 @@ define((function () { 'use strict';
|
|
|
7585
7601
|
* 申请剪贴板权限
|
|
7586
7602
|
*/
|
|
7587
7603
|
requestClipboardPermission() {
|
|
7588
|
-
return new Promise((resolve
|
|
7604
|
+
return new Promise((resolve) => {
|
|
7589
7605
|
if (navigator.permissions && navigator.permissions.query) {
|
|
7590
7606
|
navigator.permissions
|
|
7591
7607
|
.query({
|
|
7592
7608
|
name: "clipboard-write",
|
|
7593
7609
|
})
|
|
7594
|
-
.then((
|
|
7610
|
+
.then(() => {
|
|
7595
7611
|
resolve(true);
|
|
7596
7612
|
})
|
|
7597
7613
|
.catch((error) => {
|
|
7598
|
-
console.error([
|
|
7599
|
-
"申请剪贴板权限失败,尝试直接写入👉",
|
|
7600
|
-
error.message ?? error.name ?? error.stack,
|
|
7601
|
-
]);
|
|
7614
|
+
console.error(["申请剪贴板权限失败,尝试直接写入👉", error.message ?? error.name ?? error.stack]);
|
|
7602
7615
|
resolve(false);
|
|
7603
7616
|
});
|
|
7604
7617
|
}
|
|
@@ -7625,7 +7638,7 @@ define((function () { 'use strict';
|
|
|
7625
7638
|
}
|
|
7626
7639
|
else {
|
|
7627
7640
|
/* 可复制对象 */
|
|
7628
|
-
|
|
7641
|
+
const textBlob = new Blob([this.#copyData], {
|
|
7629
7642
|
type: this.#copyDataType,
|
|
7630
7643
|
});
|
|
7631
7644
|
navigator.clipboard
|
|
@@ -7657,7 +7670,7 @@ define((function () { 'use strict';
|
|
|
7657
7670
|
});
|
|
7658
7671
|
}
|
|
7659
7672
|
setTimeout(callback, delayTime = 0) {
|
|
7660
|
-
|
|
7673
|
+
const UtilsContext = this;
|
|
7661
7674
|
if (typeof callback !== "function" && typeof callback !== "string") {
|
|
7662
7675
|
throw new TypeError("Utils.setTimeout 参数 callback 必须为 function|string 类型");
|
|
7663
7676
|
}
|
|
@@ -7671,7 +7684,7 @@ define((function () { 'use strict';
|
|
|
7671
7684
|
});
|
|
7672
7685
|
}
|
|
7673
7686
|
sleep(delayTime = 0) {
|
|
7674
|
-
|
|
7687
|
+
const UtilsContext = this;
|
|
7675
7688
|
if (typeof delayTime !== "number") {
|
|
7676
7689
|
throw new Error("Utils.sleep 参数 delayTime 必须为 number 类型");
|
|
7677
7690
|
}
|
|
@@ -7682,18 +7695,18 @@ define((function () { 'use strict';
|
|
|
7682
7695
|
});
|
|
7683
7696
|
}
|
|
7684
7697
|
dragSlider(selector, offsetX = this.windowApi.window.innerWidth) {
|
|
7685
|
-
|
|
7698
|
+
const UtilsContext = this;
|
|
7686
7699
|
function initMouseEvent(eventName, offSetX, offSetY) {
|
|
7687
|
-
|
|
7688
|
-
|
|
7700
|
+
const win = typeof unsafeWindow === "undefined" ? globalThis : unsafeWindow;
|
|
7701
|
+
const mouseEvent = UtilsContext.windowApi.document.createEvent("MouseEvents");
|
|
7689
7702
|
mouseEvent.initMouseEvent(eventName, true, true, win, 0, offSetX, offSetY, offSetX, offSetY, false, false, false, false, 0, null);
|
|
7690
7703
|
return mouseEvent;
|
|
7691
7704
|
}
|
|
7692
|
-
|
|
7705
|
+
const sliderElement = typeof selector === "string" ? domUtils.selector(selector) : selector;
|
|
7693
7706
|
if (!(sliderElement instanceof Node) || !(sliderElement instanceof Element)) {
|
|
7694
7707
|
throw new Error("Utils.dragSlider 参数selector 必须为Node/Element类型");
|
|
7695
7708
|
}
|
|
7696
|
-
|
|
7709
|
+
const rect = sliderElement.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top, x1 = x0 + offsetX, y1 = y0;
|
|
7697
7710
|
sliderElement.dispatchEvent(initMouseEvent("mousedown", x0, y0));
|
|
7698
7711
|
sliderElement.dispatchEvent(initMouseEvent("mousemove", x1, y1));
|
|
7699
7712
|
sliderElement.dispatchEvent(initMouseEvent("mouseleave", x1, y1));
|
|
@@ -7721,34 +7734,34 @@ define((function () { 'use strict';
|
|
|
7721
7734
|
console.error(err);
|
|
7722
7735
|
}
|
|
7723
7736
|
}
|
|
7724
|
-
exitFullScreen(
|
|
7725
|
-
if (
|
|
7726
|
-
return
|
|
7737
|
+
exitFullScreen($el = this.windowApi.document.documentElement) {
|
|
7738
|
+
if ($el.exitFullscreen) {
|
|
7739
|
+
return $el.exitFullscreen();
|
|
7727
7740
|
}
|
|
7728
|
-
else if (
|
|
7729
|
-
return
|
|
7741
|
+
else if ($el.msExitFullscreen) {
|
|
7742
|
+
return $el.msExitFullscreen();
|
|
7730
7743
|
}
|
|
7731
|
-
else if (
|
|
7732
|
-
return
|
|
7744
|
+
else if ($el.mozCancelFullScreen) {
|
|
7745
|
+
return $el.mozCancelFullScreen();
|
|
7733
7746
|
}
|
|
7734
|
-
else if (
|
|
7735
|
-
return
|
|
7747
|
+
else if ($el.webkitCancelFullScreen) {
|
|
7748
|
+
return $el.webkitCancelFullScreen();
|
|
7736
7749
|
}
|
|
7737
7750
|
else {
|
|
7738
|
-
return new Promise((
|
|
7751
|
+
return new Promise((_, reject) => {
|
|
7739
7752
|
reject(new TypeError("该浏览器不支持全屏API"));
|
|
7740
7753
|
});
|
|
7741
7754
|
}
|
|
7742
7755
|
}
|
|
7743
7756
|
sortListByProperty(data, getPropertyValueFunc, sortByDesc = true) {
|
|
7744
|
-
|
|
7757
|
+
const UtilsContext = this;
|
|
7745
7758
|
if (typeof getPropertyValueFunc !== "function" && typeof getPropertyValueFunc !== "string") {
|
|
7746
7759
|
throw new Error("Utils.sortListByProperty 参数 getPropertyValueFunc 必须为 function|string 类型");
|
|
7747
7760
|
}
|
|
7748
7761
|
if (typeof sortByDesc !== "boolean") {
|
|
7749
7762
|
throw new Error("Utils.sortListByProperty 参数 sortByDesc 必须为 boolean 类型");
|
|
7750
7763
|
}
|
|
7751
|
-
|
|
7764
|
+
const getObjValue = function (obj) {
|
|
7752
7765
|
return typeof getPropertyValueFunc === "string" ? obj[getPropertyValueFunc] : getPropertyValueFunc(obj);
|
|
7753
7766
|
};
|
|
7754
7767
|
/**
|
|
@@ -7757,9 +7770,9 @@ define((function () { 'use strict';
|
|
|
7757
7770
|
* @param {any} before_obj
|
|
7758
7771
|
* @returns
|
|
7759
7772
|
*/
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7773
|
+
const sortFunc = function (after_obj, before_obj) {
|
|
7774
|
+
const beforeValue = getObjValue(before_obj); /* 前 */
|
|
7775
|
+
const afterValue = getObjValue(after_obj); /* 后 */
|
|
7763
7776
|
if (sortByDesc) {
|
|
7764
7777
|
if (afterValue > beforeValue) {
|
|
7765
7778
|
return -1;
|
|
@@ -7788,19 +7801,18 @@ define((function () { 'use strict';
|
|
|
7788
7801
|
* @param nodeList 元素列表
|
|
7789
7802
|
* @param getNodeListFunc 获取元素列表的函数
|
|
7790
7803
|
*/
|
|
7791
|
-
|
|
7792
|
-
|
|
7804
|
+
const sortNodeFunc = function (nodeList, getNodeListFunc) {
|
|
7805
|
+
const nodeListLength = nodeList.length;
|
|
7793
7806
|
for (let i = 0; i < nodeListLength - 1; i++) {
|
|
7794
7807
|
for (let j = 0; j < nodeListLength - 1 - i; j++) {
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
if ((sortByDesc == true && beforeValue < afterValue) ||
|
|
7800
|
-
(sortByDesc == false && beforeValue > afterValue)) {
|
|
7808
|
+
const beforeNode = nodeList[j];
|
|
7809
|
+
const afterNode = nodeList[j + 1];
|
|
7810
|
+
const beforeValue = getObjValue(beforeNode); /* 前 */
|
|
7811
|
+
const afterValue = getObjValue(afterNode); /* 后 */
|
|
7812
|
+
if ((sortByDesc == true && beforeValue < afterValue) || (sortByDesc == false && beforeValue > afterValue)) {
|
|
7801
7813
|
/* 升序/降序 */
|
|
7802
7814
|
/* 相邻元素两两对比 */
|
|
7803
|
-
|
|
7815
|
+
const temp = beforeNode.nextElementSibling;
|
|
7804
7816
|
afterNode.after(beforeNode);
|
|
7805
7817
|
if (temp == null) {
|
|
7806
7818
|
/* 如果为空,那么是最后一个元素,使用append */
|
|
@@ -7858,7 +7870,7 @@ define((function () { 'use strict';
|
|
|
7858
7870
|
return newTargetString;
|
|
7859
7871
|
}
|
|
7860
7872
|
startsWith(target, searchString, position = 0) {
|
|
7861
|
-
|
|
7873
|
+
const UtilsContext = this;
|
|
7862
7874
|
if (position > target.length) {
|
|
7863
7875
|
/* 超出目标字符串的长度 */
|
|
7864
7876
|
return false;
|
|
@@ -7902,7 +7914,7 @@ define((function () { 'use strict';
|
|
|
7902
7914
|
*/
|
|
7903
7915
|
toJSON = commonUtil.toJSON.bind(commonUtil);
|
|
7904
7916
|
toSearchParamsStr(obj, addPrefix) {
|
|
7905
|
-
|
|
7917
|
+
const UtilsContext = this;
|
|
7906
7918
|
let searhParamsStr = "";
|
|
7907
7919
|
if (Array.isArray(obj)) {
|
|
7908
7920
|
obj.forEach((item) => {
|
|
@@ -7910,7 +7922,7 @@ define((function () { 'use strict';
|
|
|
7910
7922
|
searhParamsStr += UtilsContext.toSearchParamsStr(item);
|
|
7911
7923
|
}
|
|
7912
7924
|
else {
|
|
7913
|
-
searhParamsStr +=
|
|
7925
|
+
searhParamsStr += `&${UtilsContext.toSearchParamsStr(item)}`;
|
|
7914
7926
|
}
|
|
7915
7927
|
});
|
|
7916
7928
|
}
|
|
@@ -7918,7 +7930,7 @@ define((function () { 'use strict';
|
|
|
7918
7930
|
searhParamsStr = new URLSearchParams(Object.entries(obj)).toString();
|
|
7919
7931
|
}
|
|
7920
7932
|
if (addPrefix && !searhParamsStr.startsWith("?")) {
|
|
7921
|
-
searhParamsStr =
|
|
7933
|
+
searhParamsStr = `?${searhParamsStr}`;
|
|
7922
7934
|
}
|
|
7923
7935
|
return searhParamsStr;
|
|
7924
7936
|
}
|
|
@@ -7966,7 +7978,7 @@ define((function () { 'use strict';
|
|
|
7966
7978
|
}
|
|
7967
7979
|
}
|
|
7968
7980
|
waitArrayLoopToEnd(data, handleFunc) {
|
|
7969
|
-
|
|
7981
|
+
const UtilsContext = this;
|
|
7970
7982
|
if (typeof handleFunc !== "function" && typeof handleFunc !== "string") {
|
|
7971
7983
|
throw new Error("Utils.waitArrayLoopToEnd 参数 handleDataFunction 必须为 function|string 类型");
|
|
7972
7984
|
}
|
|
@@ -7976,17 +7988,17 @@ define((function () { 'use strict';
|
|
|
7976
7988
|
}
|
|
7977
7989
|
wait(checkFn, timeout, parent) {
|
|
7978
7990
|
const UtilsContext = this;
|
|
7979
|
-
|
|
7991
|
+
const __timeout__ = typeof timeout === "number" ? timeout : 0;
|
|
7980
7992
|
return new Promise((resolve) => {
|
|
7981
|
-
|
|
7993
|
+
const observer = UtilsContext.mutationObserver(parent || UtilsContext.windowApi.document, {
|
|
7982
7994
|
config: {
|
|
7983
7995
|
subtree: true,
|
|
7984
7996
|
childList: true,
|
|
7985
7997
|
attributes: true,
|
|
7986
7998
|
},
|
|
7987
7999
|
immediate: true,
|
|
7988
|
-
callback(
|
|
7989
|
-
|
|
8000
|
+
callback(_, __observer__) {
|
|
8001
|
+
const result = checkFn();
|
|
7990
8002
|
if (result.success) {
|
|
7991
8003
|
// 取消观察器
|
|
7992
8004
|
if (typeof __observer__?.disconnect === "function") {
|
|
@@ -8010,9 +8022,9 @@ define((function () { 'use strict';
|
|
|
8010
8022
|
waitNode(...args) {
|
|
8011
8023
|
// 过滤掉undefined
|
|
8012
8024
|
args = args.filter((arg) => arg !== void 0);
|
|
8013
|
-
|
|
8025
|
+
const UtilsContext = this;
|
|
8014
8026
|
// 选择器
|
|
8015
|
-
|
|
8027
|
+
const selector = args[0];
|
|
8016
8028
|
// 父元素(监听的元素)
|
|
8017
8029
|
let parent = UtilsContext.windowApi.document;
|
|
8018
8030
|
// 超时时间
|
|
@@ -8022,7 +8034,7 @@ define((function () { 'use strict';
|
|
|
8022
8034
|
}
|
|
8023
8035
|
if (args.length === 1) ;
|
|
8024
8036
|
else if (args.length === 2) {
|
|
8025
|
-
|
|
8037
|
+
const secondParam = args[1];
|
|
8026
8038
|
if (typeof secondParam === "number") {
|
|
8027
8039
|
// "div",10000
|
|
8028
8040
|
timeout = secondParam;
|
|
@@ -8038,9 +8050,9 @@ define((function () { 'use strict';
|
|
|
8038
8050
|
else if (args.length === 3) {
|
|
8039
8051
|
// "div",document,10000
|
|
8040
8052
|
// 第二个参数,parent
|
|
8041
|
-
|
|
8053
|
+
const secondParam = args[1];
|
|
8042
8054
|
// 第三个参数,timeout
|
|
8043
|
-
|
|
8055
|
+
const thirdParam = args[2];
|
|
8044
8056
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8045
8057
|
parent = secondParam;
|
|
8046
8058
|
if (typeof thirdParam === "number") {
|
|
@@ -8059,9 +8071,9 @@ define((function () { 'use strict';
|
|
|
8059
8071
|
}
|
|
8060
8072
|
function getNode() {
|
|
8061
8073
|
if (Array.isArray(selector)) {
|
|
8062
|
-
|
|
8074
|
+
const result = [];
|
|
8063
8075
|
for (let index = 0; index < selector.length; index++) {
|
|
8064
|
-
|
|
8076
|
+
const node = domUtils.selector(selector[index]);
|
|
8065
8077
|
if (node) {
|
|
8066
8078
|
result.push(node);
|
|
8067
8079
|
}
|
|
@@ -8078,7 +8090,7 @@ define((function () { 'use strict';
|
|
|
8078
8090
|
}
|
|
8079
8091
|
}
|
|
8080
8092
|
return UtilsContext.wait(() => {
|
|
8081
|
-
|
|
8093
|
+
const node = getNode();
|
|
8082
8094
|
if (node) {
|
|
8083
8095
|
return {
|
|
8084
8096
|
success: true,
|
|
@@ -8096,9 +8108,9 @@ define((function () { 'use strict';
|
|
|
8096
8108
|
waitAnyNode(...args) {
|
|
8097
8109
|
// 过滤掉undefined
|
|
8098
8110
|
args = args.filter((arg) => arg !== void 0);
|
|
8099
|
-
|
|
8111
|
+
const UtilsContext = this;
|
|
8100
8112
|
// 选择器
|
|
8101
|
-
|
|
8113
|
+
const selectorList = args[0];
|
|
8102
8114
|
// 父元素(监听的元素)
|
|
8103
8115
|
let parent = UtilsContext.windowApi.document;
|
|
8104
8116
|
// 超时时间
|
|
@@ -8108,7 +8120,7 @@ define((function () { 'use strict';
|
|
|
8108
8120
|
}
|
|
8109
8121
|
if (args.length === 1) ;
|
|
8110
8122
|
else if (args.length === 2) {
|
|
8111
|
-
|
|
8123
|
+
const secondParam = args[1];
|
|
8112
8124
|
if (typeof secondParam === "number") {
|
|
8113
8125
|
// "div",10000
|
|
8114
8126
|
timeout = secondParam;
|
|
@@ -8124,9 +8136,9 @@ define((function () { 'use strict';
|
|
|
8124
8136
|
else if (args.length === 3) {
|
|
8125
8137
|
// "div",document,10000
|
|
8126
8138
|
// 第二个参数,parent
|
|
8127
|
-
|
|
8139
|
+
const secondParam = args[1];
|
|
8128
8140
|
// 第三个参数,timeout
|
|
8129
|
-
|
|
8141
|
+
const thirdParam = args[2];
|
|
8130
8142
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8131
8143
|
parent = secondParam;
|
|
8132
8144
|
if (typeof thirdParam === "number") {
|
|
@@ -8143,7 +8155,7 @@ define((function () { 'use strict';
|
|
|
8143
8155
|
else {
|
|
8144
8156
|
throw new TypeError("Utils.waitAnyNode 参数个数错误");
|
|
8145
8157
|
}
|
|
8146
|
-
|
|
8158
|
+
const promiseList = selectorList.map((selector) => {
|
|
8147
8159
|
return UtilsContext.waitNode(selector, parent, timeout);
|
|
8148
8160
|
});
|
|
8149
8161
|
return Promise.any(promiseList);
|
|
@@ -8151,9 +8163,9 @@ define((function () { 'use strict';
|
|
|
8151
8163
|
waitNodeList(...args) {
|
|
8152
8164
|
// 过滤掉undefined
|
|
8153
8165
|
args = args.filter((arg) => arg !== void 0);
|
|
8154
|
-
|
|
8166
|
+
const UtilsContext = this;
|
|
8155
8167
|
// 选择器数组
|
|
8156
|
-
|
|
8168
|
+
const selector = args[0];
|
|
8157
8169
|
// 父元素(监听的元素)
|
|
8158
8170
|
let parent = UtilsContext.windowApi.document;
|
|
8159
8171
|
// 超时时间
|
|
@@ -8163,7 +8175,7 @@ define((function () { 'use strict';
|
|
|
8163
8175
|
}
|
|
8164
8176
|
if (args.length === 1) ;
|
|
8165
8177
|
else if (args.length === 2) {
|
|
8166
|
-
|
|
8178
|
+
const secondParam = args[1];
|
|
8167
8179
|
if (typeof secondParam === "number") {
|
|
8168
8180
|
// "div",10000
|
|
8169
8181
|
timeout = secondParam;
|
|
@@ -8179,9 +8191,9 @@ define((function () { 'use strict';
|
|
|
8179
8191
|
else if (args.length === 3) {
|
|
8180
8192
|
// "div",document,10000
|
|
8181
8193
|
// 第二个参数,parent
|
|
8182
|
-
|
|
8194
|
+
const secondParam = args[1];
|
|
8183
8195
|
// 第三个参数,timeout
|
|
8184
|
-
|
|
8196
|
+
const thirdParam = args[2];
|
|
8185
8197
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8186
8198
|
parent = secondParam;
|
|
8187
8199
|
if (typeof thirdParam === "number") {
|
|
@@ -8200,9 +8212,9 @@ define((function () { 'use strict';
|
|
|
8200
8212
|
}
|
|
8201
8213
|
function getNodeList() {
|
|
8202
8214
|
if (Array.isArray(selector)) {
|
|
8203
|
-
|
|
8215
|
+
const result = [];
|
|
8204
8216
|
for (let index = 0; index < selector.length; index++) {
|
|
8205
|
-
|
|
8217
|
+
const nodeList = domUtils.selectorAll(selector[index], parent);
|
|
8206
8218
|
if (nodeList.length) {
|
|
8207
8219
|
result.push(nodeList);
|
|
8208
8220
|
}
|
|
@@ -8212,14 +8224,14 @@ define((function () { 'use strict';
|
|
|
8212
8224
|
}
|
|
8213
8225
|
}
|
|
8214
8226
|
else {
|
|
8215
|
-
|
|
8227
|
+
const nodeList = domUtils.selectorAll(selector, parent);
|
|
8216
8228
|
if (nodeList.length) {
|
|
8217
8229
|
return nodeList;
|
|
8218
8230
|
}
|
|
8219
8231
|
}
|
|
8220
8232
|
}
|
|
8221
8233
|
return UtilsContext.wait(() => {
|
|
8222
|
-
|
|
8234
|
+
const node = getNodeList();
|
|
8223
8235
|
if (node) {
|
|
8224
8236
|
return {
|
|
8225
8237
|
success: true,
|
|
@@ -8237,9 +8249,9 @@ define((function () { 'use strict';
|
|
|
8237
8249
|
waitAnyNodeList(...args) {
|
|
8238
8250
|
// 过滤掉undefined
|
|
8239
8251
|
args = args.filter((arg) => arg !== void 0);
|
|
8240
|
-
|
|
8252
|
+
const UtilsContext = this;
|
|
8241
8253
|
// 选择器数组
|
|
8242
|
-
|
|
8254
|
+
const selectorList = args[0];
|
|
8243
8255
|
// 父元素(监听的元素)
|
|
8244
8256
|
let parent = UtilsContext.windowApi.document;
|
|
8245
8257
|
// 超时时间
|
|
@@ -8249,7 +8261,7 @@ define((function () { 'use strict';
|
|
|
8249
8261
|
}
|
|
8250
8262
|
if (args.length === 1) ;
|
|
8251
8263
|
else if (args.length === 2) {
|
|
8252
|
-
|
|
8264
|
+
const secondParam = args[1];
|
|
8253
8265
|
if (typeof secondParam === "number") {
|
|
8254
8266
|
// "div",10000
|
|
8255
8267
|
timeout = secondParam;
|
|
@@ -8265,9 +8277,9 @@ define((function () { 'use strict';
|
|
|
8265
8277
|
else if (args.length === 3) {
|
|
8266
8278
|
// "div",document,10000
|
|
8267
8279
|
// 第二个参数,parent
|
|
8268
|
-
|
|
8280
|
+
const secondParam = args[1];
|
|
8269
8281
|
// 第三个参数,timeout
|
|
8270
|
-
|
|
8282
|
+
const thirdParam = args[2];
|
|
8271
8283
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8272
8284
|
parent = secondParam;
|
|
8273
8285
|
if (typeof thirdParam === "number") {
|
|
@@ -8284,7 +8296,7 @@ define((function () { 'use strict';
|
|
|
8284
8296
|
else {
|
|
8285
8297
|
throw new TypeError("Utils.waitAnyNodeList 参数个数错误");
|
|
8286
8298
|
}
|
|
8287
|
-
|
|
8299
|
+
const promiseList = selectorList.map((selector) => {
|
|
8288
8300
|
return UtilsContext.waitNodeList(selector, parent, timeout);
|
|
8289
8301
|
});
|
|
8290
8302
|
return Promise.any(promiseList);
|
|
@@ -8313,13 +8325,13 @@ define((function () { 'use strict';
|
|
|
8313
8325
|
});
|
|
8314
8326
|
}
|
|
8315
8327
|
waitPropertyByInterval(checkObj, checkPropertyName, intervalTimer = 250, maxTime = -1) {
|
|
8316
|
-
|
|
8328
|
+
const UtilsContext = this;
|
|
8317
8329
|
if (checkObj == null) {
|
|
8318
8330
|
throw new TypeError("checkObj 不能为空对象 ");
|
|
8319
8331
|
}
|
|
8320
8332
|
let isResolve = false;
|
|
8321
8333
|
return new Promise((resolve, reject) => {
|
|
8322
|
-
|
|
8334
|
+
const interval = UtilsContext.workerSetInterval(() => {
|
|
8323
8335
|
let obj = checkObj;
|
|
8324
8336
|
if (typeof checkObj === "function") {
|
|
8325
8337
|
obj = checkObj();
|
|
@@ -8352,7 +8364,7 @@ define((function () { 'use strict';
|
|
|
8352
8364
|
throw new Error("Utils.waitVueByInterval 参数element 不能为空");
|
|
8353
8365
|
}
|
|
8354
8366
|
let flag = false;
|
|
8355
|
-
|
|
8367
|
+
const UtilsContext = this;
|
|
8356
8368
|
try {
|
|
8357
8369
|
await UtilsContext.waitPropertyByInterval(element, function (targetElement) {
|
|
8358
8370
|
if (targetElement == null) {
|
|
@@ -8364,7 +8376,7 @@ define((function () { 'use strict';
|
|
|
8364
8376
|
if (propertyName == null) {
|
|
8365
8377
|
return true;
|
|
8366
8378
|
}
|
|
8367
|
-
|
|
8379
|
+
const vueObject = targetElement[vueName];
|
|
8368
8380
|
if (typeof propertyName === "string") {
|
|
8369
8381
|
if (propertyName in vueObject) {
|
|
8370
8382
|
flag = true;
|
|
@@ -8380,6 +8392,7 @@ define((function () { 'use strict';
|
|
|
8380
8392
|
}
|
|
8381
8393
|
return false;
|
|
8382
8394
|
}, timer, maxTime);
|
|
8395
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8383
8396
|
}
|
|
8384
8397
|
catch (error) {
|
|
8385
8398
|
return flag;
|
|
@@ -8438,7 +8451,7 @@ define((function () { 'use strict';
|
|
|
8438
8451
|
if (target == null) {
|
|
8439
8452
|
return;
|
|
8440
8453
|
}
|
|
8441
|
-
|
|
8454
|
+
const handleResult = handler(target);
|
|
8442
8455
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8443
8456
|
return handleResult.data;
|
|
8444
8457
|
}
|
|
@@ -8451,10 +8464,10 @@ define((function () { 'use strict';
|
|
|
8451
8464
|
*/
|
|
8452
8465
|
async asyncQueryProperty(target, handler) {
|
|
8453
8466
|
if (target == null) {
|
|
8454
|
-
// @ts-
|
|
8467
|
+
// @ts-expect-error 空返回
|
|
8455
8468
|
return;
|
|
8456
8469
|
}
|
|
8457
|
-
|
|
8470
|
+
const handleResult = await handler(target);
|
|
8458
8471
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8459
8472
|
return handleResult.data;
|
|
8460
8473
|
}
|
|
@@ -8562,6 +8575,7 @@ define((function () { 'use strict';
|
|
|
8562
8575
|
workerSetTimeout(callback, timeout = 0) {
|
|
8563
8576
|
try {
|
|
8564
8577
|
return setTimeout$1(callback, timeout);
|
|
8578
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8565
8579
|
}
|
|
8566
8580
|
catch (error) {
|
|
8567
8581
|
return this.windowApi.setTimeout(callback, timeout);
|
|
@@ -8576,8 +8590,10 @@ define((function () { 'use strict';
|
|
|
8576
8590
|
if (timeId != null) {
|
|
8577
8591
|
clearTimeout$1(timeId);
|
|
8578
8592
|
}
|
|
8593
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8579
8594
|
}
|
|
8580
8595
|
catch (error) {
|
|
8596
|
+
// console.log(error);
|
|
8581
8597
|
}
|
|
8582
8598
|
finally {
|
|
8583
8599
|
this.windowApi.clearTimeout(timeId);
|
|
@@ -8591,6 +8607,7 @@ define((function () { 'use strict';
|
|
|
8591
8607
|
workerSetInterval(callback, timeout = 0) {
|
|
8592
8608
|
try {
|
|
8593
8609
|
return setInterval(callback, timeout);
|
|
8610
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8594
8611
|
}
|
|
8595
8612
|
catch (error) {
|
|
8596
8613
|
return this.windowApi.setInterval(callback, timeout);
|
|
@@ -8605,8 +8622,10 @@ define((function () { 'use strict';
|
|
|
8605
8622
|
if (timeId != null) {
|
|
8606
8623
|
clearInterval(timeId);
|
|
8607
8624
|
}
|
|
8625
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8608
8626
|
}
|
|
8609
8627
|
catch (error) {
|
|
8628
|
+
// console.log(error);
|
|
8610
8629
|
}
|
|
8611
8630
|
finally {
|
|
8612
8631
|
this.windowApi.clearInterval(timeId);
|
|
@@ -8640,10 +8659,10 @@ define((function () { 'use strict';
|
|
|
8640
8659
|
.query({
|
|
8641
8660
|
name: "clipboard-read",
|
|
8642
8661
|
})
|
|
8643
|
-
.then((
|
|
8662
|
+
.then(() => {
|
|
8644
8663
|
readClipboardText();
|
|
8645
8664
|
})
|
|
8646
|
-
.catch((
|
|
8665
|
+
.catch(() => {
|
|
8647
8666
|
/* 该权限申请Api可能在该环境下不生效,尝试直接读取剪贴板 */
|
|
8648
8667
|
readClipboardText();
|
|
8649
8668
|
});
|
|
@@ -8680,7 +8699,7 @@ define((function () { 'use strict';
|
|
|
8680
8699
|
});
|
|
8681
8700
|
}
|
|
8682
8701
|
}
|
|
8683
|
-
|
|
8702
|
+
const utils = new Utils();
|
|
8684
8703
|
|
|
8685
8704
|
return utils;
|
|
8686
8705
|
|