@whitesev/utils 2.8.0 → 2.8.2
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 -875
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +896 -875
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +896 -875
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +896 -875
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +896 -875
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +896 -875
- 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/index.ts +3 -0
- package/package.json +19 -8
- 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 +4773 -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.iife.js
CHANGED
|
@@ -10,7 +10,7 @@ var Utils = (function () {
|
|
|
10
10
|
if (typeof str !== "string") {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
-
if (!str.match(/^(
|
|
13
|
+
if (!str.match(/^(#|)[0-9a-fA-F]{6}$/)) {
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
return true;
|
|
@@ -24,18 +24,10 @@ var Utils = (function () {
|
|
|
24
24
|
*/
|
|
25
25
|
hexToRgba(hex, opacity) {
|
|
26
26
|
if (!this.isHex(hex)) {
|
|
27
|
-
throw new TypeError(
|
|
27
|
+
throw new TypeError(`输入错误的hex:${hex}`);
|
|
28
28
|
}
|
|
29
29
|
return hex && hex.replace(/\s+/g, "").length === 7
|
|
30
|
-
?
|
|
31
|
-
parseInt("0x" + hex.slice(1, 3)) +
|
|
32
|
-
"," +
|
|
33
|
-
parseInt("0x" + hex.slice(3, 5)) +
|
|
34
|
-
"," +
|
|
35
|
-
parseInt("0x" + hex.slice(5, 7)) +
|
|
36
|
-
"," +
|
|
37
|
-
opacity +
|
|
38
|
-
")"
|
|
30
|
+
? `rgba(${parseInt(`0x${hex.slice(1, 3)}`)},${parseInt(`0x${hex.slice(3, 5)}`)},${parseInt(`0x${hex.slice(5, 7)}`)},${opacity})`
|
|
39
31
|
: "";
|
|
40
32
|
}
|
|
41
33
|
/**
|
|
@@ -44,14 +36,15 @@ var Utils = (function () {
|
|
|
44
36
|
*/
|
|
45
37
|
hexToRgb(str) {
|
|
46
38
|
if (!this.isHex(str)) {
|
|
47
|
-
throw new TypeError(
|
|
39
|
+
throw new TypeError(`输入错误的hex:${str}`);
|
|
48
40
|
}
|
|
49
41
|
/* replace替换查找的到的字符串 */
|
|
50
42
|
str = str.replace("#", "");
|
|
51
43
|
/* match得到查询数组 */
|
|
52
|
-
|
|
44
|
+
const hxs = str.match(/../g);
|
|
53
45
|
for (let index = 0; index < 3; index++) {
|
|
54
|
-
|
|
46
|
+
const value = parseInt(hxs[index], 16);
|
|
47
|
+
Reflect.set(hxs, index, value);
|
|
55
48
|
}
|
|
56
49
|
return hxs;
|
|
57
50
|
}
|
|
@@ -63,16 +56,16 @@ var Utils = (function () {
|
|
|
63
56
|
*/
|
|
64
57
|
rgbToHex(redValue, greenValue, blueValue) {
|
|
65
58
|
/* 验证输入的rgb值是否合法 */
|
|
66
|
-
|
|
59
|
+
const validPattern = /^\d{1,3}$/;
|
|
67
60
|
if (!validPattern.test(redValue.toString()) ||
|
|
68
61
|
!validPattern.test(greenValue.toString()) ||
|
|
69
62
|
!validPattern.test(blueValue.toString()))
|
|
70
63
|
throw new TypeError("输入错误的rgb颜色值");
|
|
71
|
-
|
|
64
|
+
const hexs = [redValue.toString(16), greenValue.toString(16), blueValue.toString(16)];
|
|
72
65
|
for (let index = 0; index < 3; index++)
|
|
73
66
|
if (hexs[index].length == 1)
|
|
74
|
-
hexs[index] =
|
|
75
|
-
return
|
|
67
|
+
hexs[index] = `0${hexs[index]}`;
|
|
68
|
+
return `#${hexs.join("")}`;
|
|
76
69
|
}
|
|
77
70
|
/**
|
|
78
71
|
* 获取颜色变暗或亮
|
|
@@ -81,11 +74,13 @@ var Utils = (function () {
|
|
|
81
74
|
*/
|
|
82
75
|
getDarkColor(color, level) {
|
|
83
76
|
if (!this.isHex(color)) {
|
|
84
|
-
throw new TypeError(
|
|
77
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
85
78
|
}
|
|
86
|
-
|
|
79
|
+
const rgbc = this.hexToRgb(color);
|
|
87
80
|
for (let index = 0; index < 3; index++) {
|
|
88
|
-
|
|
81
|
+
const rgbcItemValue = rgbc[index];
|
|
82
|
+
const value = Math.floor(Number(rgbcItemValue) * (1 - Number(level)));
|
|
83
|
+
Reflect.set(rgbc, index, value);
|
|
89
84
|
}
|
|
90
85
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
91
86
|
}
|
|
@@ -96,40 +91,43 @@ var Utils = (function () {
|
|
|
96
91
|
*/
|
|
97
92
|
getLightColor(color, level) {
|
|
98
93
|
if (!this.isHex(color)) {
|
|
99
|
-
throw new TypeError(
|
|
94
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
100
95
|
}
|
|
101
|
-
|
|
96
|
+
const rgbc = this.hexToRgb(color);
|
|
102
97
|
for (let index = 0; index < 3; index++) {
|
|
103
|
-
|
|
98
|
+
const rgbcItemValue = Number(rgbc[index]);
|
|
99
|
+
const value = Math.floor(255 - rgbcItemValue * level + rgbcItemValue);
|
|
100
|
+
Reflect.set(rgbc, index, value);
|
|
104
101
|
}
|
|
105
102
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
106
103
|
}
|
|
107
104
|
}
|
|
108
105
|
|
|
109
106
|
class GBKEncoder {
|
|
110
|
-
#data
|
|
107
|
+
#data;
|
|
111
108
|
#U2Ghash = {};
|
|
112
109
|
#G2Uhash = {};
|
|
113
110
|
constructor() {
|
|
114
|
-
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");
|
|
111
|
+
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");
|
|
115
112
|
let index = 0;
|
|
116
113
|
this.#data = dataText.match(/..../g);
|
|
117
114
|
for (let i = 0x81; i <= 0xfe; i++) {
|
|
118
115
|
for (let j = 0x40; j <= 0xfe; j++) {
|
|
119
|
-
this.#U2Ghash[this.#data[index++]] =
|
|
116
|
+
this.#U2Ghash[this.#data[index++]] = `%${i.toString(16)}%${j.toString(16)}`.toUpperCase();
|
|
120
117
|
}
|
|
121
118
|
}
|
|
122
|
-
for (
|
|
123
|
-
this.#
|
|
119
|
+
for (const key in this.#U2Ghash) {
|
|
120
|
+
const u2ghashValue = Reflect.get(this.#U2Ghash, key);
|
|
121
|
+
Reflect.set(this.#G2Uhash, u2ghashValue, key);
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
124
|
handleText(text) {
|
|
127
125
|
text = text
|
|
128
|
-
.replace(/#(\d+)\$/g, function (
|
|
126
|
+
.replace(/#(\d+)\$/g, function (_, b) {
|
|
129
127
|
return Array(+b + 3).join("#");
|
|
130
128
|
})
|
|
131
129
|
.replace(/#/g, "####")
|
|
132
|
-
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (
|
|
130
|
+
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (_, hd, dt) {
|
|
133
131
|
return dt.replace(/../g, function (a) {
|
|
134
132
|
if (a != "##") {
|
|
135
133
|
return hd + a;
|
|
@@ -149,8 +147,8 @@ var Utils = (function () {
|
|
|
149
147
|
* @param str
|
|
150
148
|
*/
|
|
151
149
|
encode(str) {
|
|
152
|
-
|
|
153
|
-
return [...str].reduce((result, val
|
|
150
|
+
const that = this;
|
|
151
|
+
return [...str].reduce((result, val) => {
|
|
154
152
|
return result + toGBK(val);
|
|
155
153
|
}, "");
|
|
156
154
|
function toGBK(val) {
|
|
@@ -159,7 +157,7 @@ var Utils = (function () {
|
|
|
159
157
|
const codePoint = val.codePointAt(i);
|
|
160
158
|
const code = String.fromCodePoint(codePoint);
|
|
161
159
|
let key = codePoint.toString(16);
|
|
162
|
-
key.length != 4 && (key =
|
|
160
|
+
key.length != 4 && (key = `000${key}`.match(/....$/)?.[0]);
|
|
163
161
|
/* Add up i by code.length */
|
|
164
162
|
i += code.length - 1;
|
|
165
163
|
/* If code is in ascii range */
|
|
@@ -173,9 +171,9 @@ var Utils = (function () {
|
|
|
173
171
|
continue;
|
|
174
172
|
}
|
|
175
173
|
/*
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
174
|
+
If 2 or more char combines to one visible code,
|
|
175
|
+
or just this code is not in GBK
|
|
176
|
+
*/
|
|
179
177
|
result += toGBK(`&#${codePoint};`);
|
|
180
178
|
}
|
|
181
179
|
return result;
|
|
@@ -186,18 +184,18 @@ var Utils = (function () {
|
|
|
186
184
|
* @param str
|
|
187
185
|
*/
|
|
188
186
|
decode(str) {
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
const GBKMatcher = /%[0-9A-F]{2}%[0-9A-F]{2}/;
|
|
188
|
+
const UTFMatcher = /%[0-9A-F]{2}/;
|
|
191
189
|
// let gbk = true;
|
|
192
190
|
let utf = true;
|
|
193
191
|
const that = this;
|
|
194
192
|
while (utf) {
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
const gbkMatch = str.match(GBKMatcher);
|
|
194
|
+
const utfMatch = str.match(UTFMatcher);
|
|
197
195
|
// gbk = Boolean(gbkMatch);
|
|
198
196
|
utf = Boolean(utfMatch);
|
|
199
197
|
if (gbkMatch && gbkMatch in that.#G2Uhash) {
|
|
200
|
-
str = str.replace(gbkMatch, String.fromCharCode(
|
|
198
|
+
str = str.replace(gbkMatch, String.fromCharCode(`0x${that.#G2Uhash[gbkMatch]}`));
|
|
201
199
|
}
|
|
202
200
|
else {
|
|
203
201
|
str = str.replace(utfMatch, decodeURIComponent(utfMatch));
|
|
@@ -211,7 +209,7 @@ var Utils = (function () {
|
|
|
211
209
|
/* 定义变量和函数 */
|
|
212
210
|
let callbackFunction = null;
|
|
213
211
|
let context = null;
|
|
214
|
-
let handleError = (
|
|
212
|
+
let handleError = () => { };
|
|
215
213
|
let defaultDetails = {
|
|
216
214
|
log: true,
|
|
217
215
|
};
|
|
@@ -243,7 +241,7 @@ var Utils = (function () {
|
|
|
243
241
|
run(callback, __context__) {
|
|
244
242
|
callbackFunction = callback;
|
|
245
243
|
context = __context__ || this;
|
|
246
|
-
|
|
244
|
+
const result = executeTryCatch(callbackFunction, handleError, context);
|
|
247
245
|
return result !== void 0 ? result : TryCatchCore;
|
|
248
246
|
},
|
|
249
247
|
};
|
|
@@ -267,8 +265,8 @@ var Utils = (function () {
|
|
|
267
265
|
catch (error) {
|
|
268
266
|
if (defaultDetails.log) {
|
|
269
267
|
callback = callback;
|
|
270
|
-
console.log(`%c ${callback?.name ? callback?.name : callback
|
|
271
|
-
console.log(`%c
|
|
268
|
+
console.log(`%c ${callback?.name ? callback?.name : `${callback}`} `, "color: #f20000");
|
|
269
|
+
console.log(`%c ${error}`, "color: #f20000");
|
|
272
270
|
console.trace(callback);
|
|
273
271
|
}
|
|
274
272
|
if (handleErrorFunc) {
|
|
@@ -287,9 +285,9 @@ var Utils = (function () {
|
|
|
287
285
|
|
|
288
286
|
class CommonUtil {
|
|
289
287
|
assign(target = {}, source = {}, isAdd = false) {
|
|
290
|
-
|
|
288
|
+
const UtilsContext = this;
|
|
291
289
|
if (Array.isArray(source)) {
|
|
292
|
-
|
|
290
|
+
const canTraverse = source.filter((item) => {
|
|
293
291
|
return typeof item === "object";
|
|
294
292
|
});
|
|
295
293
|
if (!canTraverse.length) {
|
|
@@ -305,34 +303,34 @@ var Utils = (function () {
|
|
|
305
303
|
if (isAdd) {
|
|
306
304
|
for (const sourceKeyName in source) {
|
|
307
305
|
const targetKeyName = sourceKeyName;
|
|
308
|
-
|
|
309
|
-
|
|
306
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
307
|
+
const sourceValue = Reflect.get(source, sourceKeyName);
|
|
310
308
|
if (typeof sourceValue === "object" &&
|
|
311
309
|
sourceValue != null &&
|
|
312
310
|
sourceKeyName in target &&
|
|
313
311
|
!UtilsContext.isDOM(sourceValue)) {
|
|
314
312
|
/* 源端的值是object类型,且不是元素节点 */
|
|
315
|
-
target
|
|
313
|
+
Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
316
314
|
continue;
|
|
317
315
|
}
|
|
318
|
-
target
|
|
316
|
+
Reflect.set(target, sourceKeyName, sourceValue);
|
|
319
317
|
}
|
|
320
318
|
}
|
|
321
319
|
else {
|
|
322
320
|
for (const targetKeyName in target) {
|
|
323
321
|
if (targetKeyName in source) {
|
|
324
|
-
|
|
325
|
-
|
|
322
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
323
|
+
const sourceValue = Reflect.get(source, targetKeyName);
|
|
326
324
|
if (typeof sourceValue === "object" &&
|
|
327
325
|
sourceValue != null &&
|
|
328
326
|
!UtilsContext.isDOM(sourceValue) &&
|
|
329
327
|
Object.keys(sourceValue).length) {
|
|
330
328
|
/* 源端的值是object类型,且不是元素节点 */
|
|
331
|
-
target
|
|
329
|
+
Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
332
330
|
continue;
|
|
333
331
|
}
|
|
334
332
|
/* 直接赋值 */
|
|
335
|
-
target
|
|
333
|
+
Reflect.set(target, targetKeyName, sourceValue);
|
|
336
334
|
}
|
|
337
335
|
}
|
|
338
336
|
}
|
|
@@ -340,7 +338,7 @@ var Utils = (function () {
|
|
|
340
338
|
}
|
|
341
339
|
isNull(...args) {
|
|
342
340
|
let result = true;
|
|
343
|
-
|
|
341
|
+
const checkList = [...args];
|
|
344
342
|
for (const objItem of checkList) {
|
|
345
343
|
let itemResult = false;
|
|
346
344
|
if (objItem === null || objItem === undefined) {
|
|
@@ -366,11 +364,12 @@ var Utils = (function () {
|
|
|
366
364
|
case "boolean":
|
|
367
365
|
itemResult = !objItem;
|
|
368
366
|
break;
|
|
369
|
-
case "function":
|
|
370
|
-
|
|
367
|
+
case "function": {
|
|
368
|
+
const funcStr = objItem.toString().replace(/\s/g, "");
|
|
371
369
|
/* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
|
|
372
370
|
itemResult = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
|
|
373
371
|
break;
|
|
372
|
+
}
|
|
374
373
|
}
|
|
375
374
|
}
|
|
376
375
|
result = result && itemResult;
|
|
@@ -391,18 +390,23 @@ var Utils = (function () {
|
|
|
391
390
|
return target instanceof Node;
|
|
392
391
|
}
|
|
393
392
|
isNotNull(...args) {
|
|
394
|
-
|
|
393
|
+
const UtilsContext = this;
|
|
395
394
|
return !UtilsContext.isNull.apply(this, args);
|
|
396
395
|
}
|
|
397
396
|
deepClone(obj) {
|
|
398
|
-
|
|
397
|
+
const UtilsContext = this;
|
|
399
398
|
if (obj === void 0)
|
|
400
399
|
return void 0;
|
|
401
400
|
if (obj === null)
|
|
402
401
|
return null;
|
|
403
|
-
|
|
402
|
+
const clone = obj instanceof Array ? [] : {};
|
|
404
403
|
for (const [key, value] of Object.entries(obj)) {
|
|
405
|
-
|
|
404
|
+
if (typeof value === "object") {
|
|
405
|
+
Reflect.set(clone, key, UtilsContext.deepClone(value));
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
Reflect.set(clone, key, value);
|
|
409
|
+
}
|
|
406
410
|
}
|
|
407
411
|
return clone;
|
|
408
412
|
}
|
|
@@ -429,11 +433,11 @@ var Utils = (function () {
|
|
|
429
433
|
}
|
|
430
434
|
TryCatch()
|
|
431
435
|
.config({ log: false })
|
|
432
|
-
.error((
|
|
436
|
+
.error(() => {
|
|
433
437
|
TryCatch()
|
|
434
438
|
.error(() => {
|
|
435
439
|
try {
|
|
436
|
-
result = new Function(
|
|
440
|
+
result = new Function(`return ${data}`)();
|
|
437
441
|
}
|
|
438
442
|
catch (error2) {
|
|
439
443
|
if (typeof errorCallBack === "function") {
|
|
@@ -444,14 +448,14 @@ var Utils = (function () {
|
|
|
444
448
|
.run(() => {
|
|
445
449
|
if (data &&
|
|
446
450
|
/^[\],:{}\s]*$/.test(data
|
|
447
|
-
.replace(/\\(?:["
|
|
448
|
-
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][
|
|
451
|
+
.replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
|
|
452
|
+
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
|
|
449
453
|
.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
|
|
450
|
-
result = new Function(
|
|
454
|
+
result = new Function(`return ${data}`)();
|
|
451
455
|
}
|
|
452
456
|
else {
|
|
453
457
|
if (typeof errorCallBack === "function") {
|
|
454
|
-
errorCallBack(new Error("target is not
|
|
458
|
+
errorCallBack(new Error("target is not JSON object"));
|
|
455
459
|
}
|
|
456
460
|
}
|
|
457
461
|
});
|
|
@@ -463,7 +467,7 @@ var Utils = (function () {
|
|
|
463
467
|
return result;
|
|
464
468
|
}
|
|
465
469
|
}
|
|
466
|
-
|
|
470
|
+
const commonUtil = new CommonUtil();
|
|
467
471
|
|
|
468
472
|
class UtilsGMCookie {
|
|
469
473
|
windowApi = {
|
|
@@ -492,14 +496,14 @@ var Utils = (function () {
|
|
|
492
496
|
if (typeof cookieName !== "string") {
|
|
493
497
|
throw new TypeError("Utils.GMCookie.get 参数cookieName 必须为字符串");
|
|
494
498
|
}
|
|
495
|
-
|
|
499
|
+
const cookies = this.getCookiesList();
|
|
496
500
|
let findValue = void 0;
|
|
497
501
|
for (const cookieItem of cookies) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
502
|
+
const item = cookieItem.trim();
|
|
503
|
+
const itemSplit = item.split("=");
|
|
504
|
+
const itemName = itemSplit[0];
|
|
501
505
|
itemSplit.splice(0, 1);
|
|
502
|
-
|
|
506
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
503
507
|
if (itemName === cookieName) {
|
|
504
508
|
findValue = {
|
|
505
509
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -529,7 +533,7 @@ var Utils = (function () {
|
|
|
529
533
|
if (option == null) {
|
|
530
534
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
531
535
|
}
|
|
532
|
-
|
|
536
|
+
const resultData = [];
|
|
533
537
|
try {
|
|
534
538
|
let defaultOption = {
|
|
535
539
|
url: this.windowApi.window.location.href,
|
|
@@ -538,16 +542,16 @@ var Utils = (function () {
|
|
|
538
542
|
path: "/",
|
|
539
543
|
};
|
|
540
544
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
541
|
-
|
|
545
|
+
const cookies = this.getCookiesList();
|
|
542
546
|
cookies.forEach((item) => {
|
|
543
547
|
item = item.trim();
|
|
544
|
-
|
|
545
|
-
|
|
548
|
+
const itemSplit = item.split("=");
|
|
549
|
+
const itemName = itemSplit[0];
|
|
546
550
|
itemSplit.splice(0, 1);
|
|
547
|
-
|
|
548
|
-
|
|
551
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
552
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
549
553
|
? defaultOption.name
|
|
550
|
-
: new RegExp(
|
|
554
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
551
555
|
if (itemName.match(nameRegexp)) {
|
|
552
556
|
resultData.push({
|
|
553
557
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -581,7 +585,7 @@ var Utils = (function () {
|
|
|
581
585
|
if (option == null) {
|
|
582
586
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
583
587
|
}
|
|
584
|
-
|
|
588
|
+
const resultData = [];
|
|
585
589
|
let defaultOption = {
|
|
586
590
|
url: this.windowApi.window.location.href,
|
|
587
591
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -589,16 +593,16 @@ var Utils = (function () {
|
|
|
589
593
|
path: "/",
|
|
590
594
|
};
|
|
591
595
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
592
|
-
|
|
596
|
+
const cookies = this.getCookiesList();
|
|
593
597
|
cookies.forEach((item) => {
|
|
594
598
|
item = item.trim();
|
|
595
|
-
|
|
596
|
-
|
|
599
|
+
const itemSplit = item.split("=");
|
|
600
|
+
const itemName = itemSplit[0];
|
|
597
601
|
itemSplit.splice(0, 1);
|
|
598
|
-
|
|
599
|
-
|
|
602
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
603
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
600
604
|
? defaultOption.name
|
|
601
|
-
: new RegExp(
|
|
605
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
602
606
|
if (itemName.match(nameRegexp)) {
|
|
603
607
|
resultData.push({
|
|
604
608
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -638,17 +642,12 @@ var Utils = (function () {
|
|
|
638
642
|
expirationDate: Math.floor(Date.now()) + 60 * 60 * 24 * 30,
|
|
639
643
|
};
|
|
640
644
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
641
|
-
|
|
645
|
+
const life = defaultOption.expirationDate
|
|
642
646
|
? defaultOption.expirationDate
|
|
643
647
|
: Math.floor(Date.now()) + 60 * 60 * 24 * 30;
|
|
644
|
-
let cookieStr = defaultOption.name
|
|
645
|
-
"=" +
|
|
646
|
-
decodeURIComponent(defaultOption.value) +
|
|
647
|
-
";expires=" +
|
|
648
|
-
new Date(life).toGMTString() +
|
|
649
|
-
"; path=/";
|
|
648
|
+
let cookieStr = `${defaultOption.name}=${decodeURIComponent(defaultOption.value)};expires=${new Date(life).toGMTString()}; path=/`;
|
|
650
649
|
if (commonUtil.isNull(defaultOption.domain)) {
|
|
651
|
-
cookieStr +=
|
|
650
|
+
cookieStr += `; domain=${defaultOption.domain}`;
|
|
652
651
|
}
|
|
653
652
|
this.windowApi.document.cookie = cookieStr;
|
|
654
653
|
}
|
|
@@ -700,14 +699,14 @@ var Utils = (function () {
|
|
|
700
699
|
if (cookieStr.trim() === "") {
|
|
701
700
|
return [];
|
|
702
701
|
}
|
|
703
|
-
|
|
704
|
-
|
|
702
|
+
const cookies = cookieStr.split(";");
|
|
703
|
+
const result = [];
|
|
705
704
|
for (const cookieItem of cookies) {
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
705
|
+
const item = cookieItem.trim();
|
|
706
|
+
const itemSplit = item.split("=");
|
|
707
|
+
const itemName = itemSplit[0];
|
|
709
708
|
itemSplit.splice(0, 1);
|
|
710
|
-
|
|
709
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
711
710
|
result.push({
|
|
712
711
|
key: itemName,
|
|
713
712
|
value: itemValue,
|
|
@@ -717,6 +716,7 @@ var Utils = (function () {
|
|
|
717
716
|
}
|
|
718
717
|
}
|
|
719
718
|
|
|
719
|
+
/* eslint-disable */
|
|
720
720
|
// ==UserScript==
|
|
721
721
|
// @name ajaxHooker
|
|
722
722
|
// @author cxxjackie
|
|
@@ -1767,15 +1767,15 @@ var Utils = (function () {
|
|
|
1767
1767
|
*/
|
|
1768
1768
|
init() {
|
|
1769
1769
|
for (let index = 0; index < this.$data.data.length; index++) {
|
|
1770
|
-
|
|
1770
|
+
const menuOption = this.$data.data[index]["data"];
|
|
1771
1771
|
menuOption.enable = Boolean(this.getLocalMenuData(menuOption.key, menuOption.enable));
|
|
1772
1772
|
if (typeof menuOption.showText !== "function") {
|
|
1773
1773
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1774
1774
|
if (menuEnable) {
|
|
1775
|
-
return this.$emoji.success
|
|
1775
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1776
1776
|
}
|
|
1777
1777
|
else {
|
|
1778
|
-
return this.$emoji.error
|
|
1778
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1779
1779
|
}
|
|
1780
1780
|
};
|
|
1781
1781
|
}
|
|
@@ -1786,7 +1786,7 @@ var Utils = (function () {
|
|
|
1786
1786
|
* @param menuOptions 如果存在,使用它
|
|
1787
1787
|
*/
|
|
1788
1788
|
register(menuOptions) {
|
|
1789
|
-
|
|
1789
|
+
const that = this;
|
|
1790
1790
|
if (menuOptions == null) {
|
|
1791
1791
|
throw new TypeError("register菜单数据不能为空");
|
|
1792
1792
|
}
|
|
@@ -1794,9 +1794,9 @@ var Utils = (function () {
|
|
|
1794
1794
|
menuOptions = [menuOptions];
|
|
1795
1795
|
}
|
|
1796
1796
|
for (let index = 0; index < menuOptions.length; index++) {
|
|
1797
|
-
|
|
1797
|
+
const cloneMenuOptionData = commonUtil.deepClone(menuOptions[index].data);
|
|
1798
1798
|
const { showText, clickCallBack } = this.handleMenuData(cloneMenuOptionData);
|
|
1799
|
-
|
|
1799
|
+
const menuId = that.context.GM_Api.registerMenuCommand(showText, clickCallBack);
|
|
1800
1800
|
menuOptions[index].id = menuId;
|
|
1801
1801
|
cloneMenuOptionData.deleteMenu = function () {
|
|
1802
1802
|
that.context.GM_Api.unregisterMenuCommand(menuId);
|
|
@@ -1810,7 +1810,7 @@ var Utils = (function () {
|
|
|
1810
1810
|
* @param {string} key 键
|
|
1811
1811
|
*/
|
|
1812
1812
|
getLocalMenuData(key, defaultValue) {
|
|
1813
|
-
|
|
1813
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1814
1814
|
if (key in localData) {
|
|
1815
1815
|
return localData[key];
|
|
1816
1816
|
}
|
|
@@ -1824,7 +1824,7 @@ var Utils = (function () {
|
|
|
1824
1824
|
* @param value 值
|
|
1825
1825
|
*/
|
|
1826
1826
|
setLocalMenuData(key, value) {
|
|
1827
|
-
|
|
1827
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1828
1828
|
localData[key] = value;
|
|
1829
1829
|
this.context.GM_Api.setValue(this.$data.key, localData);
|
|
1830
1830
|
},
|
|
@@ -1837,10 +1837,10 @@ var Utils = (function () {
|
|
|
1837
1837
|
if (typeof menuOption.showText !== "function") {
|
|
1838
1838
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1839
1839
|
if (menuEnable) {
|
|
1840
|
-
return this.$emoji.success
|
|
1840
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1841
1841
|
}
|
|
1842
1842
|
else {
|
|
1843
|
-
return this.$emoji.error
|
|
1843
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1844
1844
|
}
|
|
1845
1845
|
};
|
|
1846
1846
|
}
|
|
@@ -1851,12 +1851,12 @@ var Utils = (function () {
|
|
|
1851
1851
|
* @param menuOption
|
|
1852
1852
|
*/
|
|
1853
1853
|
handleMenuData(menuOption) {
|
|
1854
|
-
|
|
1855
|
-
|
|
1854
|
+
const that = this;
|
|
1855
|
+
const menuLocalDataItemKey = menuOption.key;
|
|
1856
1856
|
/* 菜单默认开启的状态 */
|
|
1857
|
-
|
|
1857
|
+
const defaultEnable = Boolean(this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable));
|
|
1858
1858
|
/** 油猴菜单上显示的文本 */
|
|
1859
|
-
|
|
1859
|
+
const showText = menuOption.showText(menuOption.text, defaultEnable);
|
|
1860
1860
|
// const GMMenuOptions = {
|
|
1861
1861
|
// /**
|
|
1862
1862
|
// * 菜单的id
|
|
@@ -1886,7 +1886,7 @@ var Utils = (function () {
|
|
|
1886
1886
|
* @param event
|
|
1887
1887
|
*/
|
|
1888
1888
|
function clickCallBack(event) {
|
|
1889
|
-
|
|
1889
|
+
const localEnable = Boolean(that.getLocalMenuData(menuLocalDataItemKey, defaultEnable));
|
|
1890
1890
|
if (menuOption.isStoreValue) {
|
|
1891
1891
|
that.setLocalMenuData(menuLocalDataItemKey, !localEnable);
|
|
1892
1892
|
}
|
|
@@ -1999,7 +1999,7 @@ var Utils = (function () {
|
|
|
1999
1999
|
menuOptionList = [...menuOptionList, options];
|
|
2000
2000
|
}
|
|
2001
2001
|
menuOptionList.forEach((menuOption) => {
|
|
2002
|
-
|
|
2002
|
+
const oldMenuOption = this.MenuHandle.getMenuOption(menuOption.key);
|
|
2003
2003
|
if (oldMenuOption) {
|
|
2004
2004
|
// 覆盖
|
|
2005
2005
|
Object.assign(oldMenuOption, menuOption);
|
|
@@ -2167,42 +2167,42 @@ var Utils = (function () {
|
|
|
2167
2167
|
* 在Function原型上添加自定义方法.hook和.unhook
|
|
2168
2168
|
*/
|
|
2169
2169
|
initEnv() {
|
|
2170
|
-
Function.prototype.hook = function (
|
|
2170
|
+
Function.prototype.hook = function (_, hookFunc, context) {
|
|
2171
2171
|
let _context = null; //函数上下文
|
|
2172
2172
|
let _funcName = null; //函数名
|
|
2173
2173
|
_context = context || window;
|
|
2174
2174
|
_funcName = getFuncName(this);
|
|
2175
|
-
_context[
|
|
2175
|
+
_context[`realFunc_${_funcName}`] = this;
|
|
2176
2176
|
if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
|
|
2177
2177
|
console.log("Already has been hooked,unhook first");
|
|
2178
2178
|
return false;
|
|
2179
2179
|
}
|
|
2180
2180
|
function getFuncName(fn) {
|
|
2181
2181
|
// 获取函数名
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2182
|
+
const strFunc = fn.toString();
|
|
2183
|
+
const _regex = /function\s+(\w+)\s*\(/;
|
|
2184
|
+
const patten = strFunc.match(_regex);
|
|
2185
2185
|
if (patten) {
|
|
2186
2186
|
return patten[1];
|
|
2187
2187
|
}
|
|
2188
2188
|
return "";
|
|
2189
2189
|
}
|
|
2190
2190
|
try {
|
|
2191
|
-
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2192
|
-
let args = Array.prototype.slice.call(arguments, 0);
|
|
2193
|
-
let obj = this;
|
|
2194
|
-
hookFunc.apply(obj, args);
|
|
2195
|
-
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2191
|
+
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2192
|
+
let args = Array.prototype.slice.call(arguments, 0);
|
|
2193
|
+
let obj = this;
|
|
2194
|
+
hookFunc.apply(obj, args);
|
|
2195
|
+
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2196
2196
|
};`)(_context, _funcName, hookFunc);
|
|
2197
2197
|
_context[_funcName].prototype.isHooked = true;
|
|
2198
2198
|
return true;
|
|
2199
2199
|
}
|
|
2200
2200
|
catch (e) {
|
|
2201
|
-
console.log("Hook failed,check the params.");
|
|
2201
|
+
console.log("Hook failed,check the params.", e);
|
|
2202
2202
|
return false;
|
|
2203
2203
|
}
|
|
2204
2204
|
};
|
|
2205
|
-
Function.prototype.unhook = function (
|
|
2205
|
+
Function.prototype.unhook = function (_, funcName, context) {
|
|
2206
2206
|
let _context = null;
|
|
2207
2207
|
let _funcName = null;
|
|
2208
2208
|
_context = context || window;
|
|
@@ -2211,8 +2211,8 @@ var Utils = (function () {
|
|
|
2211
2211
|
console.log("No function is hooked on");
|
|
2212
2212
|
return false;
|
|
2213
2213
|
}
|
|
2214
|
-
_context[_funcName] = _context[
|
|
2215
|
-
Reflect.deleteProperty(_context,
|
|
2214
|
+
_context[_funcName] = _context[`realFunc${_funcName}`];
|
|
2215
|
+
Reflect.deleteProperty(_context, `realFunc_${_funcName}`);
|
|
2216
2216
|
return true;
|
|
2217
2217
|
};
|
|
2218
2218
|
}
|
|
@@ -2220,10 +2220,10 @@ var Utils = (function () {
|
|
|
2220
2220
|
* 删除在Function原型上添加的自定义方法.hook和.unhook
|
|
2221
2221
|
*/
|
|
2222
2222
|
cleanEnv() {
|
|
2223
|
-
if (
|
|
2223
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "hook")) {
|
|
2224
2224
|
Reflect.deleteProperty(Function.prototype, "hook");
|
|
2225
2225
|
}
|
|
2226
|
-
if (
|
|
2226
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "unhook")) {
|
|
2227
2227
|
Reflect.deleteProperty(Function.prototype, "unhook");
|
|
2228
2228
|
}
|
|
2229
2229
|
return true;
|
|
@@ -2239,7 +2239,7 @@ var Utils = (function () {
|
|
|
2239
2239
|
}
|
|
2240
2240
|
else {
|
|
2241
2241
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (charStr) {
|
|
2242
|
-
|
|
2242
|
+
const randomValue = (Math.random() * 16) | 0, randomCharValue = charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
|
|
2243
2243
|
return randomCharValue.toString(16);
|
|
2244
2244
|
});
|
|
2245
2245
|
}
|
|
@@ -2281,9 +2281,9 @@ var Utils = (function () {
|
|
|
2281
2281
|
}
|
|
2282
2282
|
}
|
|
2283
2283
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2284
|
-
|
|
2284
|
+
const item = this.$config.configList[index];
|
|
2285
2285
|
if (typeof item.fn === "function") {
|
|
2286
|
-
|
|
2286
|
+
const result = await item.fn(details);
|
|
2287
2287
|
if (result == null) {
|
|
2288
2288
|
return;
|
|
2289
2289
|
}
|
|
@@ -2296,7 +2296,7 @@ var Utils = (function () {
|
|
|
2296
2296
|
*/
|
|
2297
2297
|
add(fn) {
|
|
2298
2298
|
if (typeof fn === "function") {
|
|
2299
|
-
|
|
2299
|
+
const uuid = GenerateUUID();
|
|
2300
2300
|
this.$config.configList.push({
|
|
2301
2301
|
id: uuid,
|
|
2302
2302
|
fn: fn,
|
|
@@ -2313,7 +2313,7 @@ var Utils = (function () {
|
|
|
2313
2313
|
*/
|
|
2314
2314
|
delete(id) {
|
|
2315
2315
|
if (typeof id === "string") {
|
|
2316
|
-
|
|
2316
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2317
2317
|
if (findIndex !== -1) {
|
|
2318
2318
|
this.$config.configList.splice(findIndex, 1);
|
|
2319
2319
|
return true;
|
|
@@ -2359,9 +2359,9 @@ var Utils = (function () {
|
|
|
2359
2359
|
}
|
|
2360
2360
|
}
|
|
2361
2361
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2362
|
-
|
|
2362
|
+
const item = this.$config.configList[index];
|
|
2363
2363
|
if (typeof item.successFn === "function") {
|
|
2364
|
-
|
|
2364
|
+
const result = await item.successFn(response, details);
|
|
2365
2365
|
if (result == null) {
|
|
2366
2366
|
return;
|
|
2367
2367
|
}
|
|
@@ -2394,9 +2394,9 @@ var Utils = (function () {
|
|
|
2394
2394
|
}
|
|
2395
2395
|
}
|
|
2396
2396
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2397
|
-
|
|
2397
|
+
const item = this.$config.configList[index];
|
|
2398
2398
|
if (typeof item.errorFn === "function") {
|
|
2399
|
-
|
|
2399
|
+
const result = await item.errorFn(data);
|
|
2400
2400
|
if (result == null) {
|
|
2401
2401
|
return;
|
|
2402
2402
|
}
|
|
@@ -2408,7 +2408,7 @@ var Utils = (function () {
|
|
|
2408
2408
|
* 添加请求前的回调处理配置
|
|
2409
2409
|
*/
|
|
2410
2410
|
add(successFn, errorFn) {
|
|
2411
|
-
|
|
2411
|
+
const id = GenerateUUID();
|
|
2412
2412
|
this.$config.configList.push({
|
|
2413
2413
|
id: id,
|
|
2414
2414
|
successFn: successFn,
|
|
@@ -2422,7 +2422,7 @@ var Utils = (function () {
|
|
|
2422
2422
|
*/
|
|
2423
2423
|
delete(id) {
|
|
2424
2424
|
if (typeof id === "string") {
|
|
2425
|
-
|
|
2425
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2426
2426
|
if (findIndex !== -1) {
|
|
2427
2427
|
this.$config.configList.splice(findIndex, 1);
|
|
2428
2428
|
return true;
|
|
@@ -2443,23 +2443,23 @@ var Utils = (function () {
|
|
|
2443
2443
|
* 对请求的参数进行合并处理
|
|
2444
2444
|
*/
|
|
2445
2445
|
handleBeforeRequestOptionArgs(...args) {
|
|
2446
|
-
|
|
2446
|
+
const option = {
|
|
2447
2447
|
url: void 0,
|
|
2448
2448
|
};
|
|
2449
2449
|
if (typeof args[0] === "string") {
|
|
2450
2450
|
/* 传入的是url,转为配置 */
|
|
2451
|
-
|
|
2451
|
+
const url = args[0];
|
|
2452
2452
|
option.url = url;
|
|
2453
2453
|
if (typeof args[1] === "object") {
|
|
2454
2454
|
/* 处理第二个参数details */
|
|
2455
|
-
|
|
2455
|
+
const optionArg = args[1];
|
|
2456
2456
|
commonUtil.assign(option, optionArg, true);
|
|
2457
2457
|
option.url = url;
|
|
2458
2458
|
}
|
|
2459
2459
|
}
|
|
2460
2460
|
else {
|
|
2461
2461
|
/* 传入的是配置 */
|
|
2462
|
-
|
|
2462
|
+
const optionArg = args[0];
|
|
2463
2463
|
commonUtil.assign(option, optionArg, true);
|
|
2464
2464
|
}
|
|
2465
2465
|
return option;
|
|
@@ -2472,7 +2472,7 @@ var Utils = (function () {
|
|
|
2472
2472
|
* @param reject promise抛出错误回调
|
|
2473
2473
|
*/
|
|
2474
2474
|
getRequestOption(method, userRequestOption, resolve, reject) {
|
|
2475
|
-
|
|
2475
|
+
const that = this;
|
|
2476
2476
|
let url = userRequestOption.url || this.context.#defaultRequestOption.url;
|
|
2477
2477
|
if (typeof url === "string") {
|
|
2478
2478
|
// 去除左右空格
|
|
@@ -2485,7 +2485,7 @@ var Utils = (function () {
|
|
|
2485
2485
|
}
|
|
2486
2486
|
}
|
|
2487
2487
|
}
|
|
2488
|
-
|
|
2488
|
+
const requestOption = {
|
|
2489
2489
|
url: url,
|
|
2490
2490
|
method: (method || "GET").toString().toUpperCase().trim(),
|
|
2491
2491
|
timeout: userRequestOption.timeout || this.context.#defaultRequestOption.timeout,
|
|
@@ -2507,9 +2507,12 @@ var Utils = (function () {
|
|
|
2507
2507
|
/* 对象使用深拷贝 */
|
|
2508
2508
|
fetchInit: commonUtil.deepClone(this.context.#defaultRequestOption.fetchInit),
|
|
2509
2509
|
allowInterceptConfig: {
|
|
2510
|
-
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2511
|
-
|
|
2512
|
-
|
|
2510
|
+
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2511
|
+
.beforeRequest,
|
|
2512
|
+
afterResponseSuccess: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2513
|
+
.afterResponseSuccess,
|
|
2514
|
+
afterResponseError: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2515
|
+
.afterResponseError,
|
|
2513
2516
|
},
|
|
2514
2517
|
user: userRequestOption.user || this.context.#defaultRequestOption.user,
|
|
2515
2518
|
password: userRequestOption.password || this.context.#defaultRequestOption.password,
|
|
@@ -2537,15 +2540,17 @@ var Utils = (function () {
|
|
|
2537
2540
|
};
|
|
2538
2541
|
// 补全allowInterceptConfig参数
|
|
2539
2542
|
if (typeof userRequestOption.allowInterceptConfig === "boolean") {
|
|
2540
|
-
Object.keys(requestOption.allowInterceptConfig)
|
|
2543
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2544
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2541
2545
|
Reflect.set(requestOption.allowInterceptConfig, keyName, userRequestOption.allowInterceptConfig);
|
|
2542
2546
|
});
|
|
2543
2547
|
}
|
|
2544
2548
|
else {
|
|
2545
2549
|
if (typeof userRequestOption.allowInterceptConfig === "object" &&
|
|
2546
2550
|
userRequestOption.allowInterceptConfig != null) {
|
|
2547
|
-
Object.keys(
|
|
2548
|
-
|
|
2551
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2552
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2553
|
+
const value = Reflect.get(userRequestOption.allowInterceptConfig, keyName);
|
|
2549
2554
|
if (typeof value === "boolean" &&
|
|
2550
2555
|
Reflect.has(requestOption.allowInterceptConfig, keyName)) {
|
|
2551
2556
|
Reflect.set(requestOption.allowInterceptConfig, keyName, value);
|
|
@@ -2559,7 +2564,8 @@ var Utils = (function () {
|
|
|
2559
2564
|
}
|
|
2560
2565
|
if (typeof requestOption.headers === "object") {
|
|
2561
2566
|
if (typeof userRequestOption.headers === "object") {
|
|
2562
|
-
Object.keys(
|
|
2567
|
+
const headerKeys = Object.keys(requestOption.headers);
|
|
2568
|
+
headerKeys.forEach((keyName) => {
|
|
2563
2569
|
if (keyName in requestOption.headers && userRequestOption.headers?.[keyName] == null) {
|
|
2564
2570
|
/* 在默认的header中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2565
2571
|
Reflect.deleteProperty(requestOption.headers, keyName);
|
|
@@ -2577,8 +2583,9 @@ var Utils = (function () {
|
|
|
2577
2583
|
if (typeof requestOption.fetchInit === "object") {
|
|
2578
2584
|
/* 使用assign替换且添加 */
|
|
2579
2585
|
if (typeof userRequestOption.fetchInit === "object") {
|
|
2580
|
-
Object.keys(
|
|
2581
|
-
|
|
2586
|
+
const fetchInitKeys = Object.keys(requestOption.fetchInit);
|
|
2587
|
+
fetchInitKeys.forEach((keyName) => {
|
|
2588
|
+
if (keyName in requestOption.fetchInit && Reflect.get(userRequestOption.fetchInit ?? {}, keyName) == null) {
|
|
2582
2589
|
/* 在默认的fetchInit中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2583
2590
|
Reflect.deleteProperty(requestOption.fetchInit, keyName);
|
|
2584
2591
|
}
|
|
@@ -2603,7 +2610,7 @@ var Utils = (function () {
|
|
|
2603
2610
|
try {
|
|
2604
2611
|
new URL(requestOption.url);
|
|
2605
2612
|
}
|
|
2606
|
-
catch
|
|
2613
|
+
catch {
|
|
2607
2614
|
if (requestOption.url.startsWith("//")) {
|
|
2608
2615
|
// 补充https:
|
|
2609
2616
|
requestOption.url = globalThis.location.protocol + requestOption.url;
|
|
@@ -2614,7 +2621,7 @@ var Utils = (function () {
|
|
|
2614
2621
|
}
|
|
2615
2622
|
else {
|
|
2616
2623
|
// 补充origin+/
|
|
2617
|
-
requestOption.url = globalThis.location.origin
|
|
2624
|
+
requestOption.url = `${globalThis.location.origin}/${requestOption.url}`;
|
|
2618
2625
|
}
|
|
2619
2626
|
}
|
|
2620
2627
|
if (requestOption.fetchInit && !requestOption.fetch) {
|
|
@@ -2624,12 +2631,12 @@ var Utils = (function () {
|
|
|
2624
2631
|
// 转换data类型
|
|
2625
2632
|
try {
|
|
2626
2633
|
/** 是否对数据进行处理 */
|
|
2627
|
-
|
|
2634
|
+
const processData = userRequestOption.processData ?? true;
|
|
2628
2635
|
if (requestOption.data != null && processData) {
|
|
2629
|
-
|
|
2636
|
+
const method = requestOption.method;
|
|
2630
2637
|
if (method === "GET" || method === "HEAD") {
|
|
2631
2638
|
// GET类型,data如果有,那么需要转为searchParams
|
|
2632
|
-
|
|
2639
|
+
const urlObj = new URL(requestOption.url);
|
|
2633
2640
|
let urlSearch = "";
|
|
2634
2641
|
let isHandler = false;
|
|
2635
2642
|
if (typeof requestOption.data === "string") {
|
|
@@ -2639,7 +2646,7 @@ var Utils = (function () {
|
|
|
2639
2646
|
else if (typeof requestOption.data === "object") {
|
|
2640
2647
|
isHandler = true;
|
|
2641
2648
|
// URLSearchParams参数可以转普通的string:string,包括FormData
|
|
2642
|
-
|
|
2649
|
+
const searchParams = new URLSearchParams(requestOption.data);
|
|
2643
2650
|
urlSearch = searchParams.toString();
|
|
2644
2651
|
}
|
|
2645
2652
|
if (isHandler) {
|
|
@@ -2660,7 +2667,7 @@ var Utils = (function () {
|
|
|
2660
2667
|
}
|
|
2661
2668
|
else {
|
|
2662
2669
|
// xxx=xxx&xxx=
|
|
2663
|
-
urlObj.search = urlObj.search
|
|
2670
|
+
urlObj.search = `${urlObj.search}&${urlSearch}`;
|
|
2664
2671
|
}
|
|
2665
2672
|
}
|
|
2666
2673
|
}
|
|
@@ -2668,14 +2675,14 @@ var Utils = (function () {
|
|
|
2668
2675
|
}
|
|
2669
2676
|
else if (method === "POST" && requestOption.headers != null) {
|
|
2670
2677
|
// POST类型,data如果是FormData,那么需要转为string
|
|
2671
|
-
|
|
2672
|
-
|
|
2678
|
+
const headersKeyList = Object.keys(requestOption.headers);
|
|
2679
|
+
const ContentTypeIndex = headersKeyList.findIndex((headerKey) => {
|
|
2673
2680
|
return (headerKey.trim().toLowerCase() === "content-type" &&
|
|
2674
2681
|
typeof requestOption.headers[headerKey] === "string");
|
|
2675
2682
|
});
|
|
2676
2683
|
if (ContentTypeIndex !== -1) {
|
|
2677
|
-
|
|
2678
|
-
|
|
2684
|
+
const ContentTypeKey = headersKeyList[ContentTypeIndex];
|
|
2685
|
+
const ContentType = requestOption.headers[ContentTypeKey];
|
|
2679
2686
|
// 设置了Content-Type
|
|
2680
2687
|
if (ContentType.includes("application/json")) {
|
|
2681
2688
|
// application/json
|
|
@@ -2716,10 +2723,10 @@ var Utils = (function () {
|
|
|
2716
2723
|
* @param option 请求配置
|
|
2717
2724
|
*/
|
|
2718
2725
|
removeRequestNullOption(option) {
|
|
2719
|
-
Object.keys(option)
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2726
|
+
const optionKeys = Object.keys(option);
|
|
2727
|
+
optionKeys.forEach((keyName) => {
|
|
2728
|
+
const optionValue = option[keyName];
|
|
2729
|
+
if (optionValue == null || (optionValue instanceof Function && commonUtil.isNull(optionValue))) {
|
|
2723
2730
|
Reflect.deleteProperty(option, keyName);
|
|
2724
2731
|
return;
|
|
2725
2732
|
}
|
|
@@ -2737,14 +2744,14 @@ var Utils = (function () {
|
|
|
2737
2744
|
/**
|
|
2738
2745
|
* fetch的请求配置
|
|
2739
2746
|
**/
|
|
2740
|
-
|
|
2747
|
+
const fetchRequestOption = {};
|
|
2741
2748
|
if ((option.method === "GET" || option.method === "HEAD") && option.data != null) {
|
|
2742
2749
|
/* GET 或 HEAD 方法的请求不能包含 body 信息 */
|
|
2743
2750
|
Reflect.deleteProperty(option, "data");
|
|
2744
2751
|
}
|
|
2745
2752
|
/* 中止信号控制器 */
|
|
2746
|
-
|
|
2747
|
-
|
|
2753
|
+
const abortController = new AbortController();
|
|
2754
|
+
const signal = abortController.signal;
|
|
2748
2755
|
signal.onabort = () => {
|
|
2749
2756
|
option.onabort({
|
|
2750
2757
|
isFetch: true,
|
|
@@ -2789,10 +2796,10 @@ var Utils = (function () {
|
|
|
2789
2796
|
* onabort请求被取消-触发
|
|
2790
2797
|
* @param details 配置
|
|
2791
2798
|
* @param resolve promise回调
|
|
2792
|
-
* @param
|
|
2799
|
+
* @param _reject promise抛出错误回调
|
|
2793
2800
|
* @param argsResult 返回的参数列表
|
|
2794
2801
|
*/
|
|
2795
|
-
async onAbort(details, resolve,
|
|
2802
|
+
async onAbort(details, resolve, _reject, argsResult) {
|
|
2796
2803
|
// console.log(argsResult);
|
|
2797
2804
|
if (typeof details?.onabort === "function") {
|
|
2798
2805
|
details.onabort.apply(this, argsResult);
|
|
@@ -2829,7 +2836,7 @@ var Utils = (function () {
|
|
|
2829
2836
|
* @param reject 抛出错误
|
|
2830
2837
|
* @param argsResult 返回的参数列表
|
|
2831
2838
|
*/
|
|
2832
|
-
async onTimeout(details, resolve,
|
|
2839
|
+
async onTimeout(details, resolve, _reject, argsResult) {
|
|
2833
2840
|
// console.log(argsResult);
|
|
2834
2841
|
if (typeof details?.ontimeout === "function") {
|
|
2835
2842
|
// 执行配置中的ontime回调
|
|
@@ -2867,10 +2874,10 @@ var Utils = (function () {
|
|
|
2867
2874
|
* onerror请求异常-触发
|
|
2868
2875
|
* @param details 配置
|
|
2869
2876
|
* @param resolve 回调
|
|
2870
|
-
* @param
|
|
2877
|
+
* @param _reject 抛出错误
|
|
2871
2878
|
* @param argsResult 返回的参数列表
|
|
2872
2879
|
*/
|
|
2873
|
-
async onError(details, resolve,
|
|
2880
|
+
async onError(details, resolve, _reject, argsResult) {
|
|
2874
2881
|
// console.log(argsResult);
|
|
2875
2882
|
if (typeof details?.onerror === "function") {
|
|
2876
2883
|
details.onerror.apply(this, argsResult);
|
|
@@ -2904,16 +2911,15 @@ var Utils = (function () {
|
|
|
2904
2911
|
* onload加载完毕-触发
|
|
2905
2912
|
* @param details 请求的配置
|
|
2906
2913
|
* @param resolve 回调
|
|
2907
|
-
* @param
|
|
2914
|
+
* @param _reject 抛出错误
|
|
2908
2915
|
* @param argsResult 返回的参数列表
|
|
2909
2916
|
*/
|
|
2910
|
-
async onLoad(details, resolve,
|
|
2917
|
+
async onLoad(details, resolve, _reject, argsResult) {
|
|
2911
2918
|
// console.log(argsResult);
|
|
2912
2919
|
/* X浏览器会因为设置了responseType导致不返回responseText */
|
|
2913
|
-
|
|
2920
|
+
const originResponse = argsResult[0];
|
|
2914
2921
|
/* responseText为空,response不为空的情况 */
|
|
2915
|
-
if (commonUtil.isNull(originResponse["responseText"]) &&
|
|
2916
|
-
commonUtil.isNotNull(originResponse["response"])) {
|
|
2922
|
+
if (commonUtil.isNull(originResponse["responseText"]) && commonUtil.isNotNull(originResponse["response"])) {
|
|
2917
2923
|
if (typeof originResponse["response"] === "object") {
|
|
2918
2924
|
TryCatch().run(() => {
|
|
2919
2925
|
originResponse["responseText"] = JSON.stringify(originResponse["response"]);
|
|
@@ -2928,51 +2934,51 @@ var Utils = (function () {
|
|
|
2928
2934
|
typeof originResponse["responseText"] === "string" &&
|
|
2929
2935
|
originResponse["responseText"].trim() !== "") {
|
|
2930
2936
|
/** 原始的请求text */
|
|
2931
|
-
|
|
2937
|
+
const httpxResponseText = originResponse.responseText;
|
|
2932
2938
|
// 自定义个新的response
|
|
2933
2939
|
let httpxResponse = httpxResponseText;
|
|
2934
2940
|
if (details.responseType === "json") {
|
|
2935
2941
|
httpxResponse = commonUtil.toJSON(httpxResponseText);
|
|
2936
2942
|
}
|
|
2937
2943
|
else if (details.responseType === "document") {
|
|
2938
|
-
|
|
2944
|
+
const parser = new DOMParser();
|
|
2939
2945
|
httpxResponse = parser.parseFromString(httpxResponseText, "text/html");
|
|
2940
2946
|
}
|
|
2941
2947
|
else if (details.responseType === "arraybuffer") {
|
|
2942
|
-
|
|
2943
|
-
|
|
2948
|
+
const encoder = new TextEncoder();
|
|
2949
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2944
2950
|
httpxResponse = arrayBuffer;
|
|
2945
2951
|
}
|
|
2946
2952
|
else if (details.responseType === "blob") {
|
|
2947
|
-
|
|
2948
|
-
|
|
2953
|
+
const encoder = new TextEncoder();
|
|
2954
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2949
2955
|
httpxResponse = new Blob([arrayBuffer]);
|
|
2950
2956
|
}
|
|
2951
2957
|
// 尝试覆盖原response
|
|
2952
2958
|
try {
|
|
2953
|
-
|
|
2959
|
+
const setStatus = Reflect.set(originResponse, "response", httpxResponse);
|
|
2954
2960
|
if (!setStatus) {
|
|
2955
2961
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 覆盖原始 response 失败,尝试添加新的httpxResponse");
|
|
2956
2962
|
try {
|
|
2957
2963
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2958
2964
|
}
|
|
2959
|
-
catch
|
|
2965
|
+
catch {
|
|
2960
2966
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2961
2967
|
}
|
|
2962
2968
|
}
|
|
2963
2969
|
}
|
|
2964
|
-
catch
|
|
2970
|
+
catch {
|
|
2965
2971
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 原始 response 无法被覆盖,尝试添加新的httpxResponse");
|
|
2966
2972
|
try {
|
|
2967
2973
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2968
2974
|
}
|
|
2969
|
-
catch
|
|
2975
|
+
catch {
|
|
2970
2976
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2971
2977
|
}
|
|
2972
2978
|
}
|
|
2973
2979
|
}
|
|
2974
2980
|
/* Stay扩展中没有finalUrl,对应的是responseURL */
|
|
2975
|
-
|
|
2981
|
+
const originResponseURL = Reflect.get(originResponse, "responseURL");
|
|
2976
2982
|
if (originResponse["finalUrl"] == null && originResponseURL != null) {
|
|
2977
2983
|
Reflect.set(originResponse, "finalUrl", originResponseURL);
|
|
2978
2984
|
}
|
|
@@ -2992,7 +2998,7 @@ var Utils = (function () {
|
|
|
2992
2998
|
});
|
|
2993
2999
|
}
|
|
2994
3000
|
else {
|
|
2995
|
-
this.context.HttpxResponseCallBack.onError(details, resolve,
|
|
3001
|
+
this.context.HttpxResponseCallBack.onError(details, resolve, _reject, argsResult);
|
|
2996
3002
|
}
|
|
2997
3003
|
},
|
|
2998
3004
|
/**
|
|
@@ -3049,7 +3055,7 @@ var Utils = (function () {
|
|
|
3049
3055
|
console.log("[Httpx-HttpxRequest.request] 请求前的配置👇", details);
|
|
3050
3056
|
}
|
|
3051
3057
|
if (typeof this.context.HttpxRequestHook.beforeRequestCallBack === "function") {
|
|
3052
|
-
|
|
3058
|
+
const hookResult = await this.context.HttpxRequestHook.beforeRequestCallBack(details);
|
|
3053
3059
|
if (hookResult == null) {
|
|
3054
3060
|
return;
|
|
3055
3061
|
}
|
|
@@ -3081,7 +3087,7 @@ var Utils = (function () {
|
|
|
3081
3087
|
fetch(option.url, fetchRequestOption)
|
|
3082
3088
|
.then(async (fetchResponse) => {
|
|
3083
3089
|
/** 自定义的response */
|
|
3084
|
-
|
|
3090
|
+
const httpxResponse = {
|
|
3085
3091
|
isFetch: true,
|
|
3086
3092
|
finalUrl: fetchResponse.url,
|
|
3087
3093
|
readyState: 4,
|
|
@@ -3096,9 +3102,9 @@ var Utils = (function () {
|
|
|
3096
3102
|
};
|
|
3097
3103
|
Object.assign(httpxResponse, option.context || {});
|
|
3098
3104
|
// 把headers转为字符串
|
|
3099
|
-
|
|
3105
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
3100
3106
|
httpxResponse.responseHeaders += `${key}: ${value}\n`;
|
|
3101
|
-
}
|
|
3107
|
+
});
|
|
3102
3108
|
/** 请求返回的类型 */
|
|
3103
3109
|
const fetchResponseType = fetchResponse.headers.get("Content-Type");
|
|
3104
3110
|
/* 如果需要stream,且获取到的是stream,那直接返回 */
|
|
@@ -3119,11 +3125,11 @@ var Utils = (function () {
|
|
|
3119
3125
|
/** 响应xml文档 */
|
|
3120
3126
|
let responseXML = "";
|
|
3121
3127
|
/** 先获取二进制数据 */
|
|
3122
|
-
|
|
3128
|
+
const arrayBuffer = await fetchResponse.arrayBuffer();
|
|
3123
3129
|
/** 数据编码 */
|
|
3124
3130
|
let encoding = "utf-8";
|
|
3125
3131
|
if (fetchResponse.headers.has("Content-Type")) {
|
|
3126
|
-
|
|
3132
|
+
const charsetMatched = fetchResponse.headers.get("Content-Type")?.match(/charset=(.+)/);
|
|
3127
3133
|
if (charsetMatched) {
|
|
3128
3134
|
encoding = charsetMatched[1];
|
|
3129
3135
|
encoding = encoding.toLowerCase();
|
|
@@ -3133,7 +3139,7 @@ var Utils = (function () {
|
|
|
3133
3139
|
// 去除引号
|
|
3134
3140
|
encoding = encoding.replace(/('|")/gi, "");
|
|
3135
3141
|
// 编码
|
|
3136
|
-
|
|
3142
|
+
const textDecoder = new TextDecoder(encoding);
|
|
3137
3143
|
responseText = textDecoder.decode(arrayBuffer);
|
|
3138
3144
|
response = responseText;
|
|
3139
3145
|
if (option.responseType === "arraybuffer") {
|
|
@@ -3151,11 +3157,11 @@ var Utils = (function () {
|
|
|
3151
3157
|
}
|
|
3152
3158
|
else if (option.responseType === "document" || option.responseType == null) {
|
|
3153
3159
|
// response返回格式是文档格式
|
|
3154
|
-
|
|
3160
|
+
const parser = new DOMParser();
|
|
3155
3161
|
response = parser.parseFromString(responseText, "text/html");
|
|
3156
3162
|
}
|
|
3157
3163
|
// 转为XML结构
|
|
3158
|
-
|
|
3164
|
+
const parser = new DOMParser();
|
|
3159
3165
|
responseXML = parser.parseFromString(responseText, "text/xml");
|
|
3160
3166
|
httpxResponse.response = response;
|
|
3161
3167
|
httpxResponse.responseText = responseText;
|
|
@@ -3229,6 +3235,9 @@ var Utils = (function () {
|
|
|
3229
3235
|
onreadystatechange() { },
|
|
3230
3236
|
onprogress() { },
|
|
3231
3237
|
};
|
|
3238
|
+
/**
|
|
3239
|
+
* 实例化的默认配置
|
|
3240
|
+
*/
|
|
3232
3241
|
#defaultInitOption = {
|
|
3233
3242
|
/**
|
|
3234
3243
|
* `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
|
|
@@ -3344,7 +3353,7 @@ var Utils = (function () {
|
|
|
3344
3353
|
* @param details 配置
|
|
3345
3354
|
*/
|
|
3346
3355
|
get(...args) {
|
|
3347
|
-
|
|
3356
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3348
3357
|
useRequestOption.method = "GET";
|
|
3349
3358
|
return this.request(useRequestOption, (option) => {
|
|
3350
3359
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3354,7 +3363,7 @@ var Utils = (function () {
|
|
|
3354
3363
|
* POST 请求
|
|
3355
3364
|
*/
|
|
3356
3365
|
post(...args) {
|
|
3357
|
-
|
|
3366
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3358
3367
|
useRequestOption.method = "POST";
|
|
3359
3368
|
return this.request(useRequestOption);
|
|
3360
3369
|
}
|
|
@@ -3362,7 +3371,7 @@ var Utils = (function () {
|
|
|
3362
3371
|
* HEAD 请求
|
|
3363
3372
|
*/
|
|
3364
3373
|
head(...args) {
|
|
3365
|
-
|
|
3374
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3366
3375
|
useRequestOption.method = "HEAD";
|
|
3367
3376
|
return this.request(useRequestOption, (option) => {
|
|
3368
3377
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3372,7 +3381,7 @@ var Utils = (function () {
|
|
|
3372
3381
|
* OPTIONS 请求
|
|
3373
3382
|
*/
|
|
3374
3383
|
options(...args) {
|
|
3375
|
-
|
|
3384
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3376
3385
|
useRequestOption.method = "OPTIONS";
|
|
3377
3386
|
return this.request(useRequestOption, (option) => {
|
|
3378
3387
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3382,7 +3391,7 @@ var Utils = (function () {
|
|
|
3382
3391
|
* DELETE 请求
|
|
3383
3392
|
*/
|
|
3384
3393
|
delete(...args) {
|
|
3385
|
-
|
|
3394
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3386
3395
|
useRequestOption.method = "DELETE";
|
|
3387
3396
|
return this.request(useRequestOption, (option) => {
|
|
3388
3397
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3392,7 +3401,7 @@ var Utils = (function () {
|
|
|
3392
3401
|
* PUT 请求
|
|
3393
3402
|
*/
|
|
3394
3403
|
put(...args) {
|
|
3395
|
-
|
|
3404
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3396
3405
|
userRequestOption.method = "PUT";
|
|
3397
3406
|
return this.request(userRequestOption);
|
|
3398
3407
|
}
|
|
@@ -3402,18 +3411,30 @@ var Utils = (function () {
|
|
|
3402
3411
|
* @param beforeRequestOption 处理请求前的配置
|
|
3403
3412
|
*/
|
|
3404
3413
|
request(details, beforeRequestOption) {
|
|
3405
|
-
|
|
3406
|
-
|
|
3414
|
+
// 对请求的参数进行合并处理
|
|
3415
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(details);
|
|
3416
|
+
/**
|
|
3417
|
+
* 取消请求
|
|
3418
|
+
*/
|
|
3407
3419
|
let abortFn = null;
|
|
3408
|
-
|
|
3409
|
-
|
|
3420
|
+
const promise = new globalThis.Promise(async (resolve, reject) => {
|
|
3421
|
+
// 请求配置
|
|
3422
|
+
let requestOption = this.HttpxRequestOption.getRequestOption(userRequestOption.method, userRequestOption, (resultOption) => {
|
|
3423
|
+
resolve(resultOption);
|
|
3424
|
+
}, (...args) => {
|
|
3425
|
+
reject(...args);
|
|
3426
|
+
});
|
|
3427
|
+
requestOption = this.HttpxRequestOption.removeRequestNullOption(requestOption);
|
|
3410
3428
|
if (typeof beforeRequestOption === "function") {
|
|
3411
3429
|
beforeRequestOption(requestOption);
|
|
3412
3430
|
}
|
|
3413
|
-
|
|
3431
|
+
// 处理重试逻辑
|
|
3414
3432
|
const requestResult = await this.HttpxRequest.request(requestOption);
|
|
3415
3433
|
if (requestResult != null && typeof requestResult.abort === "function") {
|
|
3416
|
-
abortFn =
|
|
3434
|
+
abortFn = () => {
|
|
3435
|
+
// 取消请求
|
|
3436
|
+
requestResult.abort();
|
|
3437
|
+
};
|
|
3417
3438
|
}
|
|
3418
3439
|
});
|
|
3419
3440
|
promise.abort = () => {
|
|
@@ -3432,10 +3453,7 @@ var Utils = (function () {
|
|
|
3432
3453
|
/* websql的版本号,由于ios的问题,版本号的写法不一样 */
|
|
3433
3454
|
// #slqVersion = "1";
|
|
3434
3455
|
/* 监听IndexDB */
|
|
3435
|
-
#indexedDB =
|
|
3436
|
-
window.mozIndexedDB ||
|
|
3437
|
-
window.webkitIndexedDB ||
|
|
3438
|
-
window.msIndexedDB;
|
|
3456
|
+
#indexedDB = globalThis.indexedDB || globalThis.mozIndexedDB || globalThis.webkitIndexedDB || globalThis.msIndexedDB;
|
|
3439
3457
|
/* 缓存数据库,避免同一个页面重复创建和销毁 */
|
|
3440
3458
|
#db = {};
|
|
3441
3459
|
// #store: IDBObjectStore = null as any;
|
|
@@ -3470,7 +3488,7 @@ var Utils = (function () {
|
|
|
3470
3488
|
this.#storeName = storeName;
|
|
3471
3489
|
this.#dbVersion = dbVersion;
|
|
3472
3490
|
if (!this.#indexedDB) {
|
|
3473
|
-
alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3491
|
+
window.alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3474
3492
|
throw new TypeError("很抱歉,您的浏览器不支持indexedDB");
|
|
3475
3493
|
}
|
|
3476
3494
|
}
|
|
@@ -3479,10 +3497,9 @@ var Utils = (function () {
|
|
|
3479
3497
|
* @param dbName 表名
|
|
3480
3498
|
*/
|
|
3481
3499
|
createStore(dbName) {
|
|
3482
|
-
|
|
3483
|
-
txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3500
|
+
const txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3484
3501
|
/* IndexDB的读写权限 */
|
|
3485
|
-
store = txn.objectStore(this.#storeName);
|
|
3502
|
+
const store = txn.objectStore(this.#storeName);
|
|
3486
3503
|
// this.#store = store;
|
|
3487
3504
|
return store;
|
|
3488
3505
|
}
|
|
@@ -3492,12 +3509,12 @@ var Utils = (function () {
|
|
|
3492
3509
|
* @param dbName 数据库名
|
|
3493
3510
|
*/
|
|
3494
3511
|
open(callback, dbName) {
|
|
3495
|
-
|
|
3512
|
+
const that = this;
|
|
3496
3513
|
/* 打开数据库 */
|
|
3497
3514
|
/* 如果支持IndexDB */
|
|
3498
3515
|
if (!that.#db[dbName]) {
|
|
3499
3516
|
/* 如果缓存中没有,则进行数据库的创建或打开,提高效率 */
|
|
3500
|
-
|
|
3517
|
+
const request = that.#indexedDB.open(dbName, that.#dbVersion);
|
|
3501
3518
|
request.onerror = function (event) {
|
|
3502
3519
|
callback(null, {
|
|
3503
3520
|
code: that.#statusCode.openFailed.code,
|
|
@@ -3507,26 +3524,26 @@ var Utils = (function () {
|
|
|
3507
3524
|
};
|
|
3508
3525
|
request.onsuccess = function (event) {
|
|
3509
3526
|
if (!that.#db[dbName]) {
|
|
3510
|
-
|
|
3527
|
+
const target = event.target;
|
|
3511
3528
|
that.#db[dbName] = target.result;
|
|
3512
3529
|
}
|
|
3513
|
-
|
|
3530
|
+
const store = that.createStore(dbName);
|
|
3514
3531
|
callback(store);
|
|
3515
3532
|
};
|
|
3516
3533
|
request.onupgradeneeded = function (event) {
|
|
3517
|
-
|
|
3534
|
+
const target = event.target;
|
|
3518
3535
|
that.#db[dbName] = target.result;
|
|
3519
|
-
|
|
3536
|
+
const store = that.#db[dbName].createObjectStore(that.#storeName, {
|
|
3520
3537
|
keyPath: "key",
|
|
3521
3538
|
});
|
|
3522
|
-
store.transaction.oncomplete = function (
|
|
3539
|
+
store.transaction.oncomplete = function () {
|
|
3523
3540
|
callback(store);
|
|
3524
3541
|
};
|
|
3525
3542
|
};
|
|
3526
3543
|
}
|
|
3527
3544
|
else {
|
|
3528
3545
|
/* 如果缓存中已经打开了数据库,就直接使用 */
|
|
3529
|
-
|
|
3546
|
+
const store = this.createStore(dbName);
|
|
3530
3547
|
callback(store);
|
|
3531
3548
|
}
|
|
3532
3549
|
}
|
|
@@ -3536,10 +3553,10 @@ var Utils = (function () {
|
|
|
3536
3553
|
* @param value 数据值
|
|
3537
3554
|
*/
|
|
3538
3555
|
async save(key, value) {
|
|
3539
|
-
|
|
3556
|
+
const that = this;
|
|
3540
3557
|
return new Promise((resolve) => {
|
|
3541
|
-
|
|
3542
|
-
|
|
3558
|
+
const dbName = this.#dbName;
|
|
3559
|
+
const inData = {
|
|
3543
3560
|
key: key,
|
|
3544
3561
|
value: value,
|
|
3545
3562
|
};
|
|
@@ -3552,7 +3569,7 @@ var Utils = (function () {
|
|
|
3552
3569
|
});
|
|
3553
3570
|
}
|
|
3554
3571
|
else {
|
|
3555
|
-
|
|
3572
|
+
const request = idbStore.put(inData);
|
|
3556
3573
|
request.onsuccess = function (event) {
|
|
3557
3574
|
/* 保存成功有success 字段 */
|
|
3558
3575
|
resolve({
|
|
@@ -3579,9 +3596,9 @@ var Utils = (function () {
|
|
|
3579
3596
|
* @param key 数据key
|
|
3580
3597
|
*/
|
|
3581
3598
|
async has(key) {
|
|
3582
|
-
|
|
3599
|
+
const that = this;
|
|
3583
3600
|
return new Promise((resolve) => {
|
|
3584
|
-
|
|
3601
|
+
const dbName = this.#dbName;
|
|
3585
3602
|
this.open(function (idbStore) {
|
|
3586
3603
|
/* 判断返回的数据中是否有error字段 */
|
|
3587
3604
|
if (idbStore == null) {
|
|
@@ -3592,7 +3609,7 @@ var Utils = (function () {
|
|
|
3592
3609
|
});
|
|
3593
3610
|
}
|
|
3594
3611
|
else {
|
|
3595
|
-
|
|
3612
|
+
const request = idbStore.get(key);
|
|
3596
3613
|
request.onsuccess = function (event) {
|
|
3597
3614
|
/* result 返回的是 {key: string, value: any} */
|
|
3598
3615
|
/* 键值对存储 */
|
|
@@ -3620,9 +3637,9 @@ var Utils = (function () {
|
|
|
3620
3637
|
* @param key 数据key
|
|
3621
3638
|
*/
|
|
3622
3639
|
async get(key) {
|
|
3623
|
-
|
|
3640
|
+
const that = this;
|
|
3624
3641
|
return new Promise((resolve) => {
|
|
3625
|
-
|
|
3642
|
+
const dbName = this.#dbName;
|
|
3626
3643
|
this.open(function (idbStore) {
|
|
3627
3644
|
/* 判断返回的数据中是否有error字段 */
|
|
3628
3645
|
if (idbStore == null) {
|
|
@@ -3634,13 +3651,13 @@ var Utils = (function () {
|
|
|
3634
3651
|
});
|
|
3635
3652
|
}
|
|
3636
3653
|
else {
|
|
3637
|
-
|
|
3654
|
+
const request = idbStore.get(key);
|
|
3638
3655
|
request.onsuccess = function (event) {
|
|
3639
|
-
|
|
3640
|
-
|
|
3656
|
+
const target = event.target;
|
|
3657
|
+
const result = target.result;
|
|
3641
3658
|
/* result 返回的是 {key: string, value: any} */
|
|
3642
3659
|
/* 键值对存储 */
|
|
3643
|
-
|
|
3660
|
+
const data = result ? result.value : void 0;
|
|
3644
3661
|
if (data == null) {
|
|
3645
3662
|
resolve({
|
|
3646
3663
|
success: true,
|
|
@@ -3681,10 +3698,10 @@ var Utils = (function () {
|
|
|
3681
3698
|
*/
|
|
3682
3699
|
async regexpGet(key) {
|
|
3683
3700
|
let list = [];
|
|
3684
|
-
|
|
3701
|
+
const that = this;
|
|
3685
3702
|
return new Promise((resolve) => {
|
|
3686
3703
|
/* 正则查询 */
|
|
3687
|
-
|
|
3704
|
+
const dbName = that.#dbName;
|
|
3688
3705
|
this.open(function (idbStore) {
|
|
3689
3706
|
/* 判断返回的数据中是否有error字段 */
|
|
3690
3707
|
if (idbStore == null) {
|
|
@@ -3696,16 +3713,16 @@ var Utils = (function () {
|
|
|
3696
3713
|
});
|
|
3697
3714
|
}
|
|
3698
3715
|
else {
|
|
3699
|
-
|
|
3716
|
+
const request = idbStore.getAll();
|
|
3700
3717
|
request.onsuccess = function (event) {
|
|
3701
|
-
|
|
3702
|
-
|
|
3718
|
+
const target = event.target;
|
|
3719
|
+
const result = target.result;
|
|
3703
3720
|
if (result.length !== 0) {
|
|
3704
|
-
result.forEach((dataItem
|
|
3721
|
+
result.forEach((dataItem) => {
|
|
3705
3722
|
// 当前项的key
|
|
3706
|
-
|
|
3723
|
+
const __key = dataItem["key"];
|
|
3707
3724
|
// 当前项的value
|
|
3708
|
-
|
|
3725
|
+
const __value = dataItem["value"];
|
|
3709
3726
|
if (__key.match(key)) {
|
|
3710
3727
|
list = list.concat(__value);
|
|
3711
3728
|
}
|
|
@@ -3737,10 +3754,10 @@ var Utils = (function () {
|
|
|
3737
3754
|
* @param key 数据key
|
|
3738
3755
|
*/
|
|
3739
3756
|
async delete(key) {
|
|
3740
|
-
|
|
3757
|
+
const that = this;
|
|
3741
3758
|
return new Promise((resolve) => {
|
|
3742
3759
|
/* 根据key删除某条数据 */
|
|
3743
|
-
|
|
3760
|
+
const dbName = that.#dbName;
|
|
3744
3761
|
this.open(function (idbStore) {
|
|
3745
3762
|
if (idbStore == null) {
|
|
3746
3763
|
resolve({
|
|
@@ -3751,7 +3768,7 @@ var Utils = (function () {
|
|
|
3751
3768
|
}
|
|
3752
3769
|
else {
|
|
3753
3770
|
// 删除键
|
|
3754
|
-
|
|
3771
|
+
const request = idbStore.delete(key);
|
|
3755
3772
|
request.onsuccess = function (event) {
|
|
3756
3773
|
resolve({
|
|
3757
3774
|
success: true,
|
|
@@ -3776,10 +3793,10 @@ var Utils = (function () {
|
|
|
3776
3793
|
* 删除所有数据
|
|
3777
3794
|
*/
|
|
3778
3795
|
async deleteAll() {
|
|
3779
|
-
|
|
3796
|
+
const that = this;
|
|
3780
3797
|
return new Promise((resolve) => {
|
|
3781
3798
|
/* 清空数据库 */
|
|
3782
|
-
|
|
3799
|
+
const dbName = that.#dbName;
|
|
3783
3800
|
this.open(function (idbStore) {
|
|
3784
3801
|
if (idbStore == null) {
|
|
3785
3802
|
resolve({
|
|
@@ -3790,7 +3807,7 @@ var Utils = (function () {
|
|
|
3790
3807
|
}
|
|
3791
3808
|
else {
|
|
3792
3809
|
// 清空
|
|
3793
|
-
|
|
3810
|
+
const operateResult = idbStore.clear();
|
|
3794
3811
|
operateResult.onsuccess = function (event) {
|
|
3795
3812
|
resolve({
|
|
3796
3813
|
success: true,
|
|
@@ -3823,7 +3840,7 @@ var Utils = (function () {
|
|
|
3823
3840
|
run;
|
|
3824
3841
|
isLock;
|
|
3825
3842
|
constructor(callback, context, delayTime) {
|
|
3826
|
-
|
|
3843
|
+
const that = this;
|
|
3827
3844
|
this.#callback = callback;
|
|
3828
3845
|
if (typeof context === "number") {
|
|
3829
3846
|
this.#delayTime = context;
|
|
@@ -3913,14 +3930,14 @@ var Utils = (function () {
|
|
|
3913
3930
|
* @param stack
|
|
3914
3931
|
*/
|
|
3915
3932
|
parseErrorStack(stack) {
|
|
3916
|
-
|
|
3933
|
+
const result = {
|
|
3917
3934
|
name: "",
|
|
3918
3935
|
position: "",
|
|
3919
3936
|
};
|
|
3920
3937
|
for (let stackString of stack) {
|
|
3921
3938
|
stackString = stackString.trim();
|
|
3922
|
-
|
|
3923
|
-
|
|
3939
|
+
const stackFunctionNameMatch = stackString.match(/^at[\s]+(.+?)[\s]+/i);
|
|
3940
|
+
const stackFunctionNamePositionMatch = stackString.match(/^at[\s]+.+[\s]+\((.+?)\)/i);
|
|
3924
3941
|
if (stackFunctionNameMatch == null) {
|
|
3925
3942
|
continue;
|
|
3926
3943
|
}
|
|
@@ -3928,8 +3945,8 @@ var Utils = (function () {
|
|
|
3928
3945
|
continue;
|
|
3929
3946
|
}
|
|
3930
3947
|
/* 获取最后一个,因为第一个是包含了at */
|
|
3931
|
-
|
|
3932
|
-
|
|
3948
|
+
const stackFunctionName = stackFunctionNameMatch[stackFunctionNameMatch.length - 1];
|
|
3949
|
+
const stackFunctionNamePosition = stackFunctionNamePositionMatch[stackFunctionNamePositionMatch.length - 1];
|
|
3933
3950
|
if (stackFunctionName === "" ||
|
|
3934
3951
|
stackFunctionName.match(/^(Utils\.|)Log(\.|)|.<anonymous>$|^Function.each|^NodeList.forEach|^k.fn.init.each/g)) {
|
|
3935
3952
|
continue;
|
|
@@ -3941,9 +3958,9 @@ var Utils = (function () {
|
|
|
3941
3958
|
}
|
|
3942
3959
|
}
|
|
3943
3960
|
if (result.position === "") {
|
|
3944
|
-
|
|
3961
|
+
const lastStackString = stack[stack.length - 1].trim();
|
|
3945
3962
|
if (lastStackString.startsWith("at chrome-extension://")) {
|
|
3946
|
-
|
|
3963
|
+
const lastStackMatch = lastStackString.match(/^at[\s]+(.+)/);
|
|
3947
3964
|
if (lastStackMatch) {
|
|
3948
3965
|
result.position = lastStackMatch[lastStackMatch.length - 1];
|
|
3949
3966
|
}
|
|
@@ -3973,16 +3990,18 @@ var Utils = (function () {
|
|
|
3973
3990
|
printContent(msg, color, otherStyle) {
|
|
3974
3991
|
this.checkClearConsole();
|
|
3975
3992
|
otherStyle = otherStyle || "";
|
|
3976
|
-
|
|
3993
|
+
const stackSplit = new Error().stack.split("\n");
|
|
3977
3994
|
stackSplit.splice(0, 2);
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
|
|
3995
|
+
const { name: callerName, position: callerPosition } = this.parseErrorStack(stackSplit);
|
|
3996
|
+
const tagName = this.tag;
|
|
3997
|
+
const that = this;
|
|
3981
3998
|
/** tag的html输出格式 */
|
|
3982
|
-
|
|
3999
|
+
const tagNameHTML = `%c[${tagName}%c`;
|
|
3983
4000
|
/** 调用的函数名的html输出格式 */
|
|
3984
4001
|
let callerNameHTML = `%c${callerName}%c]%c`;
|
|
3985
|
-
callerName.trim()
|
|
4002
|
+
if (callerName.trim() === "") {
|
|
4003
|
+
callerNameHTML = `-${callerNameHTML}`;
|
|
4004
|
+
}
|
|
3986
4005
|
/**
|
|
3987
4006
|
* 输出消息到控制台
|
|
3988
4007
|
* @param message
|
|
@@ -4068,14 +4087,14 @@ var Utils = (function () {
|
|
|
4068
4087
|
if (this.#disable)
|
|
4069
4088
|
return;
|
|
4070
4089
|
this.checkClearConsole();
|
|
4071
|
-
|
|
4090
|
+
const stack = new Error().stack.split("\n");
|
|
4072
4091
|
stack.splice(0, 1);
|
|
4073
|
-
|
|
4092
|
+
const errorStackParse = this.parseErrorStack(stack);
|
|
4074
4093
|
/** 堆栈函数名 */
|
|
4075
|
-
|
|
4094
|
+
const stackFunctionName = errorStackParse.name;
|
|
4076
4095
|
/** 堆栈位置 */
|
|
4077
|
-
|
|
4078
|
-
|
|
4096
|
+
const stackFunctionNamePosition = errorStackParse.position;
|
|
4097
|
+
const callerName = stackFunctionName;
|
|
4079
4098
|
this.#console.log(`%c[${this.tag}%c-%c${callerName}%c]%c`, ...this.#msgColorDetails, `color: ${this.#details.infoColor};`);
|
|
4080
4099
|
this.#console.table(msg);
|
|
4081
4100
|
if (this.#details.debug) {
|
|
@@ -4138,9 +4157,9 @@ var Utils = (function () {
|
|
|
4138
4157
|
*/
|
|
4139
4158
|
circleRadius: 50,
|
|
4140
4159
|
};
|
|
4141
|
-
#ctx
|
|
4142
|
-
#width
|
|
4143
|
-
#height
|
|
4160
|
+
#ctx;
|
|
4161
|
+
#width;
|
|
4162
|
+
#height;
|
|
4144
4163
|
/**
|
|
4145
4164
|
*
|
|
4146
4165
|
* @param paramConfig 配置信息
|
|
@@ -4150,14 +4169,8 @@ var Utils = (function () {
|
|
|
4150
4169
|
if (!(this.#config.canvasNode instanceof HTMLCanvasElement)) {
|
|
4151
4170
|
throw new Error("Utils.Progress 参数 canvasNode 必须是 HTMLCanvasElement");
|
|
4152
4171
|
}
|
|
4153
|
-
this.init();
|
|
4154
|
-
}
|
|
4155
|
-
/**
|
|
4156
|
-
* 初始化
|
|
4157
|
-
*/
|
|
4158
|
-
init() {
|
|
4159
4172
|
/* 获取画笔 */
|
|
4160
|
-
|
|
4173
|
+
const ctx = this.#config.canvasNode.getContext("2d");
|
|
4161
4174
|
if (ctx == null) {
|
|
4162
4175
|
throw new Error("Utils.Progress 获取画笔失败");
|
|
4163
4176
|
}
|
|
@@ -4168,8 +4181,8 @@ var Utils = (function () {
|
|
|
4168
4181
|
this.#height = this.#config.canvasNode.height;
|
|
4169
4182
|
/* 清除锯齿 */
|
|
4170
4183
|
if (window.devicePixelRatio) {
|
|
4171
|
-
this.#config.canvasNode.style.width = this.#width
|
|
4172
|
-
this.#config.canvasNode.style.height = this.#height
|
|
4184
|
+
this.#config.canvasNode.style.width = `${this.#width}px`;
|
|
4185
|
+
this.#config.canvasNode.style.height = `${this.#height}px`;
|
|
4173
4186
|
this.#config.canvasNode.height = this.#height * window.devicePixelRatio;
|
|
4174
4187
|
this.#config.canvasNode.width = this.#width * window.devicePixelRatio;
|
|
4175
4188
|
this.#ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
|
|
@@ -4181,7 +4194,7 @@ var Utils = (function () {
|
|
|
4181
4194
|
* 绘制
|
|
4182
4195
|
*/
|
|
4183
4196
|
draw() {
|
|
4184
|
-
|
|
4197
|
+
const degActive = (this.#config.progress * 360) / 100;
|
|
4185
4198
|
/* 清除画布 */
|
|
4186
4199
|
this.#ctx.clearRect(0, 0, this.#width, this.#height);
|
|
4187
4200
|
/* 开始绘制底圆 */
|
|
@@ -4195,11 +4208,11 @@ var Utils = (function () {
|
|
|
4195
4208
|
this.#ctx.strokeStyle = this.#config.lineColor;
|
|
4196
4209
|
this.#ctx.stroke();
|
|
4197
4210
|
/* 获取百分比 */
|
|
4198
|
-
|
|
4199
|
-
this.#ctx.font = this.#config.fontSize
|
|
4211
|
+
const txt = `${parseInt(this.#config.progress.toString())}%`;
|
|
4212
|
+
this.#ctx.font = `${this.#config.fontSize}px SimHei`;
|
|
4200
4213
|
/* 获取文本宽度 */
|
|
4201
|
-
|
|
4202
|
-
|
|
4214
|
+
const w = this.#ctx.measureText(txt).width;
|
|
4215
|
+
const h = this.#config.fontSize / 2;
|
|
4203
4216
|
this.#ctx.fillStyle = this.#config.textColor;
|
|
4204
4217
|
this.#ctx.fillText(txt, this.#width / 2 - w / 2, this.#height / 2 + h / 2);
|
|
4205
4218
|
}
|
|
@@ -4223,9 +4236,9 @@ var Utils = (function () {
|
|
|
4223
4236
|
* 迭代器
|
|
4224
4237
|
*/
|
|
4225
4238
|
get entries() {
|
|
4226
|
-
|
|
4239
|
+
const that = this;
|
|
4227
4240
|
return function* () {
|
|
4228
|
-
|
|
4241
|
+
const itemKeys = Object.keys(that.getItems());
|
|
4229
4242
|
for (const keyName of itemKeys) {
|
|
4230
4243
|
yield [keyName, that.get(keyName)];
|
|
4231
4244
|
}
|
|
@@ -4235,9 +4248,8 @@ var Utils = (function () {
|
|
|
4235
4248
|
* 是否可遍历
|
|
4236
4249
|
*/
|
|
4237
4250
|
get [Symbol.iterator]() {
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
return that.entries();
|
|
4251
|
+
return () => {
|
|
4252
|
+
return this.entries();
|
|
4241
4253
|
};
|
|
4242
4254
|
}
|
|
4243
4255
|
/**
|
|
@@ -4324,7 +4336,7 @@ var Utils = (function () {
|
|
|
4324
4336
|
* @param callbackfn 回调函数
|
|
4325
4337
|
*/
|
|
4326
4338
|
forEach(callbackfn) {
|
|
4327
|
-
this.items.forEach((value, key
|
|
4339
|
+
this.items.forEach((value, key) => {
|
|
4328
4340
|
callbackfn(value, key, this);
|
|
4329
4341
|
});
|
|
4330
4342
|
}
|
|
@@ -4416,6 +4428,7 @@ var Utils = (function () {
|
|
|
4416
4428
|
}
|
|
4417
4429
|
}
|
|
4418
4430
|
|
|
4431
|
+
// @ts-nocheck
|
|
4419
4432
|
const VueUtils = {
|
|
4420
4433
|
/** 标签 */
|
|
4421
4434
|
ReactiveFlags: {
|
|
@@ -4454,10 +4467,10 @@ var Utils = (function () {
|
|
|
4454
4467
|
deps = [];
|
|
4455
4468
|
active = true;
|
|
4456
4469
|
fn;
|
|
4457
|
-
|
|
4470
|
+
scheduler;
|
|
4458
4471
|
constructor(fn, scheduler) {
|
|
4459
4472
|
this.fn = fn;
|
|
4460
|
-
|
|
4473
|
+
this.scheduler = scheduler;
|
|
4461
4474
|
}
|
|
4462
4475
|
run(cb) {
|
|
4463
4476
|
if (!this.active) {
|
|
@@ -4529,7 +4542,7 @@ var Utils = (function () {
|
|
|
4529
4542
|
if (VueUtils.isReactive(target)) {
|
|
4530
4543
|
return target;
|
|
4531
4544
|
}
|
|
4532
|
-
|
|
4545
|
+
const exisProxy = this.reactMap.get(target);
|
|
4533
4546
|
if (exisProxy) {
|
|
4534
4547
|
return exisProxy;
|
|
4535
4548
|
}
|
|
@@ -4542,8 +4555,8 @@ var Utils = (function () {
|
|
|
4542
4555
|
return Reflect.get(target, key, receiver);
|
|
4543
4556
|
},
|
|
4544
4557
|
set(target, key, value, receiver) {
|
|
4545
|
-
|
|
4546
|
-
|
|
4558
|
+
const oldValue = target[key];
|
|
4559
|
+
const result = Reflect.set(target, key, value, receiver);
|
|
4547
4560
|
if (oldValue !== value) {
|
|
4548
4561
|
that.trigger(target, "set", key, oldValue, value);
|
|
4549
4562
|
}
|
|
@@ -4593,11 +4606,12 @@ var Utils = (function () {
|
|
|
4593
4606
|
}
|
|
4594
4607
|
toRefs(object) {
|
|
4595
4608
|
const result = VueUtils.isArray(object) ? new Array(object.length) : {};
|
|
4596
|
-
for (
|
|
4609
|
+
for (const key in object) {
|
|
4597
4610
|
result[key] = this.toRef(object, key);
|
|
4598
4611
|
}
|
|
4599
4612
|
return result;
|
|
4600
4613
|
}
|
|
4614
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4601
4615
|
trigger(target, type, key, oldValue, value) {
|
|
4602
4616
|
const depsMap = this.targetMap.get(target);
|
|
4603
4617
|
if (!depsMap)
|
|
@@ -4605,8 +4619,9 @@ var Utils = (function () {
|
|
|
4605
4619
|
const effects = depsMap.get(key);
|
|
4606
4620
|
this.triggerEffect(effects, "effects");
|
|
4607
4621
|
}
|
|
4622
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4608
4623
|
triggerEffect(effects, name) {
|
|
4609
|
-
effects
|
|
4624
|
+
if (effects) {
|
|
4610
4625
|
effects.forEach((effect) => {
|
|
4611
4626
|
if (effect.scheduler) {
|
|
4612
4627
|
effect.scheduler();
|
|
@@ -4615,6 +4630,7 @@ var Utils = (function () {
|
|
|
4615
4630
|
effect.run();
|
|
4616
4631
|
}
|
|
4617
4632
|
});
|
|
4633
|
+
}
|
|
4618
4634
|
}
|
|
4619
4635
|
track(target, type, key) {
|
|
4620
4636
|
if (!this.activeEffect)
|
|
@@ -4631,7 +4647,7 @@ var Utils = (function () {
|
|
|
4631
4647
|
}
|
|
4632
4648
|
trackEffect(dep) {
|
|
4633
4649
|
if (this.activeEffect) {
|
|
4634
|
-
|
|
4650
|
+
const shouldTrack = !dep.has(this.activeEffect);
|
|
4635
4651
|
if (shouldTrack) {
|
|
4636
4652
|
dep.add(this.activeEffect);
|
|
4637
4653
|
this.activeEffect.deps.push(dep);
|
|
@@ -4645,7 +4661,7 @@ var Utils = (function () {
|
|
|
4645
4661
|
return value;
|
|
4646
4662
|
}
|
|
4647
4663
|
set.add(value);
|
|
4648
|
-
for (
|
|
4664
|
+
for (const key in value) {
|
|
4649
4665
|
this.traversal(value[key], set);
|
|
4650
4666
|
}
|
|
4651
4667
|
return value;
|
|
@@ -4897,6 +4913,7 @@ var Utils = (function () {
|
|
|
4897
4913
|
const setInterval = (...args) => loadOrReturnBroker().setInterval(...args);
|
|
4898
4914
|
const setTimeout$1 = (...args) => loadOrReturnBroker().setTimeout(...args);
|
|
4899
4915
|
|
|
4916
|
+
/* eslint-disable */
|
|
4900
4917
|
// ==UserScript==
|
|
4901
4918
|
// @name ModuleRaid.js
|
|
4902
4919
|
// @namespace http://tampermonkey.net/
|
|
@@ -5314,28 +5331,26 @@ var Utils = (function () {
|
|
|
5314
5331
|
return $ele?.innerHTML?.trim() === "";
|
|
5315
5332
|
});
|
|
5316
5333
|
}
|
|
5317
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5318
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5334
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5319
5335
|
// contains 语法
|
|
5320
|
-
|
|
5321
|
-
|
|
5336
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5337
|
+
const text = textMatch[2];
|
|
5322
5338
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5323
5339
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5324
5340
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
5325
5341
|
});
|
|
5326
5342
|
}
|
|
5327
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5328
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5343
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5329
5344
|
// regexp 语法
|
|
5330
|
-
|
|
5345
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5331
5346
|
let pattern = textMatch[2];
|
|
5332
|
-
|
|
5347
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5333
5348
|
let flags = "";
|
|
5334
5349
|
if (flagMatch) {
|
|
5335
5350
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5336
5351
|
flags = flagMatch[3];
|
|
5337
5352
|
}
|
|
5338
|
-
|
|
5353
|
+
const regexp = new RegExp(pattern, flags);
|
|
5339
5354
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5340
5355
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5341
5356
|
return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
|
|
@@ -5377,11 +5392,10 @@ var Utils = (function () {
|
|
|
5377
5392
|
selector = selector.replace(/:empty$/gi, "");
|
|
5378
5393
|
return $el.matches(selector) && $el?.innerHTML?.trim() === "";
|
|
5379
5394
|
}
|
|
5380
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5381
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5395
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5382
5396
|
// contains 语法
|
|
5383
|
-
|
|
5384
|
-
|
|
5397
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5398
|
+
const text = textMatch[2];
|
|
5385
5399
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5386
5400
|
let content = $el?.textContent || $el?.innerText;
|
|
5387
5401
|
if (typeof content !== "string") {
|
|
@@ -5389,18 +5403,17 @@ var Utils = (function () {
|
|
|
5389
5403
|
}
|
|
5390
5404
|
return $el.matches(selector) && content?.includes(text);
|
|
5391
5405
|
}
|
|
5392
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5393
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5406
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5394
5407
|
// regexp 语法
|
|
5395
|
-
|
|
5408
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5396
5409
|
let pattern = textMatch[2];
|
|
5397
|
-
|
|
5410
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5398
5411
|
let flags = "";
|
|
5399
5412
|
if (flagMatch) {
|
|
5400
5413
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5401
5414
|
flags = flagMatch[3];
|
|
5402
5415
|
}
|
|
5403
|
-
|
|
5416
|
+
const regexp = new RegExp(pattern, flags);
|
|
5404
5417
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5405
5418
|
let content = $el?.textContent || $el?.innerText;
|
|
5406
5419
|
if (typeof content !== "string") {
|
|
@@ -5418,43 +5431,41 @@ var Utils = (function () {
|
|
|
5418
5431
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
5419
5432
|
// empty 语法
|
|
5420
5433
|
selector = selector.replace(/:empty$/gi, "");
|
|
5421
|
-
|
|
5434
|
+
const $closest = $el?.closest(selector);
|
|
5422
5435
|
if ($closest && $closest?.innerHTML?.trim() === "") {
|
|
5423
5436
|
return $closest;
|
|
5424
5437
|
}
|
|
5425
5438
|
return null;
|
|
5426
5439
|
}
|
|
5427
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5428
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5440
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5429
5441
|
// contains 语法
|
|
5430
|
-
|
|
5431
|
-
|
|
5442
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5443
|
+
const text = textMatch[2];
|
|
5432
5444
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5433
|
-
|
|
5445
|
+
const $closest = $el?.closest(selector);
|
|
5434
5446
|
if ($closest) {
|
|
5435
|
-
|
|
5447
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5436
5448
|
if (typeof content === "string" && content.includes(text)) {
|
|
5437
5449
|
return $closest;
|
|
5438
5450
|
}
|
|
5439
5451
|
}
|
|
5440
5452
|
return null;
|
|
5441
5453
|
}
|
|
5442
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5443
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5454
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5444
5455
|
// regexp 语法
|
|
5445
|
-
|
|
5456
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5446
5457
|
let pattern = textMatch[2];
|
|
5447
|
-
|
|
5458
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5448
5459
|
let flags = "";
|
|
5449
5460
|
if (flagMatch) {
|
|
5450
5461
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5451
5462
|
flags = flagMatch[3];
|
|
5452
5463
|
}
|
|
5453
|
-
|
|
5464
|
+
const regexp = new RegExp(pattern, flags);
|
|
5454
5465
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5455
|
-
|
|
5466
|
+
const $closest = $el?.closest(selector);
|
|
5456
5467
|
if ($closest) {
|
|
5457
|
-
|
|
5468
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5458
5469
|
if (typeof content === "string" && content.match(regexp)) {
|
|
5459
5470
|
return $closest;
|
|
5460
5471
|
}
|
|
@@ -5463,12 +5474,14 @@ var Utils = (function () {
|
|
|
5463
5474
|
}
|
|
5464
5475
|
else {
|
|
5465
5476
|
// 普通语法
|
|
5466
|
-
|
|
5477
|
+
const $closest = $el?.closest(selector);
|
|
5467
5478
|
return $closest;
|
|
5468
5479
|
}
|
|
5469
5480
|
}
|
|
5470
5481
|
}
|
|
5471
|
-
|
|
5482
|
+
const domUtils = new DOMUtils();
|
|
5483
|
+
|
|
5484
|
+
const version = "2.8.2";
|
|
5472
5485
|
|
|
5473
5486
|
class Utils {
|
|
5474
5487
|
windowApi;
|
|
@@ -5476,12 +5489,12 @@ var Utils = (function () {
|
|
|
5476
5489
|
this.windowApi = new WindowApi(option);
|
|
5477
5490
|
}
|
|
5478
5491
|
/** 版本号 */
|
|
5479
|
-
version =
|
|
5492
|
+
version = version;
|
|
5480
5493
|
addStyle(cssText) {
|
|
5481
5494
|
if (typeof cssText !== "string") {
|
|
5482
5495
|
throw new Error("Utils.addStyle 参数cssText 必须为String类型");
|
|
5483
5496
|
}
|
|
5484
|
-
|
|
5497
|
+
const cssNode = this.windowApi.document.createElement("style");
|
|
5485
5498
|
cssNode.setAttribute("type", "text/css");
|
|
5486
5499
|
cssNode.innerHTML = cssText;
|
|
5487
5500
|
if (this.windowApi.document.head) {
|
|
@@ -5503,23 +5516,23 @@ var Utils = (function () {
|
|
|
5503
5516
|
return cssNode;
|
|
5504
5517
|
}
|
|
5505
5518
|
/**
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5519
|
+
* JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
|
|
5520
|
+
* @param target 目标数据
|
|
5521
|
+
* @param source 源数据
|
|
5522
|
+
* @param isAdd 是否可以追加键,默认false
|
|
5523
|
+
* @example
|
|
5524
|
+
* Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
|
|
5525
|
+
* >
|
|
5526
|
+
* {
|
|
5527
|
+
"1": 1,
|
|
5528
|
+
"2": {
|
|
5529
|
+
"3": 4
|
|
5530
|
+
}
|
|
5531
|
+
}
|
|
5532
|
+
*/
|
|
5520
5533
|
assign = commonUtil.assign.bind(commonUtil);
|
|
5521
5534
|
async asyncReplaceAll(string, pattern, asyncFn) {
|
|
5522
|
-
|
|
5535
|
+
const UtilsContext = this;
|
|
5523
5536
|
if (typeof string !== "string") {
|
|
5524
5537
|
throw new TypeError("string必须是字符串");
|
|
5525
5538
|
}
|
|
@@ -5591,18 +5604,18 @@ var Utils = (function () {
|
|
|
5591
5604
|
canvasElement.dispatchEvent(new MouseEvent("mouseup", eventInit));
|
|
5592
5605
|
}
|
|
5593
5606
|
checkUserClickInNode(element) {
|
|
5594
|
-
|
|
5607
|
+
const UtilsContext = this;
|
|
5595
5608
|
if (!UtilsContext.isDOM(element)) {
|
|
5596
5609
|
throw new Error("Utils.checkUserClickInNode 参数 targetNode 必须为 Element|Node 类型");
|
|
5597
5610
|
}
|
|
5598
|
-
|
|
5599
|
-
|
|
5600
|
-
|
|
5611
|
+
const clickEvent = UtilsContext.windowApi.window.event;
|
|
5612
|
+
const touchEvent = UtilsContext.windowApi.window.event;
|
|
5613
|
+
const $click = clickEvent?.composedPath()?.[0];
|
|
5601
5614
|
// 点击的x坐标
|
|
5602
|
-
|
|
5615
|
+
const clickPosX = clickEvent?.clientX != null ? clickEvent.clientX : touchEvent.touches[0].clientX;
|
|
5603
5616
|
// 点击的y坐标
|
|
5604
|
-
|
|
5605
|
-
|
|
5617
|
+
const clickPosY = clickEvent?.clientY != null ? clickEvent.clientY : touchEvent.touches[0].clientY;
|
|
5618
|
+
const {
|
|
5606
5619
|
/* 要检测的元素的相对屏幕的横坐标最左边 */
|
|
5607
5620
|
left: elementPosXLeft,
|
|
5608
5621
|
/* 要检测的元素的相对屏幕的横坐标最右边 */
|
|
@@ -5630,32 +5643,32 @@ var Utils = (function () {
|
|
|
5630
5643
|
* @param formData 需要clone的数据
|
|
5631
5644
|
*/
|
|
5632
5645
|
cloneFormData(formData, filterFn) {
|
|
5633
|
-
|
|
5634
|
-
|
|
5635
|
-
|
|
5646
|
+
const clonedFormData = new FormData();
|
|
5647
|
+
formData.forEach((value, key) => {
|
|
5648
|
+
const isFilter = typeof filterFn === "function" ? filterFn(key, value) : false;
|
|
5636
5649
|
if (typeof isFilter === "boolean" && isFilter) {
|
|
5637
|
-
|
|
5650
|
+
return;
|
|
5638
5651
|
}
|
|
5639
5652
|
clonedFormData.append(key, value);
|
|
5640
|
-
}
|
|
5653
|
+
});
|
|
5641
5654
|
return clonedFormData;
|
|
5642
5655
|
}
|
|
5643
5656
|
createOverload() {
|
|
5644
|
-
|
|
5657
|
+
const fnMap = new Map();
|
|
5645
5658
|
function overload(...args) {
|
|
5646
|
-
|
|
5647
|
-
|
|
5659
|
+
const key = args.map((it) => typeof it).join(",");
|
|
5660
|
+
const fn = fnMap.get(key);
|
|
5648
5661
|
if (!fn) {
|
|
5649
5662
|
throw new TypeError("没有找到对应的实现");
|
|
5650
5663
|
}
|
|
5651
5664
|
return fn.apply(this, args);
|
|
5652
5665
|
}
|
|
5653
5666
|
overload.addImpl = function (...args) {
|
|
5654
|
-
|
|
5667
|
+
const fn = args.pop();
|
|
5655
5668
|
if (typeof fn !== "function") {
|
|
5656
5669
|
throw new TypeError("最后一个参数必须是函数");
|
|
5657
5670
|
}
|
|
5658
|
-
|
|
5671
|
+
const key = args.join(",");
|
|
5659
5672
|
fnMap.set(key, fn);
|
|
5660
5673
|
};
|
|
5661
5674
|
return overload;
|
|
@@ -5672,7 +5685,7 @@ var Utils = (function () {
|
|
|
5672
5685
|
deepClone = commonUtil.deepClone.bind(commonUtil);
|
|
5673
5686
|
debounce(fn, delay = 0) {
|
|
5674
5687
|
let timer = null;
|
|
5675
|
-
|
|
5688
|
+
const UtilsContext = this;
|
|
5676
5689
|
return function (...args) {
|
|
5677
5690
|
UtilsContext.workerClearTimeout(timer);
|
|
5678
5691
|
timer = UtilsContext.workerSetTimeout(function () {
|
|
@@ -5681,7 +5694,7 @@ var Utils = (function () {
|
|
|
5681
5694
|
};
|
|
5682
5695
|
}
|
|
5683
5696
|
deleteParentNode(element, targetSelector) {
|
|
5684
|
-
|
|
5697
|
+
const UtilsContext = this;
|
|
5685
5698
|
if (element == null) {
|
|
5686
5699
|
return;
|
|
5687
5700
|
}
|
|
@@ -5692,7 +5705,7 @@ var Utils = (function () {
|
|
|
5692
5705
|
throw new Error("Utils.deleteParentNode 参数 targetSelector 必须为 string 类型");
|
|
5693
5706
|
}
|
|
5694
5707
|
let result = false;
|
|
5695
|
-
|
|
5708
|
+
const needRemoveDOM = domUtils.closest(element, targetSelector);
|
|
5696
5709
|
if (needRemoveDOM) {
|
|
5697
5710
|
needRemoveDOM.remove();
|
|
5698
5711
|
result = true;
|
|
@@ -5722,7 +5735,7 @@ var Utils = (function () {
|
|
|
5722
5735
|
eventNameList = [...eventName];
|
|
5723
5736
|
}
|
|
5724
5737
|
eventNameList.forEach((_eventName_) => {
|
|
5725
|
-
|
|
5738
|
+
const event = new Event(_eventName_);
|
|
5726
5739
|
if (details) {
|
|
5727
5740
|
Object.assign(event, details);
|
|
5728
5741
|
}
|
|
@@ -5730,7 +5743,7 @@ var Utils = (function () {
|
|
|
5730
5743
|
});
|
|
5731
5744
|
}
|
|
5732
5745
|
downloadBase64(base64Data, fileName, isIFrame = false) {
|
|
5733
|
-
|
|
5746
|
+
const UtilsContext = this;
|
|
5734
5747
|
if (typeof base64Data !== "string") {
|
|
5735
5748
|
throw new Error("Utils.downloadBase64 参数 base64Data 必须为 string 类型");
|
|
5736
5749
|
}
|
|
@@ -5762,7 +5775,7 @@ var Utils = (function () {
|
|
|
5762
5775
|
let strFound;
|
|
5763
5776
|
if (this.windowApi.globalThis.find) {
|
|
5764
5777
|
/* CODE FOR BROWSERS THAT SUPPORT window.find */
|
|
5765
|
-
|
|
5778
|
+
const windowFind = this.windowApi.self.find;
|
|
5766
5779
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
5767
5780
|
if (strFound && this.windowApi.self.getSelection && !this.windowApi.self.getSelection().anchorNode) {
|
|
5768
5781
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
@@ -5796,19 +5809,19 @@ var Utils = (function () {
|
|
|
5796
5809
|
return strFound ? true : false;
|
|
5797
5810
|
}
|
|
5798
5811
|
*findElementsWithText(element, text, filter) {
|
|
5799
|
-
|
|
5812
|
+
const that = this;
|
|
5800
5813
|
if (element.outerHTML.includes(text)) {
|
|
5801
5814
|
if (element.children.length === 0) {
|
|
5802
|
-
|
|
5815
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5803
5816
|
if (!filterResult) {
|
|
5804
5817
|
yield element;
|
|
5805
5818
|
}
|
|
5806
5819
|
}
|
|
5807
5820
|
else {
|
|
5808
|
-
|
|
5809
|
-
for (
|
|
5821
|
+
const textElement = Array.from(element.childNodes).filter((ele) => ele.nodeType === Node.TEXT_NODE);
|
|
5822
|
+
for (const $child of textElement) {
|
|
5810
5823
|
if ($child.textContent.includes(text)) {
|
|
5811
|
-
|
|
5824
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5812
5825
|
if (!filterResult) {
|
|
5813
5826
|
yield $child;
|
|
5814
5827
|
}
|
|
@@ -5817,7 +5830,7 @@ var Utils = (function () {
|
|
|
5817
5830
|
}
|
|
5818
5831
|
}
|
|
5819
5832
|
for (let index = 0; index < element.children.length; index++) {
|
|
5820
|
-
|
|
5833
|
+
const $child = element.children[index];
|
|
5821
5834
|
yield* that.findElementsWithText($child, text, filter);
|
|
5822
5835
|
}
|
|
5823
5836
|
}
|
|
@@ -5831,8 +5844,8 @@ var Utils = (function () {
|
|
|
5831
5844
|
findVisibleElement(element) {
|
|
5832
5845
|
let currentElement = element;
|
|
5833
5846
|
while (currentElement) {
|
|
5834
|
-
|
|
5835
|
-
if (
|
|
5847
|
+
const elementRect = currentElement.getBoundingClientRect();
|
|
5848
|
+
if (elementRect.length) {
|
|
5836
5849
|
return currentElement;
|
|
5837
5850
|
}
|
|
5838
5851
|
currentElement = currentElement.parentElement;
|
|
@@ -5846,7 +5859,7 @@ var Utils = (function () {
|
|
|
5846
5859
|
}
|
|
5847
5860
|
let result = 0;
|
|
5848
5861
|
let resultType = "KB";
|
|
5849
|
-
|
|
5862
|
+
const sizeData = {};
|
|
5850
5863
|
sizeData.B = 1;
|
|
5851
5864
|
sizeData.KB = 1024;
|
|
5852
5865
|
sizeData.MB = sizeData.KB * sizeData.KB;
|
|
@@ -5859,7 +5872,7 @@ var Utils = (function () {
|
|
|
5859
5872
|
sizeData.BB = sizeData.YB * sizeData.KB;
|
|
5860
5873
|
sizeData.NB = sizeData.BB * sizeData.KB;
|
|
5861
5874
|
sizeData.DB = sizeData.NB * sizeData.KB;
|
|
5862
|
-
for (
|
|
5875
|
+
for (const key in sizeData) {
|
|
5863
5876
|
result = byteSize / sizeData[key];
|
|
5864
5877
|
resultType = key;
|
|
5865
5878
|
if (sizeData.KB >= result) {
|
|
@@ -5872,7 +5885,7 @@ var Utils = (function () {
|
|
|
5872
5885
|
}
|
|
5873
5886
|
getNodeListValue(...args) {
|
|
5874
5887
|
let resultArray = [];
|
|
5875
|
-
for (
|
|
5888
|
+
for (const arg of args) {
|
|
5876
5889
|
let value = arg;
|
|
5877
5890
|
if (typeof arg === "function") {
|
|
5878
5891
|
/* 方法 */
|
|
@@ -5887,7 +5900,7 @@ var Utils = (function () {
|
|
|
5887
5900
|
}
|
|
5888
5901
|
getNonNullValue(...args) {
|
|
5889
5902
|
let resultValue = args[args.length - 1];
|
|
5890
|
-
|
|
5903
|
+
const UtilsContext = this;
|
|
5891
5904
|
for (const argValue of args) {
|
|
5892
5905
|
if (UtilsContext.isNotNull(argValue)) {
|
|
5893
5906
|
resultValue = argValue;
|
|
@@ -5897,7 +5910,7 @@ var Utils = (function () {
|
|
|
5897
5910
|
return resultValue;
|
|
5898
5911
|
}
|
|
5899
5912
|
formatTime(text = new Date(), formatType = "yyyy-MM-dd HH:mm:ss") {
|
|
5900
|
-
|
|
5913
|
+
const time = text == null ? new Date() : new Date(text);
|
|
5901
5914
|
/**
|
|
5902
5915
|
* 校验时间补0
|
|
5903
5916
|
* @param timeNum
|
|
@@ -5905,7 +5918,7 @@ var Utils = (function () {
|
|
|
5905
5918
|
*/
|
|
5906
5919
|
function checkTime(timeNum) {
|
|
5907
5920
|
if (timeNum < 10)
|
|
5908
|
-
return
|
|
5921
|
+
return `0${timeNum}`;
|
|
5909
5922
|
return timeNum;
|
|
5910
5923
|
}
|
|
5911
5924
|
/**
|
|
@@ -5916,7 +5929,7 @@ var Utils = (function () {
|
|
|
5916
5929
|
function timeSystemChange(hourNum) {
|
|
5917
5930
|
return hourNum > 12 ? hourNum - 12 : hourNum;
|
|
5918
5931
|
}
|
|
5919
|
-
|
|
5932
|
+
const timeRegexp = {
|
|
5920
5933
|
yyyy: time.getFullYear(),
|
|
5921
5934
|
/* 年 */
|
|
5922
5935
|
MM: checkTime(time.getMonth() + 1),
|
|
@@ -5933,7 +5946,7 @@ var Utils = (function () {
|
|
|
5933
5946
|
/* 秒 */
|
|
5934
5947
|
};
|
|
5935
5948
|
Object.keys(timeRegexp).forEach(function (key) {
|
|
5936
|
-
|
|
5949
|
+
const replaecRegexp = new RegExp(key, "g");
|
|
5937
5950
|
formatType = formatType.replace(replaecRegexp, timeRegexp[key]);
|
|
5938
5951
|
});
|
|
5939
5952
|
return formatType;
|
|
@@ -5945,12 +5958,12 @@ var Utils = (function () {
|
|
|
5945
5958
|
}
|
|
5946
5959
|
if (text.length === 8) {
|
|
5947
5960
|
/* 该字符串只有时分秒 */
|
|
5948
|
-
|
|
5949
|
-
text = today.getFullYear()
|
|
5961
|
+
const today = new Date();
|
|
5962
|
+
text = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()} ${text}`;
|
|
5950
5963
|
}
|
|
5951
5964
|
text = text.substring(0, 19);
|
|
5952
5965
|
text = text.replace(/-/g, "/");
|
|
5953
|
-
|
|
5966
|
+
const timestamp = new Date(text).getTime();
|
|
5954
5967
|
return timestamp;
|
|
5955
5968
|
}
|
|
5956
5969
|
/**
|
|
@@ -6000,16 +6013,16 @@ var Utils = (function () {
|
|
|
6000
6013
|
if (timestamp2.toString().length === 10) {
|
|
6001
6014
|
timestamp2 = timestamp2 * 1000;
|
|
6002
6015
|
}
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6012
|
-
|
|
6016
|
+
const smallTimeStamp = timestamp1 > timestamp2 ? timestamp2 : timestamp1;
|
|
6017
|
+
const bigTimeStamp = timestamp1 > timestamp2 ? timestamp1 : timestamp2;
|
|
6018
|
+
const oneSecond = 1000; /* 一秒的毫秒数 */
|
|
6019
|
+
const oneMinute = 60 * oneSecond; /* 一分钟的毫秒数 */
|
|
6020
|
+
const oneHour = 60 * oneMinute; /* 一小时的毫秒数 */
|
|
6021
|
+
const oneDay = 24 * oneHour; /* 一天的毫秒数 */
|
|
6022
|
+
const oneMonth = 30 * oneDay; /* 一个月的毫秒数(30天) */
|
|
6023
|
+
const oneYear = 12 * oneMonth; /* 一年的毫秒数 */
|
|
6024
|
+
const bigDate = new Date(bigTimeStamp);
|
|
6025
|
+
const smallDate = new Date(smallTimeStamp);
|
|
6013
6026
|
let remainderValue = 1;
|
|
6014
6027
|
if (type === "年") {
|
|
6015
6028
|
remainderValue = oneYear;
|
|
@@ -6031,30 +6044,30 @@ var Utils = (function () {
|
|
|
6031
6044
|
}
|
|
6032
6045
|
let diffValue = Math.round(Math.abs((bigDate - smallDate) / remainderValue));
|
|
6033
6046
|
if (type === "auto") {
|
|
6034
|
-
|
|
6047
|
+
const timeDifference = bigTimeStamp - smallTimeStamp;
|
|
6035
6048
|
diffValue = Math.floor(timeDifference / (24 * 3600 * 1000));
|
|
6036
6049
|
if (diffValue > 0) {
|
|
6037
|
-
diffValue = diffValue
|
|
6050
|
+
diffValue = `${diffValue}天`;
|
|
6038
6051
|
}
|
|
6039
6052
|
else {
|
|
6040
6053
|
/* 计算出小时数 */
|
|
6041
|
-
|
|
6042
|
-
|
|
6054
|
+
const leave1 = timeDifference % (24 * 3600 * 1000); /* 计算天数后剩余的毫秒数 */
|
|
6055
|
+
const hours = Math.floor(leave1 / (3600 * 1000));
|
|
6043
6056
|
if (hours > 0) {
|
|
6044
|
-
diffValue = hours
|
|
6057
|
+
diffValue = `${hours}小时`;
|
|
6045
6058
|
}
|
|
6046
6059
|
else {
|
|
6047
6060
|
/* 计算相差分钟数 */
|
|
6048
|
-
|
|
6049
|
-
|
|
6061
|
+
const leave2 = leave1 % (3600 * 1000); /* 计算小时数后剩余的毫秒数 */
|
|
6062
|
+
const minutes = Math.floor(leave2 / (60 * 1000));
|
|
6050
6063
|
if (minutes > 0) {
|
|
6051
|
-
diffValue = minutes
|
|
6064
|
+
diffValue = `${minutes}分钟`;
|
|
6052
6065
|
}
|
|
6053
6066
|
else {
|
|
6054
6067
|
/* 计算相差秒数 */
|
|
6055
|
-
|
|
6056
|
-
|
|
6057
|
-
diffValue = seconds
|
|
6068
|
+
const leave3 = leave2 % (60 * 1000); /* 计算分钟数后剩余的毫秒数 */
|
|
6069
|
+
const seconds = Math.round(leave3 / 1000);
|
|
6070
|
+
diffValue = `${seconds}秒`;
|
|
6058
6071
|
}
|
|
6059
6072
|
}
|
|
6060
6073
|
}
|
|
@@ -6062,14 +6075,14 @@ var Utils = (function () {
|
|
|
6062
6075
|
return diffValue;
|
|
6063
6076
|
}
|
|
6064
6077
|
getElementSelector(element) {
|
|
6065
|
-
|
|
6078
|
+
const UtilsContext = this;
|
|
6066
6079
|
if (!element)
|
|
6067
6080
|
return void 0;
|
|
6068
6081
|
if (!element.parentElement)
|
|
6069
6082
|
return void 0;
|
|
6070
6083
|
/* 如果元素有id属性,则直接返回id选择器 */
|
|
6071
6084
|
if (element.id)
|
|
6072
|
-
return
|
|
6085
|
+
return `#${element.id}`;
|
|
6073
6086
|
/* 递归地获取父元素的选择器 */
|
|
6074
6087
|
let selector = UtilsContext.getElementSelector(element.parentElement);
|
|
6075
6088
|
if (!selector) {
|
|
@@ -6077,11 +6090,11 @@ var Utils = (function () {
|
|
|
6077
6090
|
}
|
|
6078
6091
|
/* 如果有多个相同类型的兄弟元素,则需要添加索引 */
|
|
6079
6092
|
if (element.parentElement.querySelectorAll(element.tagName).length > 1) {
|
|
6080
|
-
|
|
6081
|
-
selector +=
|
|
6093
|
+
const index = Array.prototype.indexOf.call(element.parentElement.children, element) + 1;
|
|
6094
|
+
selector += ` > ${element.tagName.toLowerCase()}:nth-child(${index})`;
|
|
6082
6095
|
}
|
|
6083
6096
|
else {
|
|
6084
|
-
selector +=
|
|
6097
|
+
selector += ` > ${element.tagName.toLowerCase()}`;
|
|
6085
6098
|
}
|
|
6086
6099
|
return selector;
|
|
6087
6100
|
}
|
|
@@ -6092,15 +6105,15 @@ var Utils = (function () {
|
|
|
6092
6105
|
* > 2
|
|
6093
6106
|
*/
|
|
6094
6107
|
getMaxValue(...args) {
|
|
6095
|
-
|
|
6108
|
+
const result = [...args];
|
|
6096
6109
|
let newResult = [];
|
|
6097
6110
|
if (result.length === 0) {
|
|
6098
6111
|
return void 0;
|
|
6099
6112
|
}
|
|
6100
6113
|
if (result.length > 1) {
|
|
6101
6114
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6102
|
-
|
|
6103
|
-
|
|
6115
|
+
const data = result[0];
|
|
6116
|
+
const handleDataFunc = result[1];
|
|
6104
6117
|
Object.keys(data).forEach((keyName) => {
|
|
6105
6118
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6106
6119
|
});
|
|
@@ -6148,7 +6161,7 @@ var Utils = (function () {
|
|
|
6148
6161
|
*/
|
|
6149
6162
|
function queryMaxZIndex($ele) {
|
|
6150
6163
|
if (typeof ignoreCallBack === "function") {
|
|
6151
|
-
|
|
6164
|
+
const ignoreResult = ignoreCallBack($ele);
|
|
6152
6165
|
if (typeof ignoreResult === "boolean" && !ignoreResult) {
|
|
6153
6166
|
return;
|
|
6154
6167
|
}
|
|
@@ -6157,7 +6170,7 @@ var Utils = (function () {
|
|
|
6157
6170
|
const nodeStyle = UtilsContext.windowApi.window.getComputedStyle($ele);
|
|
6158
6171
|
/* 不对position为static和display为none的元素进行获取它们的z-index */
|
|
6159
6172
|
if (isVisibleNode(nodeStyle)) {
|
|
6160
|
-
|
|
6173
|
+
const nodeZIndex = parseInt(nodeStyle.zIndex);
|
|
6161
6174
|
if (!isNaN(nodeZIndex)) {
|
|
6162
6175
|
if (nodeZIndex > zIndex) {
|
|
6163
6176
|
// 赋值到全局
|
|
@@ -6173,7 +6186,7 @@ var Utils = (function () {
|
|
|
6173
6186
|
}
|
|
6174
6187
|
}
|
|
6175
6188
|
}
|
|
6176
|
-
target.querySelectorAll("*").forEach(($ele
|
|
6189
|
+
target.querySelectorAll("*").forEach(($ele) => {
|
|
6177
6190
|
queryMaxZIndex($ele);
|
|
6178
6191
|
});
|
|
6179
6192
|
zIndex += deviation;
|
|
@@ -6190,15 +6203,15 @@ var Utils = (function () {
|
|
|
6190
6203
|
return this.getMaxZIndexNodeInfo(deviation, target, ignoreCallBack).zIndex;
|
|
6191
6204
|
}
|
|
6192
6205
|
getMinValue(...args) {
|
|
6193
|
-
|
|
6206
|
+
const result = [...args];
|
|
6194
6207
|
let newResult = [];
|
|
6195
6208
|
if (result.length === 0) {
|
|
6196
6209
|
return void 0;
|
|
6197
6210
|
}
|
|
6198
6211
|
if (result.length > 1) {
|
|
6199
6212
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6200
|
-
|
|
6201
|
-
|
|
6213
|
+
const data = result[0];
|
|
6214
|
+
const handleDataFunc = result[1];
|
|
6202
6215
|
Object.keys(data).forEach((keyName) => {
|
|
6203
6216
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6204
6217
|
});
|
|
@@ -6228,8 +6241,8 @@ var Utils = (function () {
|
|
|
6228
6241
|
* > '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'
|
|
6229
6242
|
**/
|
|
6230
6243
|
getRandomAndroidUA() {
|
|
6231
|
-
|
|
6232
|
-
|
|
6244
|
+
const UtilsContext = this;
|
|
6245
|
+
const mobileNameList = [
|
|
6233
6246
|
"LDN-LX3",
|
|
6234
6247
|
"RNE-L03",
|
|
6235
6248
|
"ASUS_X00ID Build/NMF26F",
|
|
@@ -6246,14 +6259,14 @@ var Utils = (function () {
|
|
|
6246
6259
|
"MI 13 Build/OPR1.170623.027; wv",
|
|
6247
6260
|
];
|
|
6248
6261
|
/* 安卓版本 */
|
|
6249
|
-
|
|
6262
|
+
const androidVersion = UtilsContext.getRandomValue(12, 14);
|
|
6250
6263
|
/* 手机型号 */
|
|
6251
|
-
|
|
6264
|
+
const randomMobile = UtilsContext.getRandomValue(mobileNameList);
|
|
6252
6265
|
/* chrome大版本号 */
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6266
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6267
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6268
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6269
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6257
6270
|
return `Mozilla/5.0 (Linux; Android ${androidVersion}; ${randomMobile}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Mobile Safari/537.36`;
|
|
6258
6271
|
}
|
|
6259
6272
|
/**
|
|
@@ -6275,20 +6288,20 @@ var Utils = (function () {
|
|
|
6275
6288
|
* > 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5068.19 Safari/537.36'
|
|
6276
6289
|
**/
|
|
6277
6290
|
getRandomPCUA() {
|
|
6278
|
-
|
|
6291
|
+
const UtilsContext = this;
|
|
6279
6292
|
/* chrome大版本号 */
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6293
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6294
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6295
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6296
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6284
6297
|
return `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Safari/537.36`;
|
|
6285
6298
|
}
|
|
6286
6299
|
getRandomValue(...args) {
|
|
6287
|
-
|
|
6300
|
+
const result = [...args];
|
|
6288
6301
|
if (result.length > 1) {
|
|
6289
6302
|
if (result.length === 2 && typeof result[0] === "number" && typeof result[1] === "number") {
|
|
6290
|
-
|
|
6291
|
-
|
|
6303
|
+
const leftNumber = result[0] > result[1] ? result[1] : result[0];
|
|
6304
|
+
const rightNumber = result[0] > result[1] ? result[0] : result[1];
|
|
6292
6305
|
return Math.round(Math.random() * (rightNumber - leftNumber)) + leftNumber;
|
|
6293
6306
|
}
|
|
6294
6307
|
else {
|
|
@@ -6296,12 +6309,12 @@ var Utils = (function () {
|
|
|
6296
6309
|
}
|
|
6297
6310
|
}
|
|
6298
6311
|
else if (result.length === 1) {
|
|
6299
|
-
|
|
6312
|
+
const paramData = result[0];
|
|
6300
6313
|
if (Array.isArray(paramData)) {
|
|
6301
6314
|
return paramData[Math.floor(Math.random() * paramData.length)];
|
|
6302
6315
|
}
|
|
6303
6316
|
else if (typeof paramData === "object" && Object.keys(paramData).length > 0) {
|
|
6304
|
-
|
|
6317
|
+
const paramObjDataKey = Object.keys(paramData)[Math.floor(Math.random() * Object.keys(paramData).length)];
|
|
6305
6318
|
return paramData[paramObjDataKey];
|
|
6306
6319
|
}
|
|
6307
6320
|
else {
|
|
@@ -6317,7 +6330,7 @@ var Utils = (function () {
|
|
|
6317
6330
|
* Utils.getReactObj(document.querySelector("input"))?.reactProps?.onChange({target:{value:"123"}});
|
|
6318
6331
|
*/
|
|
6319
6332
|
getReactObj(element) {
|
|
6320
|
-
|
|
6333
|
+
const result = {};
|
|
6321
6334
|
if (element == null) {
|
|
6322
6335
|
return result;
|
|
6323
6336
|
}
|
|
@@ -6343,9 +6356,9 @@ var Utils = (function () {
|
|
|
6343
6356
|
if (typeof target !== "object") {
|
|
6344
6357
|
throw new TypeError("target不是一个对象");
|
|
6345
6358
|
}
|
|
6346
|
-
|
|
6359
|
+
const objectsSymbols = Object.getOwnPropertySymbols(target);
|
|
6347
6360
|
if (typeof keyName === "string") {
|
|
6348
|
-
|
|
6361
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6349
6362
|
return key.toString() === keyName;
|
|
6350
6363
|
});
|
|
6351
6364
|
if (findSymbol) {
|
|
@@ -6353,7 +6366,7 @@ var Utils = (function () {
|
|
|
6353
6366
|
}
|
|
6354
6367
|
}
|
|
6355
6368
|
else if (typeof keyName === "symbol") {
|
|
6356
|
-
|
|
6369
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6357
6370
|
return key === keyName;
|
|
6358
6371
|
});
|
|
6359
6372
|
if (findSymbol) {
|
|
@@ -6361,7 +6374,7 @@ var Utils = (function () {
|
|
|
6361
6374
|
}
|
|
6362
6375
|
}
|
|
6363
6376
|
else {
|
|
6364
|
-
|
|
6377
|
+
const result = {};
|
|
6365
6378
|
objectsSymbols.forEach((item) => {
|
|
6366
6379
|
result[item] = target[item];
|
|
6367
6380
|
});
|
|
@@ -6376,12 +6389,12 @@ var Utils = (function () {
|
|
|
6376
6389
|
* > 12
|
|
6377
6390
|
*/
|
|
6378
6391
|
getTextLength(text) {
|
|
6379
|
-
|
|
6380
|
-
|
|
6392
|
+
const encoder = new TextEncoder();
|
|
6393
|
+
const bytes = encoder.encode(text);
|
|
6381
6394
|
return bytes.length;
|
|
6382
6395
|
}
|
|
6383
6396
|
getTextStorageSize(text, addType = true) {
|
|
6384
|
-
|
|
6397
|
+
const UtilsContext = this;
|
|
6385
6398
|
return UtilsContext.formatByteToSize(UtilsContext.getTextLength(text), addType);
|
|
6386
6399
|
}
|
|
6387
6400
|
getThunderUrl(url) {
|
|
@@ -6394,88 +6407,75 @@ var Utils = (function () {
|
|
|
6394
6407
|
if (url.trim() === "") {
|
|
6395
6408
|
throw new TypeError("url不能为空字符串或纯空格");
|
|
6396
6409
|
}
|
|
6397
|
-
return `thunder://${this.windowApi.globalThis.btoa(
|
|
6410
|
+
return `thunder://${this.windowApi.globalThis.btoa(`AA${url}ZZ`)}`;
|
|
6398
6411
|
}
|
|
6399
6412
|
/**
|
|
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
|
-
|
|
6425
|
-
|
|
6413
|
+
* 对于GM_cookie的兼容写法,当无法使用GM_cookie时可以使用这个,但是并不完全兼容,有些写不出来且限制了httponly是无法访问的
|
|
6414
|
+
* @example
|
|
6415
|
+
let GM_cookie = new Utils.GM_Cookie();
|
|
6416
|
+
GM_cookie.list({name:"xxx_cookie_xxx"},function(cookies,error){
|
|
6417
|
+
if (!error) {
|
|
6418
|
+
console.log(cookies);
|
|
6419
|
+
console.log(cookies.value);
|
|
6420
|
+
} else {
|
|
6421
|
+
console.error(error);
|
|
6422
|
+
}
|
|
6423
|
+
});
|
|
6424
|
+
GM_cookie.set({name:"xxx_cookie_test_xxx",value:"这是Cookie测试值"},function(error){
|
|
6425
|
+
if (error) {
|
|
6426
|
+
console.error(error);
|
|
6427
|
+
} else {
|
|
6428
|
+
console.log('Cookie set successfully.');
|
|
6429
|
+
}
|
|
6430
|
+
})
|
|
6431
|
+
GM_cookie.delete({name:"xxx_cookie_test_xxx"},function(error){
|
|
6432
|
+
if (error) {
|
|
6433
|
+
console.error(error);
|
|
6434
|
+
} else {
|
|
6435
|
+
console.log('Cookie set successfully.');
|
|
6436
|
+
}
|
|
6437
|
+
})
|
|
6438
|
+
**/
|
|
6426
6439
|
GM_Cookie = UtilsGMCookie;
|
|
6427
6440
|
/**
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6441
|
+
* 注册油猴菜单,要求本地存储的键名不能存在其它键名`GM_Menu_Local_Map`会冲突/覆盖
|
|
6442
|
+
* @example
|
|
6443
|
+
let GM_Menu = new Utils.GM_Menu({
|
|
6444
|
+
data: [
|
|
6445
|
+
{
|
|
6446
|
+
menu_key: "menu_key",
|
|
6447
|
+
text: "测试按钮",
|
|
6448
|
+
enable: true,
|
|
6449
|
+
accessKey: "a",
|
|
6450
|
+
autoClose: false,
|
|
6451
|
+
showText(text, enable) {
|
|
6452
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6453
|
+
},
|
|
6454
|
+
callback(data) {
|
|
6455
|
+
console.log("点击菜单,值修改为", data.enable);
|
|
6456
|
+
},
|
|
6440
6457
|
},
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
// 添加键为menu_key2的菜单项
|
|
6463
|
-
GM_Menu.add({
|
|
6464
|
-
key:"menu_key2",
|
|
6465
|
-
text: "测试按钮2",
|
|
6466
|
-
enable: false,
|
|
6467
|
-
showText(text,enable){
|
|
6468
|
-
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6469
|
-
},
|
|
6470
|
-
callback(data){
|
|
6471
|
-
console.log("点击菜单,值修改为",data.enable);
|
|
6472
|
-
}
|
|
6473
|
-
});
|
|
6474
|
-
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6475
|
-
GM_Menu.add([
|
|
6476
|
-
{
|
|
6477
|
-
key:"menu_key3",
|
|
6478
|
-
text: "测试按钮3",
|
|
6458
|
+
],
|
|
6459
|
+
autoReload: false,
|
|
6460
|
+
GM_getValue,
|
|
6461
|
+
GM_setValue,
|
|
6462
|
+
GM_registerMenuCommand,
|
|
6463
|
+
GM_unregisterMenuCommand,
|
|
6464
|
+
});
|
|
6465
|
+
|
|
6466
|
+
|
|
6467
|
+
// 获取某个菜单项的值
|
|
6468
|
+
GM_Menu.get("menu_key");
|
|
6469
|
+
> true
|
|
6470
|
+
|
|
6471
|
+
// 获取某个菜单项的开启/关闭后显示的文本
|
|
6472
|
+
GM_Menu.getShowTextValue("menu_key");
|
|
6473
|
+
> √测试按钮
|
|
6474
|
+
|
|
6475
|
+
// 添加键为menu_key2的菜单项
|
|
6476
|
+
GM_Menu.add({
|
|
6477
|
+
key:"menu_key2",
|
|
6478
|
+
text: "测试按钮2",
|
|
6479
6479
|
enable: false,
|
|
6480
6480
|
showText(text,enable){
|
|
6481
6481
|
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
@@ -6483,152 +6483,165 @@ var Utils = (function () {
|
|
|
6483
6483
|
callback(data){
|
|
6484
6484
|
console.log("点击菜单,值修改为",data.enable);
|
|
6485
6485
|
}
|
|
6486
|
-
}
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
|
|
6490
|
-
|
|
6491
|
-
|
|
6492
|
-
|
|
6486
|
+
});
|
|
6487
|
+
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6488
|
+
GM_Menu.add([
|
|
6489
|
+
{
|
|
6490
|
+
key:"menu_key3",
|
|
6491
|
+
text: "测试按钮3",
|
|
6492
|
+
enable: false,
|
|
6493
|
+
showText(text,enable){
|
|
6494
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6495
|
+
},
|
|
6496
|
+
callback(data){
|
|
6497
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6498
|
+
}
|
|
6493
6499
|
},
|
|
6494
|
-
|
|
6495
|
-
|
|
6500
|
+
{
|
|
6501
|
+
key:"menu_key4",
|
|
6502
|
+
text: "测试按钮4",
|
|
6503
|
+
enable: false,
|
|
6504
|
+
showText(text,enable){
|
|
6505
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6506
|
+
},
|
|
6507
|
+
callback(data){
|
|
6508
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6509
|
+
}
|
|
6496
6510
|
}
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
|
|
6511
|
+
]);
|
|
6512
|
+
|
|
6513
|
+
// 更新键为menu_key的显示文字和点击回调
|
|
6514
|
+
GM_Menu.update({
|
|
6515
|
+
menu_key:{
|
|
6516
|
+
text: "更新后的测试按钮",
|
|
6517
|
+
enable: true,
|
|
6518
|
+
showText(text,enable){
|
|
6519
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6520
|
+
},
|
|
6521
|
+
callback(data){
|
|
6522
|
+
console.log("点击菜单更新后的测试按钮,新值修改为",data.enable);
|
|
6523
|
+
}
|
|
6510
6524
|
}
|
|
6511
|
-
}
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
**/
|
|
6525
|
+
});
|
|
6526
|
+
|
|
6527
|
+
// 删除键为menu_key的菜单
|
|
6528
|
+
GM_Menu.delete("menu_key");
|
|
6529
|
+
**/
|
|
6517
6530
|
GM_Menu = GMMenu;
|
|
6518
6531
|
/**
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6532
|
+
* 基于Function prototype,能够勾住和释放任何函数
|
|
6533
|
+
*
|
|
6534
|
+
* .hook
|
|
6535
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6536
|
+
* + hookFunc {string} 替换的hook函数
|
|
6537
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6538
|
+
* + methodName {string} 匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}
|
|
6539
|
+
*
|
|
6540
|
+
* .unhook
|
|
6541
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6542
|
+
* + funcName {string} 被Hook的函数名称
|
|
6543
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6544
|
+
* @example
|
|
6545
|
+
let hook = new Utils.Hooks();
|
|
6546
|
+
hook.initEnv();
|
|
6547
|
+
function myFunction(){
|
|
6548
|
+
console.log("我自己需要执行的函数");
|
|
6549
|
+
}
|
|
6550
|
+
function testFunction(){
|
|
6551
|
+
console.log("正常执行的函数");
|
|
6552
|
+
}
|
|
6553
|
+
testFunction.hook(testFunction,myFunction,window);
|
|
6554
|
+
**/
|
|
6542
6555
|
Hooks = Hooks;
|
|
6543
6556
|
/**
|
|
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
|
-
|
|
6580
|
-
|
|
6557
|
+
* 为减少代码量和回调,把GM_xmlhttpRequest封装
|
|
6558
|
+
* 文档地址: https://www.tampermonkey.net/documentation.php?ext=iikm
|
|
6559
|
+
* 其中onloadstart、onprogress、onreadystatechange是回调形式,onabort、ontimeout、onerror可以设置全局回调函数
|
|
6560
|
+
* @param _GM_xmlHttpRequest_ 油猴中的GM_xmlhttpRequest
|
|
6561
|
+
* @example
|
|
6562
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6563
|
+
let postResp = await httpx.post({
|
|
6564
|
+
url:url,
|
|
6565
|
+
data:JSON.stringify({
|
|
6566
|
+
test:1
|
|
6567
|
+
}),
|
|
6568
|
+
timeout: 5000
|
|
6569
|
+
});
|
|
6570
|
+
console.log(postResp);
|
|
6571
|
+
> {
|
|
6572
|
+
status: true,
|
|
6573
|
+
data: {responseText: "...", response: xxx,...},
|
|
6574
|
+
msg: "请求完毕",
|
|
6575
|
+
type: "onload",
|
|
6576
|
+
}
|
|
6577
|
+
|
|
6578
|
+
if(postResp === "onload" && postResp.status){
|
|
6579
|
+
// onload
|
|
6580
|
+
}else if(postResp === "ontimeout"){
|
|
6581
|
+
// ontimeout
|
|
6582
|
+
}
|
|
6583
|
+
* @example
|
|
6584
|
+
// 也可以先配置全局参数
|
|
6585
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6586
|
+
httpx.config({
|
|
6587
|
+
timeout: 5000,
|
|
6588
|
+
async: false,
|
|
6589
|
+
responseType: "html",
|
|
6590
|
+
redirect: "follow",
|
|
6591
|
+
})
|
|
6592
|
+
// 优先级为 默认details < 全局details < 单独的details
|
|
6593
|
+
*/
|
|
6581
6594
|
Httpx = Httpx;
|
|
6582
6595
|
/**
|
|
6583
|
-
|
|
6584
|
-
|
|
6585
|
-
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6604
|
-
|
|
6605
|
-
|
|
6606
|
-
|
|
6596
|
+
* 浏览器端的indexedDB操作封装
|
|
6597
|
+
* @example
|
|
6598
|
+
let db = new Utils.indexedDB('web_DB', 'nav_text')
|
|
6599
|
+
let data = {name:'管理员', roleId: 1, type: 1};
|
|
6600
|
+
db.save('list',data).then((resolve)=>{
|
|
6601
|
+
console.log(resolve,'存储成功')
|
|
6602
|
+
})
|
|
6603
|
+
|
|
6604
|
+
db.get('list').then((resolve)=>{
|
|
6605
|
+
console.log(resolve,'查询成功')
|
|
6606
|
+
})
|
|
6607
|
+
|
|
6608
|
+
db.getPaging('list',20,10).then((resolve)=>{
|
|
6609
|
+
console.log(resolve,'查询分页偏移第20,一共10行成功');
|
|
6610
|
+
})
|
|
6611
|
+
|
|
6612
|
+
db.delete('list').then(resolve=>{
|
|
6613
|
+
console.log(resolve,'删除成功---->>>>>>name')
|
|
6614
|
+
})
|
|
6615
|
+
|
|
6616
|
+
db.deleteAll().then(resolve=>{
|
|
6617
|
+
console.log(resolve,'清除数据库---->>>>>>name')
|
|
6618
|
+
})
|
|
6619
|
+
**/
|
|
6607
6620
|
indexedDB = indexedDB;
|
|
6608
6621
|
isNativeFunc(target) {
|
|
6609
6622
|
return Boolean(target.toString().match(/^function .*\(\) { \[native code\] }$/));
|
|
6610
6623
|
}
|
|
6611
6624
|
isNearBottom(...args) {
|
|
6612
6625
|
let nearBottomHeight = 50;
|
|
6613
|
-
|
|
6626
|
+
const checkWindow = () => {
|
|
6614
6627
|
// 已滚动的距离
|
|
6615
|
-
|
|
6628
|
+
const scrollTop = this.windowApi.window.pageYOffset || this.windowApi.document.documentElement.scrollTop;
|
|
6616
6629
|
// 视窗高度
|
|
6617
|
-
|
|
6630
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6618
6631
|
// 最大滚动距离
|
|
6619
|
-
|
|
6632
|
+
const maxScrollHeight = this.windowApi.document.documentElement.scrollHeight - nearBottomHeight;
|
|
6620
6633
|
return scrollTop + viewportHeight >= maxScrollHeight;
|
|
6621
6634
|
};
|
|
6622
|
-
|
|
6635
|
+
const checkNode = ($ele) => {
|
|
6623
6636
|
// 已滚动的距离
|
|
6624
|
-
|
|
6637
|
+
const scrollTop = $ele.scrollTop;
|
|
6625
6638
|
// 视窗高度
|
|
6626
|
-
|
|
6639
|
+
const viewportHeight = $ele.clientHeight;
|
|
6627
6640
|
// 最大滚动距离
|
|
6628
|
-
|
|
6641
|
+
const maxScrollHeight = $ele.scrollHeight - viewportHeight - nearBottomHeight;
|
|
6629
6642
|
return scrollTop >= maxScrollHeight;
|
|
6630
6643
|
};
|
|
6631
|
-
|
|
6644
|
+
const firstArg = args[0];
|
|
6632
6645
|
if (args.length === 0 || typeof args[0] === "number") {
|
|
6633
6646
|
// nearBottomHeight
|
|
6634
6647
|
//
|
|
@@ -6643,7 +6656,7 @@ var Utils = (function () {
|
|
|
6643
6656
|
return checkNode(args[0]);
|
|
6644
6657
|
}
|
|
6645
6658
|
else {
|
|
6646
|
-
throw new TypeError(
|
|
6659
|
+
throw new TypeError(`参数1类型错误${typeof firstArg}`);
|
|
6647
6660
|
}
|
|
6648
6661
|
}
|
|
6649
6662
|
/**
|
|
@@ -6673,7 +6686,7 @@ var Utils = (function () {
|
|
|
6673
6686
|
}
|
|
6674
6687
|
if (typeof target === "object") {
|
|
6675
6688
|
/* 也有种可能,这个jQuery对象是1.8.3版本的,页面中的jQuery是3.4.1版本的 */
|
|
6676
|
-
|
|
6689
|
+
const jQueryProps = [
|
|
6677
6690
|
"add",
|
|
6678
6691
|
"addBack",
|
|
6679
6692
|
"addClass",
|
|
@@ -6857,50 +6870,50 @@ var Utils = (function () {
|
|
|
6857
6870
|
*/
|
|
6858
6871
|
isNotNull = commonUtil.isNotNull.bind(commonUtil);
|
|
6859
6872
|
/**
|
|
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
|
-
|
|
6903
|
-
|
|
6873
|
+
* 判断对象或数据是否为空
|
|
6874
|
+
* + `String`判空的值,如 ""、"null"、"undefined"、" "
|
|
6875
|
+
* + `Number`判空的值,如 0
|
|
6876
|
+
* + `Object`判空的值,如 {}、null、undefined
|
|
6877
|
+
* + `Array`(存在属性Symbol.iterator)判空的值,如 []
|
|
6878
|
+
* + `Boolean`判空的值,如false
|
|
6879
|
+
* + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
|
|
6880
|
+
* @returns
|
|
6881
|
+
* + true 为空
|
|
6882
|
+
* + false 不为空
|
|
6883
|
+
* @example
|
|
6884
|
+
Utils.isNull({});
|
|
6885
|
+
> true
|
|
6886
|
+
* @example
|
|
6887
|
+
Utils.isNull([]);
|
|
6888
|
+
> true
|
|
6889
|
+
* @example
|
|
6890
|
+
Utils.isNull(" ");
|
|
6891
|
+
> true
|
|
6892
|
+
* @example
|
|
6893
|
+
Utils.isNull(function(){});
|
|
6894
|
+
> true
|
|
6895
|
+
* @example
|
|
6896
|
+
Utils.isNull(()=>{}));
|
|
6897
|
+
> true
|
|
6898
|
+
* @example
|
|
6899
|
+
Utils.isNull("undefined");
|
|
6900
|
+
> true
|
|
6901
|
+
* @example
|
|
6902
|
+
Utils.isNull("null");
|
|
6903
|
+
> true
|
|
6904
|
+
* @example
|
|
6905
|
+
Utils.isNull(" ", false);
|
|
6906
|
+
> true
|
|
6907
|
+
* @example
|
|
6908
|
+
Utils.isNull([1],[]);
|
|
6909
|
+
> false
|
|
6910
|
+
* @example
|
|
6911
|
+
Utils.isNull([],[1]);
|
|
6912
|
+
> false
|
|
6913
|
+
* @example
|
|
6914
|
+
Utils.isNull(false,[123]);
|
|
6915
|
+
> false
|
|
6916
|
+
**/
|
|
6904
6917
|
isNull = commonUtil.isNull.bind(commonUtil);
|
|
6905
6918
|
isThemeDark() {
|
|
6906
6919
|
return this.windowApi.globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
@@ -6929,15 +6942,15 @@ var Utils = (function () {
|
|
|
6929
6942
|
}
|
|
6930
6943
|
let result = true;
|
|
6931
6944
|
for (const domItem of needCheckDomList) {
|
|
6932
|
-
|
|
6945
|
+
const domDisplay = this.windowApi.window.getComputedStyle(domItem);
|
|
6933
6946
|
if (domDisplay.display === "none") {
|
|
6934
6947
|
result = false;
|
|
6935
6948
|
}
|
|
6936
6949
|
else {
|
|
6937
|
-
|
|
6950
|
+
const domClientRect = domItem.getBoundingClientRect();
|
|
6938
6951
|
if (inView) {
|
|
6939
|
-
|
|
6940
|
-
|
|
6952
|
+
const viewportWidth = this.windowApi.window.innerWidth || this.windowApi.document.documentElement.clientWidth;
|
|
6953
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6941
6954
|
result = !(domClientRect.right < 0 ||
|
|
6942
6955
|
domClientRect.left > viewportWidth ||
|
|
6943
6956
|
domClientRect.bottom < 0 ||
|
|
@@ -6956,11 +6969,11 @@ var Utils = (function () {
|
|
|
6956
6969
|
}
|
|
6957
6970
|
isWebView_Via() {
|
|
6958
6971
|
let result = true;
|
|
6959
|
-
|
|
6972
|
+
const UtilsContext = this;
|
|
6960
6973
|
if (typeof this.windowApi.top.window.via === "object") {
|
|
6961
6974
|
for (const key in Object.values(this.windowApi.top.window.via)) {
|
|
6962
6975
|
if (Reflect.has(this.windowApi.top.window.via, key)) {
|
|
6963
|
-
|
|
6976
|
+
const objValueFunc = this.windowApi.top.window.via[key];
|
|
6964
6977
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6965
6978
|
result = true;
|
|
6966
6979
|
}
|
|
@@ -6978,11 +6991,11 @@ var Utils = (function () {
|
|
|
6978
6991
|
}
|
|
6979
6992
|
isWebView_X() {
|
|
6980
6993
|
let result = true;
|
|
6981
|
-
|
|
6994
|
+
const UtilsContext = this;
|
|
6982
6995
|
if (typeof this.windowApi.top.window.mbrowser === "object") {
|
|
6983
6996
|
for (const key in Object.values(this.windowApi.top.window.mbrowser)) {
|
|
6984
6997
|
if (Reflect.has(this.windowApi.top.window.mbrowser, key)) {
|
|
6985
|
-
|
|
6998
|
+
const objValueFunc = this.windowApi.top.window.mbrowser[key];
|
|
6986
6999
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6987
7000
|
result = true;
|
|
6988
7001
|
}
|
|
@@ -7009,46 +7022,46 @@ var Utils = (function () {
|
|
|
7009
7022
|
return result;
|
|
7010
7023
|
}
|
|
7011
7024
|
/**
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7025
|
+
* 自动锁对象,用于循环判断运行的函数,在循环外new后使用,注意,如果函数内部存在异步操作,需要使用await
|
|
7026
|
+
* @example
|
|
7027
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}))
|
|
7028
|
+
lock.run();
|
|
7029
|
+
> 1
|
|
7030
|
+
* @example
|
|
7031
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}),true) -- 异步操作
|
|
7032
|
+
await lock.run();
|
|
7033
|
+
> 1
|
|
7034
|
+
**/
|
|
7022
7035
|
LockFunction = LockFunction;
|
|
7023
7036
|
/**
|
|
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
|
-
|
|
7051
|
-
|
|
7037
|
+
* 日志对象
|
|
7038
|
+
* @param _GM_info_ 油猴管理器的API GM_info,或者是一个对象,如{"script":{name:"Utils.Log"}}
|
|
7039
|
+
* @example
|
|
7040
|
+
let log = new Utils.Log(GM_info);
|
|
7041
|
+
log.info("普通输出");
|
|
7042
|
+
> 普通输出
|
|
7043
|
+
|
|
7044
|
+
log.success("成功输出");
|
|
7045
|
+
> 成功输出
|
|
7046
|
+
|
|
7047
|
+
log.error("错误输出");
|
|
7048
|
+
> 错误输出
|
|
7049
|
+
|
|
7050
|
+
log.warn("警告输出");
|
|
7051
|
+
> 警告输出
|
|
7052
|
+
|
|
7053
|
+
log.tag = "自定义tag信息";
|
|
7054
|
+
log.info("自定义info的颜色","#e0e0e0");
|
|
7055
|
+
> 自定义info的颜色
|
|
7056
|
+
|
|
7057
|
+
log.config({
|
|
7058
|
+
successColor: "#31dc02",
|
|
7059
|
+
errorColor: "#e02d2d",
|
|
7060
|
+
infoColor: "black",
|
|
7061
|
+
})
|
|
7062
|
+
log.success("颜色为#31dc02");
|
|
7063
|
+
> 颜色为#31dc02
|
|
7064
|
+
*/
|
|
7052
7065
|
Log = Log;
|
|
7053
7066
|
mergeArrayToString(data, handleFunc) {
|
|
7054
7067
|
if (!(data instanceof Array)) {
|
|
@@ -7077,8 +7090,8 @@ var Utils = (function () {
|
|
|
7077
7090
|
return content;
|
|
7078
7091
|
}
|
|
7079
7092
|
mutationObserver(target, observer_config) {
|
|
7080
|
-
|
|
7081
|
-
|
|
7093
|
+
const UtilsContext = this;
|
|
7094
|
+
const default_obverser_config = {
|
|
7082
7095
|
/* 监听到元素有反馈,需执行的函数 */
|
|
7083
7096
|
callback: () => { },
|
|
7084
7097
|
config: {
|
|
@@ -7120,11 +7133,11 @@ var Utils = (function () {
|
|
|
7120
7133
|
immediate: false,
|
|
7121
7134
|
};
|
|
7122
7135
|
observer_config = UtilsContext.assign(default_obverser_config, observer_config);
|
|
7123
|
-
|
|
7136
|
+
const windowMutationObserver = this.windowApi.window.MutationObserver ||
|
|
7124
7137
|
this.windowApi.window.webkitMutationObserver ||
|
|
7125
7138
|
this.windowApi.window.MozMutationObserver;
|
|
7126
7139
|
// 观察者对象
|
|
7127
|
-
|
|
7140
|
+
const mutationObserver = new windowMutationObserver(function (mutations, observer) {
|
|
7128
7141
|
if (typeof observer_config.callback === "function") {
|
|
7129
7142
|
observer_config.callback(mutations, observer);
|
|
7130
7143
|
}
|
|
@@ -7137,7 +7150,7 @@ var Utils = (function () {
|
|
|
7137
7150
|
}
|
|
7138
7151
|
else if (UtilsContext.isJQuery(target)) {
|
|
7139
7152
|
/* 传入的参数是jQuery对象 */
|
|
7140
|
-
target.each((
|
|
7153
|
+
target.each((_, item) => {
|
|
7141
7154
|
mutationObserver.observe(item, observer_config.config);
|
|
7142
7155
|
});
|
|
7143
7156
|
}
|
|
@@ -7175,7 +7188,7 @@ var Utils = (function () {
|
|
|
7175
7188
|
threshold: [0.01, 0.99],
|
|
7176
7189
|
};
|
|
7177
7190
|
defaultOptions = this.assign(defaultOptions, options || {});
|
|
7178
|
-
|
|
7191
|
+
const intersectionObserver = new IntersectionObserver((entries, observer) => {
|
|
7179
7192
|
if (entries[0].isIntersecting) {
|
|
7180
7193
|
if (typeof callback === "function") {
|
|
7181
7194
|
callback(entries, observer);
|
|
@@ -7205,7 +7218,7 @@ var Utils = (function () {
|
|
|
7205
7218
|
return utils;
|
|
7206
7219
|
}
|
|
7207
7220
|
noConflictFunc(needReleaseObject, needReleaseName, functionNameList = [], release = true) {
|
|
7208
|
-
|
|
7221
|
+
const UtilsContext = this;
|
|
7209
7222
|
if (typeof needReleaseObject !== "object") {
|
|
7210
7223
|
throw new Error("Utils.noConflictFunc 参数 needReleaseObject 必须为 object 类型");
|
|
7211
7224
|
}
|
|
@@ -7215,7 +7228,7 @@ var Utils = (function () {
|
|
|
7215
7228
|
if (!Array.isArray(functionNameList)) {
|
|
7216
7229
|
throw new Error("Utils.noConflictFunc 参数 functionNameList 必须为 Array 类型");
|
|
7217
7230
|
}
|
|
7218
|
-
|
|
7231
|
+
const needReleaseKey = `__${needReleaseName}`;
|
|
7219
7232
|
/**
|
|
7220
7233
|
* 释放所有
|
|
7221
7234
|
*/
|
|
@@ -7303,7 +7316,9 @@ var Utils = (function () {
|
|
|
7303
7316
|
if (typeof dataUri !== "string") {
|
|
7304
7317
|
throw new Error("Utils.parseBase64ToBlob 参数 dataUri 必须为 string 类型");
|
|
7305
7318
|
}
|
|
7306
|
-
|
|
7319
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7320
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7321
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7307
7322
|
while (dataUriLength--) {
|
|
7308
7323
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7309
7324
|
}
|
|
@@ -7318,7 +7333,9 @@ var Utils = (function () {
|
|
|
7318
7333
|
if (typeof fileName !== "string") {
|
|
7319
7334
|
throw new Error("Utils.parseBase64ToFile 参数 fileName 必须为 string 类型");
|
|
7320
7335
|
}
|
|
7321
|
-
|
|
7336
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7337
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7338
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7322
7339
|
while (dataUriLength--) {
|
|
7323
7340
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7324
7341
|
}
|
|
@@ -7352,15 +7369,15 @@ var Utils = (function () {
|
|
|
7352
7369
|
}
|
|
7353
7370
|
parseCDATA(text = "") {
|
|
7354
7371
|
let result = "";
|
|
7355
|
-
|
|
7356
|
-
|
|
7372
|
+
const cdataRegexp = /<!\[CDATA\[([\s\S]*)\]\]>/;
|
|
7373
|
+
const cdataMatch = cdataRegexp.exec(text.trim());
|
|
7357
7374
|
if (cdataMatch && cdataMatch.length > 1) {
|
|
7358
7375
|
result = cdataMatch[cdataMatch.length - 1];
|
|
7359
7376
|
}
|
|
7360
7377
|
return result;
|
|
7361
7378
|
}
|
|
7362
7379
|
async parseFileToBase64(fileObj) {
|
|
7363
|
-
|
|
7380
|
+
const reader = new FileReader();
|
|
7364
7381
|
reader.readAsDataURL(fileObj);
|
|
7365
7382
|
return new Promise((resolve) => {
|
|
7366
7383
|
reader.onload = function (event) {
|
|
@@ -7369,14 +7386,14 @@ var Utils = (function () {
|
|
|
7369
7386
|
});
|
|
7370
7387
|
}
|
|
7371
7388
|
parseFromString(text, mimeType = "text/html") {
|
|
7372
|
-
|
|
7389
|
+
const parser = new DOMParser();
|
|
7373
7390
|
return parser.parseFromString(text, mimeType);
|
|
7374
7391
|
}
|
|
7375
7392
|
parseStringToRegExpString(text) {
|
|
7376
7393
|
if (typeof text !== "string") {
|
|
7377
7394
|
throw new TypeError("string必须是字符串");
|
|
7378
7395
|
}
|
|
7379
|
-
|
|
7396
|
+
const regString = text.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
|
|
7380
7397
|
return regString;
|
|
7381
7398
|
}
|
|
7382
7399
|
preventEvent(element, eventNameList = [], capture) {
|
|
@@ -7391,6 +7408,7 @@ var Utils = (function () {
|
|
|
7391
7408
|
}
|
|
7392
7409
|
if (arguments.length === 1) {
|
|
7393
7410
|
/* 直接阻止事件 */
|
|
7411
|
+
// eslint-disable-next-line prefer-rest-params
|
|
7394
7412
|
return stopEvent(arguments[0]);
|
|
7395
7413
|
}
|
|
7396
7414
|
else {
|
|
@@ -7406,11 +7424,11 @@ var Utils = (function () {
|
|
|
7406
7424
|
}
|
|
7407
7425
|
}
|
|
7408
7426
|
/**
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
|
|
7427
|
+
* 在canvas元素节点上绘制进度圆圈
|
|
7428
|
+
* @example
|
|
7429
|
+
let progress = new Utils.Process({canvasNode:document.querySelector("canvas")});
|
|
7430
|
+
progress.draw();
|
|
7431
|
+
* **/
|
|
7414
7432
|
Progress = Progress;
|
|
7415
7433
|
registerTrustClickEvent(isTrustValue = true, filter) {
|
|
7416
7434
|
function trustEvent(event) {
|
|
@@ -7432,8 +7450,8 @@ var Utils = (function () {
|
|
|
7432
7450
|
}
|
|
7433
7451
|
const originalListener = EventTarget.prototype.addEventListener;
|
|
7434
7452
|
EventTarget.prototype.addEventListener = function (...args) {
|
|
7435
|
-
|
|
7436
|
-
|
|
7453
|
+
const type = args[0];
|
|
7454
|
+
const callback = args[1];
|
|
7437
7455
|
// let options = args[2];
|
|
7438
7456
|
if (filter(type)) {
|
|
7439
7457
|
if (typeof callback === "function") {
|
|
@@ -7442,7 +7460,7 @@ var Utils = (function () {
|
|
|
7442
7460
|
};
|
|
7443
7461
|
}
|
|
7444
7462
|
else if (typeof callback === "object" && "handleEvent" in callback) {
|
|
7445
|
-
|
|
7463
|
+
const oldHandleEvent = callback["handleEvent"];
|
|
7446
7464
|
args[1]["handleEvent"] = function (event) {
|
|
7447
7465
|
if (event == null) {
|
|
7448
7466
|
return;
|
|
@@ -7453,7 +7471,7 @@ var Utils = (function () {
|
|
|
7453
7471
|
event instanceof Proxy;
|
|
7454
7472
|
oldHandleEvent.call(this, trustEvent(event));
|
|
7455
7473
|
}
|
|
7456
|
-
catch
|
|
7474
|
+
catch {
|
|
7457
7475
|
Reflect.set(event, "isTrusted", isTrustValue);
|
|
7458
7476
|
}
|
|
7459
7477
|
};
|
|
@@ -7476,7 +7494,7 @@ var Utils = (function () {
|
|
|
7476
7494
|
return isNegative ? -reversedNum : reversedNum;
|
|
7477
7495
|
}
|
|
7478
7496
|
selectElementText(element, childTextNode, startIndex, endIndex) {
|
|
7479
|
-
|
|
7497
|
+
const range = this.windowApi.document.createRange();
|
|
7480
7498
|
range.selectNodeContents(element);
|
|
7481
7499
|
if (childTextNode) {
|
|
7482
7500
|
if (childTextNode.nodeType !== Node.TEXT_NODE) {
|
|
@@ -7487,7 +7505,7 @@ var Utils = (function () {
|
|
|
7487
7505
|
range.setEnd(childTextNode, endIndex);
|
|
7488
7506
|
}
|
|
7489
7507
|
}
|
|
7490
|
-
|
|
7508
|
+
const selection = this.windowApi.globalThis.getSelection();
|
|
7491
7509
|
if (selection) {
|
|
7492
7510
|
selection.removeAllRanges();
|
|
7493
7511
|
selection.addRange(range);
|
|
@@ -7515,7 +7533,7 @@ var Utils = (function () {
|
|
|
7515
7533
|
else {
|
|
7516
7534
|
textType = "text/plain";
|
|
7517
7535
|
}
|
|
7518
|
-
|
|
7536
|
+
const UtilsContext = this;
|
|
7519
7537
|
class UtilsClipboard {
|
|
7520
7538
|
#resolve;
|
|
7521
7539
|
#copyData;
|
|
@@ -7527,7 +7545,7 @@ var Utils = (function () {
|
|
|
7527
7545
|
}
|
|
7528
7546
|
async init() {
|
|
7529
7547
|
let copyStatus = false;
|
|
7530
|
-
|
|
7548
|
+
const requestPermissionStatus = await this.requestClipboardPermission();
|
|
7531
7549
|
console.log(requestPermissionStatus);
|
|
7532
7550
|
if (this.hasClipboard() && (this.hasClipboardWrite() || this.hasClipboardWriteText())) {
|
|
7533
7551
|
try {
|
|
@@ -7566,7 +7584,7 @@ var Utils = (function () {
|
|
|
7566
7584
|
*/
|
|
7567
7585
|
copyTextByTextArea() {
|
|
7568
7586
|
try {
|
|
7569
|
-
|
|
7587
|
+
const copyElement = UtilsContext.windowApi.document.createElement("textarea");
|
|
7570
7588
|
copyElement.value = this.#copyData;
|
|
7571
7589
|
copyElement.setAttribute("type", "text");
|
|
7572
7590
|
copyElement.setAttribute("style", "opacity:0;position:absolute;");
|
|
@@ -7586,20 +7604,17 @@ var Utils = (function () {
|
|
|
7586
7604
|
* 申请剪贴板权限
|
|
7587
7605
|
*/
|
|
7588
7606
|
requestClipboardPermission() {
|
|
7589
|
-
return new Promise((resolve
|
|
7607
|
+
return new Promise((resolve) => {
|
|
7590
7608
|
if (navigator.permissions && navigator.permissions.query) {
|
|
7591
7609
|
navigator.permissions
|
|
7592
7610
|
.query({
|
|
7593
7611
|
name: "clipboard-write",
|
|
7594
7612
|
})
|
|
7595
|
-
.then((
|
|
7613
|
+
.then(() => {
|
|
7596
7614
|
resolve(true);
|
|
7597
7615
|
})
|
|
7598
7616
|
.catch((error) => {
|
|
7599
|
-
console.error([
|
|
7600
|
-
"申请剪贴板权限失败,尝试直接写入👉",
|
|
7601
|
-
error.message ?? error.name ?? error.stack,
|
|
7602
|
-
]);
|
|
7617
|
+
console.error(["申请剪贴板权限失败,尝试直接写入👉", error.message ?? error.name ?? error.stack]);
|
|
7603
7618
|
resolve(false);
|
|
7604
7619
|
});
|
|
7605
7620
|
}
|
|
@@ -7626,7 +7641,7 @@ var Utils = (function () {
|
|
|
7626
7641
|
}
|
|
7627
7642
|
else {
|
|
7628
7643
|
/* 可复制对象 */
|
|
7629
|
-
|
|
7644
|
+
const textBlob = new Blob([this.#copyData], {
|
|
7630
7645
|
type: this.#copyDataType,
|
|
7631
7646
|
});
|
|
7632
7647
|
navigator.clipboard
|
|
@@ -7658,7 +7673,7 @@ var Utils = (function () {
|
|
|
7658
7673
|
});
|
|
7659
7674
|
}
|
|
7660
7675
|
setTimeout(callback, delayTime = 0) {
|
|
7661
|
-
|
|
7676
|
+
const UtilsContext = this;
|
|
7662
7677
|
if (typeof callback !== "function" && typeof callback !== "string") {
|
|
7663
7678
|
throw new TypeError("Utils.setTimeout 参数 callback 必须为 function|string 类型");
|
|
7664
7679
|
}
|
|
@@ -7672,7 +7687,7 @@ var Utils = (function () {
|
|
|
7672
7687
|
});
|
|
7673
7688
|
}
|
|
7674
7689
|
sleep(delayTime = 0) {
|
|
7675
|
-
|
|
7690
|
+
const UtilsContext = this;
|
|
7676
7691
|
if (typeof delayTime !== "number") {
|
|
7677
7692
|
throw new Error("Utils.sleep 参数 delayTime 必须为 number 类型");
|
|
7678
7693
|
}
|
|
@@ -7683,18 +7698,18 @@ var Utils = (function () {
|
|
|
7683
7698
|
});
|
|
7684
7699
|
}
|
|
7685
7700
|
dragSlider(selector, offsetX = this.windowApi.window.innerWidth) {
|
|
7686
|
-
|
|
7701
|
+
const UtilsContext = this;
|
|
7687
7702
|
function initMouseEvent(eventName, offSetX, offSetY) {
|
|
7688
|
-
|
|
7689
|
-
|
|
7703
|
+
const win = typeof unsafeWindow === "undefined" ? globalThis : unsafeWindow;
|
|
7704
|
+
const mouseEvent = UtilsContext.windowApi.document.createEvent("MouseEvents");
|
|
7690
7705
|
mouseEvent.initMouseEvent(eventName, true, true, win, 0, offSetX, offSetY, offSetX, offSetY, false, false, false, false, 0, null);
|
|
7691
7706
|
return mouseEvent;
|
|
7692
7707
|
}
|
|
7693
|
-
|
|
7708
|
+
const sliderElement = typeof selector === "string" ? domUtils.selector(selector) : selector;
|
|
7694
7709
|
if (!(sliderElement instanceof Node) || !(sliderElement instanceof Element)) {
|
|
7695
7710
|
throw new Error("Utils.dragSlider 参数selector 必须为Node/Element类型");
|
|
7696
7711
|
}
|
|
7697
|
-
|
|
7712
|
+
const rect = sliderElement.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top, x1 = x0 + offsetX, y1 = y0;
|
|
7698
7713
|
sliderElement.dispatchEvent(initMouseEvent("mousedown", x0, y0));
|
|
7699
7714
|
sliderElement.dispatchEvent(initMouseEvent("mousemove", x1, y1));
|
|
7700
7715
|
sliderElement.dispatchEvent(initMouseEvent("mouseleave", x1, y1));
|
|
@@ -7722,34 +7737,34 @@ var Utils = (function () {
|
|
|
7722
7737
|
console.error(err);
|
|
7723
7738
|
}
|
|
7724
7739
|
}
|
|
7725
|
-
exitFullScreen(
|
|
7726
|
-
if (
|
|
7727
|
-
return
|
|
7740
|
+
exitFullScreen($el = this.windowApi.document.documentElement) {
|
|
7741
|
+
if ($el.exitFullscreen) {
|
|
7742
|
+
return $el.exitFullscreen();
|
|
7728
7743
|
}
|
|
7729
|
-
else if (
|
|
7730
|
-
return
|
|
7744
|
+
else if ($el.msExitFullscreen) {
|
|
7745
|
+
return $el.msExitFullscreen();
|
|
7731
7746
|
}
|
|
7732
|
-
else if (
|
|
7733
|
-
return
|
|
7747
|
+
else if ($el.mozCancelFullScreen) {
|
|
7748
|
+
return $el.mozCancelFullScreen();
|
|
7734
7749
|
}
|
|
7735
|
-
else if (
|
|
7736
|
-
return
|
|
7750
|
+
else if ($el.webkitCancelFullScreen) {
|
|
7751
|
+
return $el.webkitCancelFullScreen();
|
|
7737
7752
|
}
|
|
7738
7753
|
else {
|
|
7739
|
-
return new Promise((
|
|
7754
|
+
return new Promise((_, reject) => {
|
|
7740
7755
|
reject(new TypeError("该浏览器不支持全屏API"));
|
|
7741
7756
|
});
|
|
7742
7757
|
}
|
|
7743
7758
|
}
|
|
7744
7759
|
sortListByProperty(data, getPropertyValueFunc, sortByDesc = true) {
|
|
7745
|
-
|
|
7760
|
+
const UtilsContext = this;
|
|
7746
7761
|
if (typeof getPropertyValueFunc !== "function" && typeof getPropertyValueFunc !== "string") {
|
|
7747
7762
|
throw new Error("Utils.sortListByProperty 参数 getPropertyValueFunc 必须为 function|string 类型");
|
|
7748
7763
|
}
|
|
7749
7764
|
if (typeof sortByDesc !== "boolean") {
|
|
7750
7765
|
throw new Error("Utils.sortListByProperty 参数 sortByDesc 必须为 boolean 类型");
|
|
7751
7766
|
}
|
|
7752
|
-
|
|
7767
|
+
const getObjValue = function (obj) {
|
|
7753
7768
|
return typeof getPropertyValueFunc === "string" ? obj[getPropertyValueFunc] : getPropertyValueFunc(obj);
|
|
7754
7769
|
};
|
|
7755
7770
|
/**
|
|
@@ -7758,9 +7773,9 @@ var Utils = (function () {
|
|
|
7758
7773
|
* @param {any} before_obj
|
|
7759
7774
|
* @returns
|
|
7760
7775
|
*/
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7776
|
+
const sortFunc = function (after_obj, before_obj) {
|
|
7777
|
+
const beforeValue = getObjValue(before_obj); /* 前 */
|
|
7778
|
+
const afterValue = getObjValue(after_obj); /* 后 */
|
|
7764
7779
|
if (sortByDesc) {
|
|
7765
7780
|
if (afterValue > beforeValue) {
|
|
7766
7781
|
return -1;
|
|
@@ -7789,19 +7804,18 @@ var Utils = (function () {
|
|
|
7789
7804
|
* @param nodeList 元素列表
|
|
7790
7805
|
* @param getNodeListFunc 获取元素列表的函数
|
|
7791
7806
|
*/
|
|
7792
|
-
|
|
7793
|
-
|
|
7807
|
+
const sortNodeFunc = function (nodeList, getNodeListFunc) {
|
|
7808
|
+
const nodeListLength = nodeList.length;
|
|
7794
7809
|
for (let i = 0; i < nodeListLength - 1; i++) {
|
|
7795
7810
|
for (let j = 0; j < nodeListLength - 1 - i; j++) {
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
if ((sortByDesc == true && beforeValue < afterValue) ||
|
|
7801
|
-
(sortByDesc == false && beforeValue > afterValue)) {
|
|
7811
|
+
const beforeNode = nodeList[j];
|
|
7812
|
+
const afterNode = nodeList[j + 1];
|
|
7813
|
+
const beforeValue = getObjValue(beforeNode); /* 前 */
|
|
7814
|
+
const afterValue = getObjValue(afterNode); /* 后 */
|
|
7815
|
+
if ((sortByDesc == true && beforeValue < afterValue) || (sortByDesc == false && beforeValue > afterValue)) {
|
|
7802
7816
|
/* 升序/降序 */
|
|
7803
7817
|
/* 相邻元素两两对比 */
|
|
7804
|
-
|
|
7818
|
+
const temp = beforeNode.nextElementSibling;
|
|
7805
7819
|
afterNode.after(beforeNode);
|
|
7806
7820
|
if (temp == null) {
|
|
7807
7821
|
/* 如果为空,那么是最后一个元素,使用append */
|
|
@@ -7859,7 +7873,7 @@ var Utils = (function () {
|
|
|
7859
7873
|
return newTargetString;
|
|
7860
7874
|
}
|
|
7861
7875
|
startsWith(target, searchString, position = 0) {
|
|
7862
|
-
|
|
7876
|
+
const UtilsContext = this;
|
|
7863
7877
|
if (position > target.length) {
|
|
7864
7878
|
/* 超出目标字符串的长度 */
|
|
7865
7879
|
return false;
|
|
@@ -7903,7 +7917,7 @@ var Utils = (function () {
|
|
|
7903
7917
|
*/
|
|
7904
7918
|
toJSON = commonUtil.toJSON.bind(commonUtil);
|
|
7905
7919
|
toSearchParamsStr(obj, addPrefix) {
|
|
7906
|
-
|
|
7920
|
+
const UtilsContext = this;
|
|
7907
7921
|
let searhParamsStr = "";
|
|
7908
7922
|
if (Array.isArray(obj)) {
|
|
7909
7923
|
obj.forEach((item) => {
|
|
@@ -7911,7 +7925,7 @@ var Utils = (function () {
|
|
|
7911
7925
|
searhParamsStr += UtilsContext.toSearchParamsStr(item);
|
|
7912
7926
|
}
|
|
7913
7927
|
else {
|
|
7914
|
-
searhParamsStr +=
|
|
7928
|
+
searhParamsStr += `&${UtilsContext.toSearchParamsStr(item)}`;
|
|
7915
7929
|
}
|
|
7916
7930
|
});
|
|
7917
7931
|
}
|
|
@@ -7919,7 +7933,7 @@ var Utils = (function () {
|
|
|
7919
7933
|
searhParamsStr = new URLSearchParams(Object.entries(obj)).toString();
|
|
7920
7934
|
}
|
|
7921
7935
|
if (addPrefix && !searhParamsStr.startsWith("?")) {
|
|
7922
|
-
searhParamsStr =
|
|
7936
|
+
searhParamsStr = `?${searhParamsStr}`;
|
|
7923
7937
|
}
|
|
7924
7938
|
return searhParamsStr;
|
|
7925
7939
|
}
|
|
@@ -7967,7 +7981,7 @@ var Utils = (function () {
|
|
|
7967
7981
|
}
|
|
7968
7982
|
}
|
|
7969
7983
|
waitArrayLoopToEnd(data, handleFunc) {
|
|
7970
|
-
|
|
7984
|
+
const UtilsContext = this;
|
|
7971
7985
|
if (typeof handleFunc !== "function" && typeof handleFunc !== "string") {
|
|
7972
7986
|
throw new Error("Utils.waitArrayLoopToEnd 参数 handleDataFunction 必须为 function|string 类型");
|
|
7973
7987
|
}
|
|
@@ -7977,17 +7991,17 @@ var Utils = (function () {
|
|
|
7977
7991
|
}
|
|
7978
7992
|
wait(checkFn, timeout, parent) {
|
|
7979
7993
|
const UtilsContext = this;
|
|
7980
|
-
|
|
7994
|
+
const __timeout__ = typeof timeout === "number" ? timeout : 0;
|
|
7981
7995
|
return new Promise((resolve) => {
|
|
7982
|
-
|
|
7996
|
+
const observer = UtilsContext.mutationObserver(parent || UtilsContext.windowApi.document, {
|
|
7983
7997
|
config: {
|
|
7984
7998
|
subtree: true,
|
|
7985
7999
|
childList: true,
|
|
7986
8000
|
attributes: true,
|
|
7987
8001
|
},
|
|
7988
8002
|
immediate: true,
|
|
7989
|
-
callback(
|
|
7990
|
-
|
|
8003
|
+
callback(_, __observer__) {
|
|
8004
|
+
const result = checkFn();
|
|
7991
8005
|
if (result.success) {
|
|
7992
8006
|
// 取消观察器
|
|
7993
8007
|
if (typeof __observer__?.disconnect === "function") {
|
|
@@ -8011,9 +8025,9 @@ var Utils = (function () {
|
|
|
8011
8025
|
waitNode(...args) {
|
|
8012
8026
|
// 过滤掉undefined
|
|
8013
8027
|
args = args.filter((arg) => arg !== void 0);
|
|
8014
|
-
|
|
8028
|
+
const UtilsContext = this;
|
|
8015
8029
|
// 选择器
|
|
8016
|
-
|
|
8030
|
+
const selector = args[0];
|
|
8017
8031
|
// 父元素(监听的元素)
|
|
8018
8032
|
let parent = UtilsContext.windowApi.document;
|
|
8019
8033
|
// 超时时间
|
|
@@ -8023,7 +8037,7 @@ var Utils = (function () {
|
|
|
8023
8037
|
}
|
|
8024
8038
|
if (args.length === 1) ;
|
|
8025
8039
|
else if (args.length === 2) {
|
|
8026
|
-
|
|
8040
|
+
const secondParam = args[1];
|
|
8027
8041
|
if (typeof secondParam === "number") {
|
|
8028
8042
|
// "div",10000
|
|
8029
8043
|
timeout = secondParam;
|
|
@@ -8039,9 +8053,9 @@ var Utils = (function () {
|
|
|
8039
8053
|
else if (args.length === 3) {
|
|
8040
8054
|
// "div",document,10000
|
|
8041
8055
|
// 第二个参数,parent
|
|
8042
|
-
|
|
8056
|
+
const secondParam = args[1];
|
|
8043
8057
|
// 第三个参数,timeout
|
|
8044
|
-
|
|
8058
|
+
const thirdParam = args[2];
|
|
8045
8059
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8046
8060
|
parent = secondParam;
|
|
8047
8061
|
if (typeof thirdParam === "number") {
|
|
@@ -8060,9 +8074,9 @@ var Utils = (function () {
|
|
|
8060
8074
|
}
|
|
8061
8075
|
function getNode() {
|
|
8062
8076
|
if (Array.isArray(selector)) {
|
|
8063
|
-
|
|
8077
|
+
const result = [];
|
|
8064
8078
|
for (let index = 0; index < selector.length; index++) {
|
|
8065
|
-
|
|
8079
|
+
const node = domUtils.selector(selector[index]);
|
|
8066
8080
|
if (node) {
|
|
8067
8081
|
result.push(node);
|
|
8068
8082
|
}
|
|
@@ -8079,7 +8093,7 @@ var Utils = (function () {
|
|
|
8079
8093
|
}
|
|
8080
8094
|
}
|
|
8081
8095
|
return UtilsContext.wait(() => {
|
|
8082
|
-
|
|
8096
|
+
const node = getNode();
|
|
8083
8097
|
if (node) {
|
|
8084
8098
|
return {
|
|
8085
8099
|
success: true,
|
|
@@ -8097,9 +8111,9 @@ var Utils = (function () {
|
|
|
8097
8111
|
waitAnyNode(...args) {
|
|
8098
8112
|
// 过滤掉undefined
|
|
8099
8113
|
args = args.filter((arg) => arg !== void 0);
|
|
8100
|
-
|
|
8114
|
+
const UtilsContext = this;
|
|
8101
8115
|
// 选择器
|
|
8102
|
-
|
|
8116
|
+
const selectorList = args[0];
|
|
8103
8117
|
// 父元素(监听的元素)
|
|
8104
8118
|
let parent = UtilsContext.windowApi.document;
|
|
8105
8119
|
// 超时时间
|
|
@@ -8109,7 +8123,7 @@ var Utils = (function () {
|
|
|
8109
8123
|
}
|
|
8110
8124
|
if (args.length === 1) ;
|
|
8111
8125
|
else if (args.length === 2) {
|
|
8112
|
-
|
|
8126
|
+
const secondParam = args[1];
|
|
8113
8127
|
if (typeof secondParam === "number") {
|
|
8114
8128
|
// "div",10000
|
|
8115
8129
|
timeout = secondParam;
|
|
@@ -8125,9 +8139,9 @@ var Utils = (function () {
|
|
|
8125
8139
|
else if (args.length === 3) {
|
|
8126
8140
|
// "div",document,10000
|
|
8127
8141
|
// 第二个参数,parent
|
|
8128
|
-
|
|
8142
|
+
const secondParam = args[1];
|
|
8129
8143
|
// 第三个参数,timeout
|
|
8130
|
-
|
|
8144
|
+
const thirdParam = args[2];
|
|
8131
8145
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8132
8146
|
parent = secondParam;
|
|
8133
8147
|
if (typeof thirdParam === "number") {
|
|
@@ -8144,7 +8158,7 @@ var Utils = (function () {
|
|
|
8144
8158
|
else {
|
|
8145
8159
|
throw new TypeError("Utils.waitAnyNode 参数个数错误");
|
|
8146
8160
|
}
|
|
8147
|
-
|
|
8161
|
+
const promiseList = selectorList.map((selector) => {
|
|
8148
8162
|
return UtilsContext.waitNode(selector, parent, timeout);
|
|
8149
8163
|
});
|
|
8150
8164
|
return Promise.any(promiseList);
|
|
@@ -8152,9 +8166,9 @@ var Utils = (function () {
|
|
|
8152
8166
|
waitNodeList(...args) {
|
|
8153
8167
|
// 过滤掉undefined
|
|
8154
8168
|
args = args.filter((arg) => arg !== void 0);
|
|
8155
|
-
|
|
8169
|
+
const UtilsContext = this;
|
|
8156
8170
|
// 选择器数组
|
|
8157
|
-
|
|
8171
|
+
const selector = args[0];
|
|
8158
8172
|
// 父元素(监听的元素)
|
|
8159
8173
|
let parent = UtilsContext.windowApi.document;
|
|
8160
8174
|
// 超时时间
|
|
@@ -8164,7 +8178,7 @@ var Utils = (function () {
|
|
|
8164
8178
|
}
|
|
8165
8179
|
if (args.length === 1) ;
|
|
8166
8180
|
else if (args.length === 2) {
|
|
8167
|
-
|
|
8181
|
+
const secondParam = args[1];
|
|
8168
8182
|
if (typeof secondParam === "number") {
|
|
8169
8183
|
// "div",10000
|
|
8170
8184
|
timeout = secondParam;
|
|
@@ -8180,9 +8194,9 @@ var Utils = (function () {
|
|
|
8180
8194
|
else if (args.length === 3) {
|
|
8181
8195
|
// "div",document,10000
|
|
8182
8196
|
// 第二个参数,parent
|
|
8183
|
-
|
|
8197
|
+
const secondParam = args[1];
|
|
8184
8198
|
// 第三个参数,timeout
|
|
8185
|
-
|
|
8199
|
+
const thirdParam = args[2];
|
|
8186
8200
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8187
8201
|
parent = secondParam;
|
|
8188
8202
|
if (typeof thirdParam === "number") {
|
|
@@ -8201,9 +8215,9 @@ var Utils = (function () {
|
|
|
8201
8215
|
}
|
|
8202
8216
|
function getNodeList() {
|
|
8203
8217
|
if (Array.isArray(selector)) {
|
|
8204
|
-
|
|
8218
|
+
const result = [];
|
|
8205
8219
|
for (let index = 0; index < selector.length; index++) {
|
|
8206
|
-
|
|
8220
|
+
const nodeList = domUtils.selectorAll(selector[index], parent);
|
|
8207
8221
|
if (nodeList.length) {
|
|
8208
8222
|
result.push(nodeList);
|
|
8209
8223
|
}
|
|
@@ -8213,14 +8227,14 @@ var Utils = (function () {
|
|
|
8213
8227
|
}
|
|
8214
8228
|
}
|
|
8215
8229
|
else {
|
|
8216
|
-
|
|
8230
|
+
const nodeList = domUtils.selectorAll(selector, parent);
|
|
8217
8231
|
if (nodeList.length) {
|
|
8218
8232
|
return nodeList;
|
|
8219
8233
|
}
|
|
8220
8234
|
}
|
|
8221
8235
|
}
|
|
8222
8236
|
return UtilsContext.wait(() => {
|
|
8223
|
-
|
|
8237
|
+
const node = getNodeList();
|
|
8224
8238
|
if (node) {
|
|
8225
8239
|
return {
|
|
8226
8240
|
success: true,
|
|
@@ -8238,9 +8252,9 @@ var Utils = (function () {
|
|
|
8238
8252
|
waitAnyNodeList(...args) {
|
|
8239
8253
|
// 过滤掉undefined
|
|
8240
8254
|
args = args.filter((arg) => arg !== void 0);
|
|
8241
|
-
|
|
8255
|
+
const UtilsContext = this;
|
|
8242
8256
|
// 选择器数组
|
|
8243
|
-
|
|
8257
|
+
const selectorList = args[0];
|
|
8244
8258
|
// 父元素(监听的元素)
|
|
8245
8259
|
let parent = UtilsContext.windowApi.document;
|
|
8246
8260
|
// 超时时间
|
|
@@ -8250,7 +8264,7 @@ var Utils = (function () {
|
|
|
8250
8264
|
}
|
|
8251
8265
|
if (args.length === 1) ;
|
|
8252
8266
|
else if (args.length === 2) {
|
|
8253
|
-
|
|
8267
|
+
const secondParam = args[1];
|
|
8254
8268
|
if (typeof secondParam === "number") {
|
|
8255
8269
|
// "div",10000
|
|
8256
8270
|
timeout = secondParam;
|
|
@@ -8266,9 +8280,9 @@ var Utils = (function () {
|
|
|
8266
8280
|
else if (args.length === 3) {
|
|
8267
8281
|
// "div",document,10000
|
|
8268
8282
|
// 第二个参数,parent
|
|
8269
|
-
|
|
8283
|
+
const secondParam = args[1];
|
|
8270
8284
|
// 第三个参数,timeout
|
|
8271
|
-
|
|
8285
|
+
const thirdParam = args[2];
|
|
8272
8286
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8273
8287
|
parent = secondParam;
|
|
8274
8288
|
if (typeof thirdParam === "number") {
|
|
@@ -8285,7 +8299,7 @@ var Utils = (function () {
|
|
|
8285
8299
|
else {
|
|
8286
8300
|
throw new TypeError("Utils.waitAnyNodeList 参数个数错误");
|
|
8287
8301
|
}
|
|
8288
|
-
|
|
8302
|
+
const promiseList = selectorList.map((selector) => {
|
|
8289
8303
|
return UtilsContext.waitNodeList(selector, parent, timeout);
|
|
8290
8304
|
});
|
|
8291
8305
|
return Promise.any(promiseList);
|
|
@@ -8314,13 +8328,13 @@ var Utils = (function () {
|
|
|
8314
8328
|
});
|
|
8315
8329
|
}
|
|
8316
8330
|
waitPropertyByInterval(checkObj, checkPropertyName, intervalTimer = 250, maxTime = -1) {
|
|
8317
|
-
|
|
8331
|
+
const UtilsContext = this;
|
|
8318
8332
|
if (checkObj == null) {
|
|
8319
8333
|
throw new TypeError("checkObj 不能为空对象 ");
|
|
8320
8334
|
}
|
|
8321
8335
|
let isResolve = false;
|
|
8322
8336
|
return new Promise((resolve, reject) => {
|
|
8323
|
-
|
|
8337
|
+
const interval = UtilsContext.workerSetInterval(() => {
|
|
8324
8338
|
let obj = checkObj;
|
|
8325
8339
|
if (typeof checkObj === "function") {
|
|
8326
8340
|
obj = checkObj();
|
|
@@ -8353,7 +8367,7 @@ var Utils = (function () {
|
|
|
8353
8367
|
throw new Error("Utils.waitVueByInterval 参数element 不能为空");
|
|
8354
8368
|
}
|
|
8355
8369
|
let flag = false;
|
|
8356
|
-
|
|
8370
|
+
const UtilsContext = this;
|
|
8357
8371
|
try {
|
|
8358
8372
|
await UtilsContext.waitPropertyByInterval(element, function (targetElement) {
|
|
8359
8373
|
if (targetElement == null) {
|
|
@@ -8365,7 +8379,7 @@ var Utils = (function () {
|
|
|
8365
8379
|
if (propertyName == null) {
|
|
8366
8380
|
return true;
|
|
8367
8381
|
}
|
|
8368
|
-
|
|
8382
|
+
const vueObject = targetElement[vueName];
|
|
8369
8383
|
if (typeof propertyName === "string") {
|
|
8370
8384
|
if (propertyName in vueObject) {
|
|
8371
8385
|
flag = true;
|
|
@@ -8381,6 +8395,7 @@ var Utils = (function () {
|
|
|
8381
8395
|
}
|
|
8382
8396
|
return false;
|
|
8383
8397
|
}, timer, maxTime);
|
|
8398
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8384
8399
|
}
|
|
8385
8400
|
catch (error) {
|
|
8386
8401
|
return flag;
|
|
@@ -8439,7 +8454,7 @@ var Utils = (function () {
|
|
|
8439
8454
|
if (target == null) {
|
|
8440
8455
|
return;
|
|
8441
8456
|
}
|
|
8442
|
-
|
|
8457
|
+
const handleResult = handler(target);
|
|
8443
8458
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8444
8459
|
return handleResult.data;
|
|
8445
8460
|
}
|
|
@@ -8452,10 +8467,10 @@ var Utils = (function () {
|
|
|
8452
8467
|
*/
|
|
8453
8468
|
async asyncQueryProperty(target, handler) {
|
|
8454
8469
|
if (target == null) {
|
|
8455
|
-
// @ts-
|
|
8470
|
+
// @ts-expect-error 空返回
|
|
8456
8471
|
return;
|
|
8457
8472
|
}
|
|
8458
|
-
|
|
8473
|
+
const handleResult = await handler(target);
|
|
8459
8474
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8460
8475
|
return handleResult.data;
|
|
8461
8476
|
}
|
|
@@ -8563,6 +8578,7 @@ var Utils = (function () {
|
|
|
8563
8578
|
workerSetTimeout(callback, timeout = 0) {
|
|
8564
8579
|
try {
|
|
8565
8580
|
return setTimeout$1(callback, timeout);
|
|
8581
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8566
8582
|
}
|
|
8567
8583
|
catch (error) {
|
|
8568
8584
|
return this.windowApi.setTimeout(callback, timeout);
|
|
@@ -8577,8 +8593,10 @@ var Utils = (function () {
|
|
|
8577
8593
|
if (timeId != null) {
|
|
8578
8594
|
clearTimeout$1(timeId);
|
|
8579
8595
|
}
|
|
8596
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8580
8597
|
}
|
|
8581
8598
|
catch (error) {
|
|
8599
|
+
// console.log(error);
|
|
8582
8600
|
}
|
|
8583
8601
|
finally {
|
|
8584
8602
|
this.windowApi.clearTimeout(timeId);
|
|
@@ -8592,6 +8610,7 @@ var Utils = (function () {
|
|
|
8592
8610
|
workerSetInterval(callback, timeout = 0) {
|
|
8593
8611
|
try {
|
|
8594
8612
|
return setInterval(callback, timeout);
|
|
8613
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8595
8614
|
}
|
|
8596
8615
|
catch (error) {
|
|
8597
8616
|
return this.windowApi.setInterval(callback, timeout);
|
|
@@ -8606,8 +8625,10 @@ var Utils = (function () {
|
|
|
8606
8625
|
if (timeId != null) {
|
|
8607
8626
|
clearInterval(timeId);
|
|
8608
8627
|
}
|
|
8628
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8609
8629
|
}
|
|
8610
8630
|
catch (error) {
|
|
8631
|
+
// console.log(error);
|
|
8611
8632
|
}
|
|
8612
8633
|
finally {
|
|
8613
8634
|
this.windowApi.clearInterval(timeId);
|
|
@@ -8641,10 +8662,10 @@ var Utils = (function () {
|
|
|
8641
8662
|
.query({
|
|
8642
8663
|
name: "clipboard-read",
|
|
8643
8664
|
})
|
|
8644
|
-
.then((
|
|
8665
|
+
.then(() => {
|
|
8645
8666
|
readClipboardText();
|
|
8646
8667
|
})
|
|
8647
|
-
.catch((
|
|
8668
|
+
.catch(() => {
|
|
8648
8669
|
/* 该权限申请Api可能在该环境下不生效,尝试直接读取剪贴板 */
|
|
8649
8670
|
readClipboardText();
|
|
8650
8671
|
});
|
|
@@ -8681,7 +8702,7 @@ var Utils = (function () {
|
|
|
8681
8702
|
});
|
|
8682
8703
|
}
|
|
8683
8704
|
}
|
|
8684
|
-
|
|
8705
|
+
const utils = new Utils();
|
|
8685
8706
|
|
|
8686
8707
|
return utils;
|
|
8687
8708
|
|