@dan-uni/dan-any 0.2.6 → 0.4.8
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 +10 -3
- package/dist/index.js +1233 -420
- package/dist/index.umd.min.js +4367 -3619
- package/dist/src/ass-gen/ass/create.d.ts +2 -1
- package/dist/src/ass-gen/ass/raw.d.ts +6 -2
- package/dist/src/ass-gen/index.d.ts +2 -0
- package/dist/src/index.d.ts +72 -13
- package/dist/src/proto/gen/bili/dm_pb.d.ts +1 -1
- package/dist/src/proto/gen/danuni_pb.d.ts +35 -8
- package/dist/src/utils/dm-gen.d.ts +26 -40
- package/dist/src/utils/id-gen.d.ts +9 -32
- package/dist/src/utils/platform.d.ts +24 -0
- package/package.json +10 -9
- package/src/ass-gen/__tests__/898651903.xml.ass +1 -1
- package/src/ass-gen/ass/create.ts +12 -2
- package/src/ass-gen/ass/raw.ts +14 -5
- package/src/ass-gen/index.ts +12 -4
- package/src/ass-gen/util/danconvert.ts +2 -2
- package/src/index.test.ts +4 -3
- package/src/index.ts +202 -41
- package/src/proto/gen/bili/dm_pb.ts +3 -3
- package/src/proto/gen/danuni_pb.ts +46 -14
- package/src/proto/src/danuni.proto +11 -3
- package/src/utils/dm-gen.test.ts +12 -3
- package/src/utils/dm-gen.ts +106 -59
- package/src/utils/id-gen.ts +19 -62
- package/src/utils/platform.ts +38 -0
- package/tsconfig.json +12 -16
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { XMLBuilder, XMLParser } from "fast-xml-parser";
|
|
2
|
+
import hh_mm_ss from "hh-mm-ss";
|
|
3
|
+
import jssha from "jssha";
|
|
4
|
+
import { createCanvas } from "canvas";
|
|
5
|
+
import { brotliCompressSync, brotliDecompressSync, gunzipSync, gzipSync } from "node:zlib";
|
|
6
|
+
import { decode, encode as external_base16384_encode } from "base16384";
|
|
7
7
|
var __webpack_require__ = {};
|
|
8
8
|
(()=>{
|
|
9
|
-
__webpack_require__.d =
|
|
9
|
+
__webpack_require__.d = (exports, definition)=>{
|
|
10
10
|
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
|
|
11
11
|
enumerable: true,
|
|
12
12
|
get: definition[key]
|
|
@@ -14,12 +14,10 @@ var __webpack_require__ = {};
|
|
|
14
14
|
};
|
|
15
15
|
})();
|
|
16
16
|
(()=>{
|
|
17
|
-
__webpack_require__.o =
|
|
18
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
19
|
-
};
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
20
18
|
})();
|
|
21
19
|
(()=>{
|
|
22
|
-
__webpack_require__.r =
|
|
20
|
+
__webpack_require__.r = (exports)=>{
|
|
23
21
|
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
|
|
24
22
|
value: 'Module'
|
|
25
23
|
});
|
|
@@ -28,13 +26,23 @@ var __webpack_require__ = {};
|
|
|
28
26
|
});
|
|
29
27
|
};
|
|
30
28
|
})();
|
|
29
|
+
var platform_namespaceObject = {};
|
|
30
|
+
__webpack_require__.r(platform_namespaceObject);
|
|
31
|
+
__webpack_require__.d(platform_namespaceObject, {
|
|
32
|
+
PlatformDanmakuOnlySource: ()=>platform_PlatformDanmakuOnlySource,
|
|
33
|
+
PlatformDanmakuOnlySources: ()=>PlatformDanmakuOnlySources,
|
|
34
|
+
PlatformDanmakuSources: ()=>PlatformDanmakuSources,
|
|
35
|
+
PlatformInfoSource: ()=>platform_PlatformInfoSource,
|
|
36
|
+
PlatformInfoSources: ()=>PlatformInfoSources,
|
|
37
|
+
PlatformSources: ()=>PlatformSources,
|
|
38
|
+
PlatformVideoSource: ()=>platform_PlatformVideoSource,
|
|
39
|
+
PlatformVideoSources: ()=>PlatformVideoSources
|
|
40
|
+
});
|
|
31
41
|
var id_gen_namespaceObject = {};
|
|
32
42
|
__webpack_require__.r(id_gen_namespaceObject);
|
|
33
43
|
__webpack_require__.d(id_gen_namespaceObject, {
|
|
34
|
-
UniID: ()=>
|
|
35
|
-
createDMID: ()=>createDMID
|
|
36
|
-
domainPreset: ()=>domainPreset,
|
|
37
|
-
platforms: ()=>platforms
|
|
44
|
+
UniID: ()=>id_gen_UniID,
|
|
45
|
+
createDMID: ()=>createDMID
|
|
38
46
|
});
|
|
39
47
|
var dm_gen_namespaceObject = {};
|
|
40
48
|
__webpack_require__.r(dm_gen_namespaceObject);
|
|
@@ -244,7 +252,10 @@ function makeInt64Support() {
|
|
|
244
252
|
const dv = new DataView(new ArrayBuffer(8));
|
|
245
253
|
const ok = "function" == typeof BigInt && "function" == typeof dv.getBigInt64 && "function" == typeof dv.getBigUint64 && "function" == typeof dv.setBigInt64 && "function" == typeof dv.setBigUint64 && ("object" != typeof process || "object" != typeof process.env || "1" !== process.env.BUF_BIGINT_DISABLE);
|
|
246
254
|
if (ok) {
|
|
247
|
-
const MIN = BigInt("-9223372036854775808")
|
|
255
|
+
const MIN = BigInt("-9223372036854775808");
|
|
256
|
+
const MAX = BigInt("9223372036854775807");
|
|
257
|
+
const UMIN = BigInt("0");
|
|
258
|
+
const UMAX = BigInt("18446744073709551615");
|
|
248
259
|
return {
|
|
249
260
|
zero: BigInt(0),
|
|
250
261
|
supported: true,
|
|
@@ -327,8 +338,6 @@ function scalarZeroValue(type, longAsString) {
|
|
|
327
338
|
return "";
|
|
328
339
|
case descriptors_ScalarType.BOOL:
|
|
329
340
|
return false;
|
|
330
|
-
default:
|
|
331
|
-
return 0;
|
|
332
341
|
case descriptors_ScalarType.DOUBLE:
|
|
333
342
|
case descriptors_ScalarType.FLOAT:
|
|
334
343
|
return 0.0;
|
|
@@ -340,6 +349,8 @@ function scalarZeroValue(type, longAsString) {
|
|
|
340
349
|
return longAsString ? "0" : protoInt64.zero;
|
|
341
350
|
case descriptors_ScalarType.BYTES:
|
|
342
351
|
return new Uint8Array(0);
|
|
352
|
+
default:
|
|
353
|
+
return 0;
|
|
343
354
|
}
|
|
344
355
|
}
|
|
345
356
|
function isScalarZeroValue(type, value) {
|
|
@@ -438,8 +449,9 @@ function isReflectList(arg, field) {
|
|
|
438
449
|
var _a, _b, _c, _d;
|
|
439
450
|
if (isObject(arg) && unsafeLocal in arg && "add" in arg && "field" in arg && "function" == typeof arg.field) {
|
|
440
451
|
if (void 0 !== field) {
|
|
441
|
-
const a = field
|
|
442
|
-
|
|
452
|
+
const a = field;
|
|
453
|
+
const b = arg.field();
|
|
454
|
+
return a.listKind == b.listKind && a.scalar === b.scalar && (null == (_a = a.message) ? void 0 : _a.typeName) === (null == (_b = b.message) ? void 0 : _b.typeName) && (null == (_c = a.enum) ? void 0 : _c.typeName) === (null == (_d = b.enum) ? void 0 : _d.typeName);
|
|
443
455
|
}
|
|
444
456
|
return true;
|
|
445
457
|
}
|
|
@@ -450,7 +462,7 @@ function isReflectMap(arg, field) {
|
|
|
450
462
|
if (isObject(arg) && unsafeLocal in arg && "has" in arg && "field" in arg && "function" == typeof arg.field) {
|
|
451
463
|
if (void 0 !== field) {
|
|
452
464
|
const a = field, b = arg.field();
|
|
453
|
-
return a.mapKey === b.mapKey && a.mapKind == b.mapKind && a.scalar === b.scalar && (null
|
|
465
|
+
return a.mapKey === b.mapKey && a.mapKind == b.mapKind && a.scalar === b.scalar && (null == (_a = a.message) ? void 0 : _a.typeName) === (null == (_b = b.message) ? void 0 : _b.typeName) && (null == (_c = a.enum) ? void 0 : _c.typeName) === (null == (_d = b.enum) ? void 0 : _d.typeName);
|
|
454
466
|
}
|
|
455
467
|
return true;
|
|
456
468
|
}
|
|
@@ -475,7 +487,7 @@ function getTextEncoding() {
|
|
|
475
487
|
try {
|
|
476
488
|
encodeURIComponent(text);
|
|
477
489
|
return true;
|
|
478
|
-
} catch (
|
|
490
|
+
} catch (_) {
|
|
479
491
|
return false;
|
|
480
492
|
}
|
|
481
493
|
}
|
|
@@ -493,7 +505,7 @@ var binary_encoding_WireType;
|
|
|
493
505
|
WireType[WireType["Bit32"] = 5] = "Bit32";
|
|
494
506
|
})(binary_encoding_WireType || (binary_encoding_WireType = {}));
|
|
495
507
|
const FLOAT32_MAX = 3.4028234663852886e38;
|
|
496
|
-
const FLOAT32_MIN = -
|
|
508
|
+
const FLOAT32_MIN = -3.4028234663852886e+38;
|
|
497
509
|
const UINT32_MAX = 0xffffffff;
|
|
498
510
|
const INT32_MAX = 0x7fffffff;
|
|
499
511
|
const INT32_MIN = -2147483648;
|
|
@@ -623,12 +635,12 @@ class BinaryWriter {
|
|
|
623
635
|
return this;
|
|
624
636
|
}
|
|
625
637
|
sint64(value) {
|
|
626
|
-
|
|
638
|
+
const tc = protoInt64.enc(value), sign = tc.hi >> 31, lo = tc.lo << 1 ^ sign, hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;
|
|
627
639
|
varint64write(lo, hi, this.buf);
|
|
628
640
|
return this;
|
|
629
641
|
}
|
|
630
642
|
uint64(value) {
|
|
631
|
-
|
|
643
|
+
const tc = protoInt64.uEnc(value);
|
|
632
644
|
varint64write(tc.lo, tc.hi, this.buf);
|
|
633
645
|
return this;
|
|
634
646
|
}
|
|
@@ -751,7 +763,7 @@ function assertFloat32(arg) {
|
|
|
751
763
|
if ("string" == typeof arg) {
|
|
752
764
|
const o = arg;
|
|
753
765
|
arg = Number(arg);
|
|
754
|
-
if (isNaN(arg) && "NaN" !== o) throw new Error("invalid float32: " + o);
|
|
766
|
+
if (Number.isNaN(arg) && "NaN" !== o) throw new Error("invalid float32: " + o);
|
|
755
767
|
} else if ("number" != typeof arg) throw new Error("invalid float32: " + typeof arg);
|
|
756
768
|
if (Number.isFinite(arg) && (arg > FLOAT32_MAX || arg < FLOAT32_MIN)) throw new Error("invalid float32: " + arg);
|
|
757
769
|
}
|
|
@@ -821,22 +833,22 @@ function checkScalarValue(value, scalar) {
|
|
|
821
833
|
case descriptors_ScalarType.INT64:
|
|
822
834
|
case descriptors_ScalarType.SFIXED64:
|
|
823
835
|
case descriptors_ScalarType.SINT64:
|
|
824
|
-
if ("
|
|
825
|
-
try {
|
|
836
|
+
if ("bigint" == typeof value || "number" == typeof value || "string" == typeof value && value.length > 0) try {
|
|
826
837
|
protoInt64.parse(value);
|
|
827
|
-
|
|
838
|
+
return true;
|
|
839
|
+
} catch (_) {
|
|
828
840
|
return `${value} out of range`;
|
|
829
841
|
}
|
|
830
|
-
return
|
|
842
|
+
return false;
|
|
831
843
|
case descriptors_ScalarType.FIXED64:
|
|
832
844
|
case descriptors_ScalarType.UINT64:
|
|
833
|
-
if ("
|
|
834
|
-
try {
|
|
845
|
+
if ("bigint" == typeof value || "number" == typeof value || "string" == typeof value && value.length > 0) try {
|
|
835
846
|
protoInt64.uParse(value);
|
|
836
|
-
|
|
847
|
+
return true;
|
|
848
|
+
} catch (_) {
|
|
837
849
|
return `${value} out of range`;
|
|
838
850
|
}
|
|
839
|
-
return
|
|
851
|
+
return false;
|
|
840
852
|
}
|
|
841
853
|
}
|
|
842
854
|
function reasonSingular(field, val, details) {
|
|
@@ -1084,7 +1096,7 @@ function reflect_reflect(messageDesc, message, check = true) {
|
|
|
1084
1096
|
class ReflectMessageImpl {
|
|
1085
1097
|
get sortedFields() {
|
|
1086
1098
|
var _a;
|
|
1087
|
-
return null
|
|
1099
|
+
return null != (_a = this._sortedFields) ? _a : this._sortedFields = this.desc.fields.concat().sort((a, b)=>a.number - b.number);
|
|
1088
1100
|
}
|
|
1089
1101
|
constructor(messageDesc, message, check = true){
|
|
1090
1102
|
this.lists = new Map();
|
|
@@ -1453,8 +1465,9 @@ function fromBinary(schema, bytes, options) {
|
|
|
1453
1465
|
function readMessage(message, reader, options, delimited, lengthOrDelimitedFieldNo) {
|
|
1454
1466
|
var _a;
|
|
1455
1467
|
const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;
|
|
1456
|
-
let fieldNo
|
|
1457
|
-
|
|
1468
|
+
let fieldNo;
|
|
1469
|
+
let wireType;
|
|
1470
|
+
const unknownFields = null != (_a = message.getUnknown()) ? _a : [];
|
|
1458
1471
|
while(reader.pos < end){
|
|
1459
1472
|
[fieldNo, wireType] = reader.tag();
|
|
1460
1473
|
if (delimited && wireType == binary_encoding_WireType.EndGroup) break;
|
|
@@ -1496,7 +1509,8 @@ function readField(message, reader, field, wireType, options) {
|
|
|
1496
1509
|
}
|
|
1497
1510
|
function readMapEntry(reader, map, options) {
|
|
1498
1511
|
const field = map.field();
|
|
1499
|
-
let key
|
|
1512
|
+
let key;
|
|
1513
|
+
let val;
|
|
1500
1514
|
const end = reader.pos + reader.uint32();
|
|
1501
1515
|
while(reader.pos < end){
|
|
1502
1516
|
const [fieldNo] = reader.tag();
|
|
@@ -1536,16 +1550,10 @@ function readMapEntry(reader, map, options) {
|
|
|
1536
1550
|
function readListField(reader, wireType, list, options) {
|
|
1537
1551
|
var _a;
|
|
1538
1552
|
const field = list.field();
|
|
1539
|
-
if ("message" === field.listKind)
|
|
1540
|
-
|
|
1541
|
-
return;
|
|
1542
|
-
}
|
|
1543
|
-
const scalarType = null !== (_a = field.scalar) && void 0 !== _a ? _a : descriptors_ScalarType.INT32;
|
|
1553
|
+
if ("message" === field.listKind) return void list.add(readMessageField(reader, options, field));
|
|
1554
|
+
const scalarType = null != (_a = field.scalar) ? _a : descriptors_ScalarType.INT32;
|
|
1544
1555
|
const packed = wireType == binary_encoding_WireType.LengthDelimited && scalarType != descriptors_ScalarType.STRING && scalarType != descriptors_ScalarType.BYTES;
|
|
1545
|
-
if (!packed)
|
|
1546
|
-
list.add(readScalar(reader, scalarType));
|
|
1547
|
-
return;
|
|
1548
|
-
}
|
|
1556
|
+
if (!packed) return void list.add(readScalar(reader, scalarType));
|
|
1549
1557
|
const e = reader.uint32() + reader.pos;
|
|
1550
1558
|
while(reader.pos < e)list.add(readScalar(reader, scalarType));
|
|
1551
1559
|
}
|
|
@@ -1603,12 +1611,12 @@ function writeFields(writer, opts, msg) {
|
|
|
1603
1611
|
var _a;
|
|
1604
1612
|
for (const f of msg.sortedFields){
|
|
1605
1613
|
if (!msg.isSet(f)) {
|
|
1606
|
-
if (f.presence == LEGACY_REQUIRED) throw new Error(`cannot encode
|
|
1614
|
+
if (f.presence == LEGACY_REQUIRED) throw new Error(`cannot encode ${f} to binary: required field not set`);
|
|
1607
1615
|
continue;
|
|
1608
1616
|
}
|
|
1609
1617
|
writeField(writer, opts, msg, f);
|
|
1610
1618
|
}
|
|
1611
|
-
if (opts.writeUnknownFields) for (const { no, wireType, data } of null
|
|
1619
|
+
if (opts.writeUnknownFields) for (const { no, wireType, data } of null != (_a = msg.getUnknown()) ? _a : [])writer.tag(no, wireType).raw(data);
|
|
1612
1620
|
return writer;
|
|
1613
1621
|
}
|
|
1614
1622
|
function writeField(writer, opts, msg, field) {
|
|
@@ -1616,7 +1624,7 @@ function writeField(writer, opts, msg, field) {
|
|
|
1616
1624
|
switch(field.fieldKind){
|
|
1617
1625
|
case "scalar":
|
|
1618
1626
|
case "enum":
|
|
1619
|
-
writeScalar(writer, null
|
|
1627
|
+
writeScalar(writer, msg.desc.typeName, field.name, null != (_a = field.scalar) ? _a : descriptors_ScalarType.INT32, field.number, msg.get(field));
|
|
1620
1628
|
break;
|
|
1621
1629
|
case "list":
|
|
1622
1630
|
writeListField(writer, opts, field, msg.get(field));
|
|
@@ -1629,8 +1637,8 @@ function writeField(writer, opts, msg, field) {
|
|
|
1629
1637
|
break;
|
|
1630
1638
|
}
|
|
1631
1639
|
}
|
|
1632
|
-
function writeScalar(writer, scalarType, fieldNo, value) {
|
|
1633
|
-
writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), scalarType, value);
|
|
1640
|
+
function writeScalar(writer, msgName, fieldName, scalarType, fieldNo, value) {
|
|
1641
|
+
writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), msgName, fieldName, scalarType, value);
|
|
1634
1642
|
}
|
|
1635
1643
|
function writeMessageField(writer, opts, field, message) {
|
|
1636
1644
|
if (field.delimitedEncoding) writeFields(writer.tag(field.number, binary_encoding_WireType.StartGroup), opts, message).tag(field.number, binary_encoding_WireType.EndGroup);
|
|
@@ -1642,24 +1650,24 @@ function writeListField(writer, opts, field, list) {
|
|
|
1642
1650
|
for (const item of list)writeMessageField(writer, opts, field, item);
|
|
1643
1651
|
return;
|
|
1644
1652
|
}
|
|
1645
|
-
const scalarType = null
|
|
1653
|
+
const scalarType = null != (_a = field.scalar) ? _a : descriptors_ScalarType.INT32;
|
|
1646
1654
|
if (field.packed) {
|
|
1647
1655
|
if (!list.size) return;
|
|
1648
1656
|
writer.tag(field.number, binary_encoding_WireType.LengthDelimited).fork();
|
|
1649
|
-
for (const item of list)writeScalarValue(writer, scalarType, item);
|
|
1657
|
+
for (const item of list)writeScalarValue(writer, field.parent.typeName, field.name, scalarType, item);
|
|
1650
1658
|
writer.join();
|
|
1651
1659
|
return;
|
|
1652
1660
|
}
|
|
1653
|
-
for (const item of list)writeScalar(writer, scalarType, field.number, item);
|
|
1661
|
+
for (const item of list)writeScalar(writer, field.parent.typeName, field.name, scalarType, field.number, item);
|
|
1654
1662
|
}
|
|
1655
1663
|
function writeMapEntry(writer, opts, field, key, value) {
|
|
1656
1664
|
var _a;
|
|
1657
1665
|
writer.tag(field.number, binary_encoding_WireType.LengthDelimited).fork();
|
|
1658
|
-
writeScalar(writer, field.mapKey, 1, key);
|
|
1666
|
+
writeScalar(writer, field.parent.typeName, field.name, field.mapKey, 1, key);
|
|
1659
1667
|
switch(field.mapKind){
|
|
1660
1668
|
case "scalar":
|
|
1661
1669
|
case "enum":
|
|
1662
|
-
writeScalar(writer, null
|
|
1670
|
+
writeScalar(writer, field.parent.typeName, field.name, null != (_a = field.scalar) ? _a : descriptors_ScalarType.INT32, 2, value);
|
|
1663
1671
|
break;
|
|
1664
1672
|
case "message":
|
|
1665
1673
|
writeFields(writer.tag(2, binary_encoding_WireType.LengthDelimited).fork(), opts, value).join();
|
|
@@ -1667,53 +1675,58 @@ function writeMapEntry(writer, opts, field, key, value) {
|
|
|
1667
1675
|
}
|
|
1668
1676
|
writer.join();
|
|
1669
1677
|
}
|
|
1670
|
-
function writeScalarValue(writer, type, value) {
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1678
|
+
function writeScalarValue(writer, msgName, fieldName, type, value) {
|
|
1679
|
+
try {
|
|
1680
|
+
switch(type){
|
|
1681
|
+
case descriptors_ScalarType.STRING:
|
|
1682
|
+
writer.string(value);
|
|
1683
|
+
break;
|
|
1684
|
+
case descriptors_ScalarType.BOOL:
|
|
1685
|
+
writer.bool(value);
|
|
1686
|
+
break;
|
|
1687
|
+
case descriptors_ScalarType.DOUBLE:
|
|
1688
|
+
writer.double(value);
|
|
1689
|
+
break;
|
|
1690
|
+
case descriptors_ScalarType.FLOAT:
|
|
1691
|
+
writer.float(value);
|
|
1692
|
+
break;
|
|
1693
|
+
case descriptors_ScalarType.INT32:
|
|
1694
|
+
writer.int32(value);
|
|
1695
|
+
break;
|
|
1696
|
+
case descriptors_ScalarType.INT64:
|
|
1697
|
+
writer.int64(value);
|
|
1698
|
+
break;
|
|
1699
|
+
case descriptors_ScalarType.UINT64:
|
|
1700
|
+
writer.uint64(value);
|
|
1701
|
+
break;
|
|
1702
|
+
case descriptors_ScalarType.FIXED64:
|
|
1703
|
+
writer.fixed64(value);
|
|
1704
|
+
break;
|
|
1705
|
+
case descriptors_ScalarType.BYTES:
|
|
1706
|
+
writer.bytes(value);
|
|
1707
|
+
break;
|
|
1708
|
+
case descriptors_ScalarType.FIXED32:
|
|
1709
|
+
writer.fixed32(value);
|
|
1710
|
+
break;
|
|
1711
|
+
case descriptors_ScalarType.SFIXED32:
|
|
1712
|
+
writer.sfixed32(value);
|
|
1713
|
+
break;
|
|
1714
|
+
case descriptors_ScalarType.SFIXED64:
|
|
1715
|
+
writer.sfixed64(value);
|
|
1716
|
+
break;
|
|
1717
|
+
case descriptors_ScalarType.SINT64:
|
|
1718
|
+
writer.sint64(value);
|
|
1719
|
+
break;
|
|
1720
|
+
case descriptors_ScalarType.UINT32:
|
|
1721
|
+
writer.uint32(value);
|
|
1722
|
+
break;
|
|
1723
|
+
case descriptors_ScalarType.SINT32:
|
|
1724
|
+
writer.sint32(value);
|
|
1725
|
+
break;
|
|
1726
|
+
}
|
|
1727
|
+
} catch (e) {
|
|
1728
|
+
if (e instanceof Error) throw new Error(`cannot encode field ${msgName}.${fieldName} to binary: ${e.message}`);
|
|
1729
|
+
throw e;
|
|
1717
1730
|
}
|
|
1718
1731
|
}
|
|
1719
1732
|
function writeTypeOfScalar(type) {
|
|
@@ -1868,11 +1881,11 @@ function parseTextFormatScalarValue(type, value) {
|
|
|
1868
1881
|
case descriptors_ScalarType.FLOAT:
|
|
1869
1882
|
switch(value){
|
|
1870
1883
|
case "inf":
|
|
1871
|
-
return
|
|
1884
|
+
return 1 / 0;
|
|
1872
1885
|
case "-inf":
|
|
1873
|
-
return
|
|
1886
|
+
return -1 / 0;
|
|
1874
1887
|
case "nan":
|
|
1875
|
-
return
|
|
1888
|
+
return NaN;
|
|
1876
1889
|
default:
|
|
1877
1890
|
return parseFloat(value);
|
|
1878
1891
|
}
|
|
@@ -1943,7 +1956,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
1943
1956
|
const t = input.take(2);
|
|
1944
1957
|
if (false === t) return false;
|
|
1945
1958
|
const n = parseInt(s + t, 8);
|
|
1946
|
-
if (isNaN(n)) return false;
|
|
1959
|
+
if (Number.isNaN(n)) return false;
|
|
1947
1960
|
b.push(n);
|
|
1948
1961
|
break;
|
|
1949
1962
|
}
|
|
@@ -1953,7 +1966,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
1953
1966
|
const t = input.take(2);
|
|
1954
1967
|
if (false === t) return false;
|
|
1955
1968
|
const n = parseInt(s + t, 16);
|
|
1956
|
-
if (isNaN(n)) return false;
|
|
1969
|
+
if (Number.isNaN(n)) return false;
|
|
1957
1970
|
b.push(n);
|
|
1958
1971
|
break;
|
|
1959
1972
|
}
|
|
@@ -1963,7 +1976,7 @@ function unescapeBytesDefaultValue(str) {
|
|
|
1963
1976
|
const t = input.take(4);
|
|
1964
1977
|
if (false === t) return false;
|
|
1965
1978
|
const n = parseInt(s + t, 16);
|
|
1966
|
-
if (isNaN(n)) return false;
|
|
1979
|
+
if (Number.isNaN(n)) return false;
|
|
1967
1980
|
const chunk = new Uint8Array(4);
|
|
1968
1981
|
const view = new DataView(chunk.buffer);
|
|
1969
1982
|
view.setInt32(0, n, true);
|
|
@@ -2091,7 +2104,7 @@ function createBaseRegistry() {
|
|
|
2091
2104
|
},
|
|
2092
2105
|
getExtensionFor (extendee, no) {
|
|
2093
2106
|
var _a;
|
|
2094
|
-
return null
|
|
2107
|
+
return null == (_a = extendees.get(extendee.typeName)) ? void 0 : _a.get(no);
|
|
2095
2108
|
},
|
|
2096
2109
|
getService (typeName) {
|
|
2097
2110
|
const t = types.get(typeName);
|
|
@@ -2123,7 +2136,8 @@ const featureDefaults = {
|
|
|
2123
2136
|
repeatedFieldEncoding: 2,
|
|
2124
2137
|
utf8Validation: 3,
|
|
2125
2138
|
messageEncoding: 1,
|
|
2126
|
-
jsonFormat: 2
|
|
2139
|
+
jsonFormat: 2,
|
|
2140
|
+
enforceNamingStyle: 2
|
|
2127
2141
|
},
|
|
2128
2142
|
999: {
|
|
2129
2143
|
fieldPresence: 2,
|
|
@@ -2131,7 +2145,8 @@ const featureDefaults = {
|
|
|
2131
2145
|
repeatedFieldEncoding: 1,
|
|
2132
2146
|
utf8Validation: 2,
|
|
2133
2147
|
messageEncoding: 1,
|
|
2134
|
-
jsonFormat: 1
|
|
2148
|
+
jsonFormat: 1,
|
|
2149
|
+
enforceNamingStyle: 2
|
|
2135
2150
|
},
|
|
2136
2151
|
1000: {
|
|
2137
2152
|
fieldPresence: 1,
|
|
@@ -2139,7 +2154,8 @@ const featureDefaults = {
|
|
|
2139
2154
|
repeatedFieldEncoding: 1,
|
|
2140
2155
|
utf8Validation: 2,
|
|
2141
2156
|
messageEncoding: 1,
|
|
2142
|
-
jsonFormat: 1
|
|
2157
|
+
jsonFormat: 1,
|
|
2158
|
+
enforceNamingStyle: 2
|
|
2143
2159
|
}
|
|
2144
2160
|
};
|
|
2145
2161
|
function addFile(proto, reg) {
|
|
@@ -2147,7 +2163,7 @@ function addFile(proto, reg) {
|
|
|
2147
2163
|
const file = {
|
|
2148
2164
|
kind: "file",
|
|
2149
2165
|
proto,
|
|
2150
|
-
deprecated: null
|
|
2166
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2151
2167
|
edition: getFileEdition(proto),
|
|
2152
2168
|
name: proto.name.replace(/\.proto$/, ""),
|
|
2153
2169
|
dependencies: findFileDependencies(proto, reg),
|
|
@@ -2166,7 +2182,7 @@ function addFile(proto, reg) {
|
|
|
2166
2182
|
},
|
|
2167
2183
|
add (desc) {
|
|
2168
2184
|
var _a;
|
|
2169
|
-
assert((null
|
|
2185
|
+
assert((null == (_a = desc.proto.options) ? void 0 : _a.mapEntry) === true);
|
|
2170
2186
|
mapEntriesStore.set(desc.typeName, desc);
|
|
2171
2187
|
}
|
|
2172
2188
|
};
|
|
@@ -2221,12 +2237,12 @@ function addFields(message, reg, mapEntries) {
|
|
|
2221
2237
|
for (const child of message.nestedMessages)addFields(child, reg, mapEntries);
|
|
2222
2238
|
}
|
|
2223
2239
|
function addEnum(proto, file, parent, reg) {
|
|
2224
|
-
var _a, _b, _c;
|
|
2240
|
+
var _a, _b, _c, _d, _e;
|
|
2225
2241
|
const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);
|
|
2226
2242
|
const desc = {
|
|
2227
2243
|
kind: "enum",
|
|
2228
2244
|
proto,
|
|
2229
|
-
deprecated: null
|
|
2245
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2230
2246
|
file,
|
|
2231
2247
|
parent,
|
|
2232
2248
|
open: true,
|
|
@@ -2241,30 +2257,29 @@ function addEnum(proto, file, parent, reg) {
|
|
|
2241
2257
|
};
|
|
2242
2258
|
desc.open = isEnumOpen(desc);
|
|
2243
2259
|
reg.add(desc);
|
|
2244
|
-
proto.value
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
desc.values.push(desc.value[proto.number] = {
|
|
2260
|
+
for (const p of proto.value){
|
|
2261
|
+
const name = p.name;
|
|
2262
|
+
desc.values.push(desc.value[p.number] = {
|
|
2248
2263
|
kind: "enum_value",
|
|
2249
|
-
proto,
|
|
2250
|
-
deprecated: null
|
|
2264
|
+
proto: p,
|
|
2265
|
+
deprecated: null != (_d = null == (_c = p.options) ? void 0 : _c.deprecated) ? _d : false,
|
|
2251
2266
|
parent: desc,
|
|
2252
2267
|
name,
|
|
2253
2268
|
localName: safeObjectProperty(void 0 == sharedPrefix ? name : name.substring(sharedPrefix.length)),
|
|
2254
|
-
number:
|
|
2269
|
+
number: p.number,
|
|
2255
2270
|
toString () {
|
|
2256
2271
|
return `enum value ${desc.typeName}.${name}`;
|
|
2257
2272
|
}
|
|
2258
2273
|
});
|
|
2259
|
-
}
|
|
2260
|
-
(null
|
|
2274
|
+
}
|
|
2275
|
+
(null != (_e = null == parent ? void 0 : parent.nestedEnums) ? _e : file.enums).push(desc);
|
|
2261
2276
|
}
|
|
2262
2277
|
function addMessage(proto, file, parent, reg, mapEntries) {
|
|
2263
2278
|
var _a, _b, _c, _d;
|
|
2264
2279
|
const desc = {
|
|
2265
2280
|
kind: "message",
|
|
2266
2281
|
proto,
|
|
2267
|
-
deprecated: null
|
|
2282
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2268
2283
|
file,
|
|
2269
2284
|
parent,
|
|
2270
2285
|
name: proto.name,
|
|
@@ -2280,9 +2295,9 @@ function addMessage(proto, file, parent, reg, mapEntries) {
|
|
|
2280
2295
|
return `message ${this.typeName}`;
|
|
2281
2296
|
}
|
|
2282
2297
|
};
|
|
2283
|
-
if ((null
|
|
2298
|
+
if ((null == (_c = proto.options) ? void 0 : _c.mapEntry) === true) mapEntries.add(desc);
|
|
2284
2299
|
else {
|
|
2285
|
-
(null
|
|
2300
|
+
(null != (_d = null == parent ? void 0 : parent.nestedMessages) ? _d : file.messages).push(desc);
|
|
2286
2301
|
reg.add(desc);
|
|
2287
2302
|
}
|
|
2288
2303
|
for (const enumProto of proto.enumType)addEnum(enumProto, file, desc, reg);
|
|
@@ -2293,7 +2308,7 @@ function addService(proto, file, reg) {
|
|
|
2293
2308
|
const desc = {
|
|
2294
2309
|
kind: "service",
|
|
2295
2310
|
proto,
|
|
2296
|
-
deprecated: null
|
|
2311
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2297
2312
|
file,
|
|
2298
2313
|
name: proto.name,
|
|
2299
2314
|
typeName: makeTypeName(proto, void 0, file),
|
|
@@ -2323,14 +2338,14 @@ function newMethod(proto, parent, reg) {
|
|
|
2323
2338
|
return {
|
|
2324
2339
|
kind: "rpc",
|
|
2325
2340
|
proto,
|
|
2326
|
-
deprecated: null
|
|
2341
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2327
2342
|
parent,
|
|
2328
2343
|
name,
|
|
2329
2344
|
localName: safeObjectProperty(name.length ? safeObjectProperty(name[0].toLowerCase() + name.substring(1)) : name),
|
|
2330
2345
|
methodKind,
|
|
2331
2346
|
input,
|
|
2332
2347
|
output,
|
|
2333
|
-
idempotency: null
|
|
2348
|
+
idempotency: null != (_d = null == (_c = proto.options) ? void 0 : _c.idempotencyLevel) ? _d : IDEMPOTENCY_UNKNOWN,
|
|
2334
2349
|
toString () {
|
|
2335
2350
|
return `rpc ${parent.typeName}.${name}`;
|
|
2336
2351
|
}
|
|
@@ -2356,7 +2371,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
2356
2371
|
const field = {
|
|
2357
2372
|
kind: "field",
|
|
2358
2373
|
proto,
|
|
2359
|
-
deprecated: null
|
|
2374
|
+
deprecated: null != (_b = null == (_a = proto.options) ? void 0 : _a.deprecated) ? _b : false,
|
|
2360
2375
|
name: proto.name,
|
|
2361
2376
|
number: proto.number,
|
|
2362
2377
|
scalar: void 0,
|
|
@@ -2396,7 +2411,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
2396
2411
|
}
|
|
2397
2412
|
const label = proto.label;
|
|
2398
2413
|
const type = proto.type;
|
|
2399
|
-
const jstype = null
|
|
2414
|
+
const jstype = null == (_c = proto.options) ? void 0 : _c.jstype;
|
|
2400
2415
|
if (label === LABEL_REPEATED) {
|
|
2401
2416
|
const mapEntry = type == TYPE_MESSAGE ? null == mapEntries ? void 0 : mapEntries.get(trimLeadingDot(proto.typeName)) : void 0;
|
|
2402
2417
|
if (mapEntry) {
|
|
@@ -2513,12 +2528,13 @@ function getFieldPresence(proto, oneof, isExtension, parent) {
|
|
|
2513
2528
|
if (proto.label == LABEL_REQUIRED) return registry_LEGACY_REQUIRED;
|
|
2514
2529
|
if (proto.label == LABEL_REPEATED) return registry_IMPLICIT;
|
|
2515
2530
|
if (!!oneof || proto.proto3Optional) return EXPLICIT;
|
|
2516
|
-
if (proto.type == TYPE_MESSAGE) return EXPLICIT;
|
|
2517
2531
|
if (isExtension) return EXPLICIT;
|
|
2518
|
-
|
|
2532
|
+
const resolved = resolveFeature("fieldPresence", {
|
|
2519
2533
|
proto,
|
|
2520
2534
|
parent
|
|
2521
2535
|
});
|
|
2536
|
+
if (resolved == registry_IMPLICIT && (proto.type == TYPE_MESSAGE || proto.type == TYPE_GROUP)) return EXPLICIT;
|
|
2537
|
+
return resolved;
|
|
2522
2538
|
}
|
|
2523
2539
|
function isPackedField(proto, parent) {
|
|
2524
2540
|
if (proto.label != LABEL_REPEATED) return false;
|
|
@@ -2549,7 +2565,7 @@ function isEnumOpen(desc) {
|
|
|
2549
2565
|
var _a;
|
|
2550
2566
|
return OPEN == resolveFeature("enumType", {
|
|
2551
2567
|
proto: desc.proto,
|
|
2552
|
-
parent: null
|
|
2568
|
+
parent: null != (_a = desc.parent) ? _a : desc.file
|
|
2553
2569
|
});
|
|
2554
2570
|
}
|
|
2555
2571
|
function isDelimitedEncoding(proto, parent) {
|
|
@@ -2561,13 +2577,13 @@ function isDelimitedEncoding(proto, parent) {
|
|
|
2561
2577
|
}
|
|
2562
2578
|
function resolveFeature(name, ref) {
|
|
2563
2579
|
var _a, _b;
|
|
2564
|
-
const featureSet = null
|
|
2580
|
+
const featureSet = null == (_a = ref.proto.options) ? void 0 : _a.features;
|
|
2565
2581
|
if (featureSet) {
|
|
2566
2582
|
const val = featureSet[name];
|
|
2567
2583
|
if (0 != val) return val;
|
|
2568
2584
|
}
|
|
2569
2585
|
if ("kind" in ref) {
|
|
2570
|
-
if ("message" == ref.kind) return resolveFeature(name, null
|
|
2586
|
+
if ("message" == ref.kind) return resolveFeature(name, null != (_b = ref.parent) ? _b : ref.file);
|
|
2571
2587
|
const editionDefaults = featureDefaults[ref.edition];
|
|
2572
2588
|
if (!editionDefaults) throw new Error(`feature default for edition ${ref.edition} not found`);
|
|
2573
2589
|
return editionDefaults[name];
|
|
@@ -2605,13 +2621,13 @@ function bootDescriptorProto(init) {
|
|
|
2605
2621
|
return {
|
|
2606
2622
|
$typeName: "google.protobuf.DescriptorProto",
|
|
2607
2623
|
name: init.name,
|
|
2608
|
-
field: null
|
|
2624
|
+
field: null != (_b = null == (_a = init.field) ? void 0 : _a.map(bootFieldDescriptorProto)) ? _b : [],
|
|
2609
2625
|
extension: [],
|
|
2610
|
-
nestedType: null
|
|
2611
|
-
enumType: null
|
|
2612
|
-
extensionRange: null
|
|
2626
|
+
nestedType: null != (_d = null == (_c = init.nestedType) ? void 0 : _c.map(bootDescriptorProto)) ? _d : [],
|
|
2627
|
+
enumType: null != (_f = null == (_e = init.enumType) ? void 0 : _e.map(bootEnumDescriptorProto)) ? _f : [],
|
|
2628
|
+
extensionRange: null != (_h = null == (_g = init.extensionRange) ? void 0 : _g.map((e)=>Object.assign({
|
|
2613
2629
|
$typeName: "google.protobuf.DescriptorProto.ExtensionRange"
|
|
2614
|
-
}, e)))
|
|
2630
|
+
}, e))) ? _h : [],
|
|
2615
2631
|
oneofDecl: [],
|
|
2616
2632
|
reservedRange: [],
|
|
2617
2633
|
reservedName: []
|
|
@@ -2649,10 +2665,10 @@ function bootFieldOptions(init) {
|
|
|
2649
2665
|
return Object.assign(proto, Object.assign(Object.assign({
|
|
2650
2666
|
$typeName: "google.protobuf.FieldOptions"
|
|
2651
2667
|
}, init), {
|
|
2652
|
-
targets: null
|
|
2653
|
-
editionDefaults: null
|
|
2668
|
+
targets: null != (_a = init.targets) ? _a : [],
|
|
2669
|
+
editionDefaults: null != (_c = null == (_b = init.editionDefaults) ? void 0 : _b.map((e)=>Object.assign({
|
|
2654
2670
|
$typeName: "google.protobuf.FieldOptions.EditionDefault"
|
|
2655
|
-
}, e)))
|
|
2671
|
+
}, e))) ? _c : [],
|
|
2656
2672
|
uninterpretedOption: []
|
|
2657
2673
|
}));
|
|
2658
2674
|
}
|
|
@@ -2684,6 +2700,12 @@ const file_google_protobuf_descriptor = /*@__PURE__*/ boot_boot({
|
|
|
2684
2700
|
label: 3,
|
|
2685
2701
|
typeName: ".google.protobuf.FileDescriptorProto"
|
|
2686
2702
|
}
|
|
2703
|
+
],
|
|
2704
|
+
extensionRange: [
|
|
2705
|
+
{
|
|
2706
|
+
start: 536000000,
|
|
2707
|
+
end: 536000001
|
|
2708
|
+
}
|
|
2687
2709
|
]
|
|
2688
2710
|
},
|
|
2689
2711
|
{
|
|
@@ -4242,6 +4264,37 @@ const file_google_protobuf_descriptor = /*@__PURE__*/ boot_boot({
|
|
|
4242
4264
|
}
|
|
4243
4265
|
]
|
|
4244
4266
|
}
|
|
4267
|
+
},
|
|
4268
|
+
{
|
|
4269
|
+
name: "enforce_naming_style",
|
|
4270
|
+
number: 7,
|
|
4271
|
+
type: 14,
|
|
4272
|
+
label: 1,
|
|
4273
|
+
typeName: ".google.protobuf.FeatureSet.EnforceNamingStyle",
|
|
4274
|
+
options: {
|
|
4275
|
+
retention: 2,
|
|
4276
|
+
targets: [
|
|
4277
|
+
1,
|
|
4278
|
+
2,
|
|
4279
|
+
3,
|
|
4280
|
+
4,
|
|
4281
|
+
5,
|
|
4282
|
+
6,
|
|
4283
|
+
7,
|
|
4284
|
+
8,
|
|
4285
|
+
9
|
|
4286
|
+
],
|
|
4287
|
+
editionDefaults: [
|
|
4288
|
+
{
|
|
4289
|
+
value: "STYLE_LEGACY",
|
|
4290
|
+
edition: 900
|
|
4291
|
+
},
|
|
4292
|
+
{
|
|
4293
|
+
value: "STYLE2024",
|
|
4294
|
+
edition: 1001
|
|
4295
|
+
}
|
|
4296
|
+
]
|
|
4297
|
+
}
|
|
4245
4298
|
}
|
|
4246
4299
|
],
|
|
4247
4300
|
enumType: [
|
|
@@ -4350,6 +4403,23 @@ const file_google_protobuf_descriptor = /*@__PURE__*/ boot_boot({
|
|
|
4350
4403
|
number: 2
|
|
4351
4404
|
}
|
|
4352
4405
|
]
|
|
4406
|
+
},
|
|
4407
|
+
{
|
|
4408
|
+
name: "EnforceNamingStyle",
|
|
4409
|
+
value: [
|
|
4410
|
+
{
|
|
4411
|
+
name: "ENFORCE_NAMING_STYLE_UNKNOWN",
|
|
4412
|
+
number: 0
|
|
4413
|
+
},
|
|
4414
|
+
{
|
|
4415
|
+
name: "STYLE2024",
|
|
4416
|
+
number: 1
|
|
4417
|
+
},
|
|
4418
|
+
{
|
|
4419
|
+
name: "STYLE_LEGACY",
|
|
4420
|
+
number: 2
|
|
4421
|
+
}
|
|
4422
|
+
]
|
|
4353
4423
|
}
|
|
4354
4424
|
],
|
|
4355
4425
|
extensionRange: [
|
|
@@ -4474,6 +4544,12 @@ const file_google_protobuf_descriptor = /*@__PURE__*/ boot_boot({
|
|
|
4474
4544
|
}
|
|
4475
4545
|
]
|
|
4476
4546
|
}
|
|
4547
|
+
],
|
|
4548
|
+
extensionRange: [
|
|
4549
|
+
{
|
|
4550
|
+
start: 536000000,
|
|
4551
|
+
end: 536000001
|
|
4552
|
+
}
|
|
4477
4553
|
]
|
|
4478
4554
|
},
|
|
4479
4555
|
{
|
|
@@ -4718,6 +4794,12 @@ var descriptor_pb_FeatureSet_JsonFormat;
|
|
|
4718
4794
|
FeatureSet_JsonFormat[FeatureSet_JsonFormat["ALLOW"] = 1] = "ALLOW";
|
|
4719
4795
|
FeatureSet_JsonFormat[FeatureSet_JsonFormat["LEGACY_BEST_EFFORT"] = 2] = "LEGACY_BEST_EFFORT";
|
|
4720
4796
|
})(descriptor_pb_FeatureSet_JsonFormat || (descriptor_pb_FeatureSet_JsonFormat = {}));
|
|
4797
|
+
var descriptor_pb_FeatureSet_EnforceNamingStyle;
|
|
4798
|
+
(function(FeatureSet_EnforceNamingStyle) {
|
|
4799
|
+
FeatureSet_EnforceNamingStyle[FeatureSet_EnforceNamingStyle["ENFORCE_NAMING_STYLE_UNKNOWN"] = 0] = "ENFORCE_NAMING_STYLE_UNKNOWN";
|
|
4800
|
+
FeatureSet_EnforceNamingStyle[FeatureSet_EnforceNamingStyle["STYLE2024"] = 1] = "STYLE2024";
|
|
4801
|
+
FeatureSet_EnforceNamingStyle[FeatureSet_EnforceNamingStyle["STYLE_LEGACY"] = 2] = "STYLE_LEGACY";
|
|
4802
|
+
})(descriptor_pb_FeatureSet_EnforceNamingStyle || (descriptor_pb_FeatureSet_EnforceNamingStyle = {}));
|
|
4721
4803
|
var descriptor_pb_GeneratedCodeInfo_Annotation_Semantic;
|
|
4722
4804
|
(function(GeneratedCodeInfo_Annotation_Semantic) {
|
|
4723
4805
|
GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic["NONE"] = 0] = "NONE";
|
|
@@ -4743,7 +4825,7 @@ function fileDesc(b64, imports) {
|
|
|
4743
4825
|
var _a;
|
|
4744
4826
|
const root = fromBinary(FileDescriptorProtoSchema, base64Decode(b64));
|
|
4745
4827
|
root.messageType.forEach(restoreJsonNames);
|
|
4746
|
-
root.dependency = null
|
|
4828
|
+
root.dependency = null != (_a = null == imports ? void 0 : imports.map((f)=>f.proto.name)) ? _a : [];
|
|
4747
4829
|
const reg = createFileRegistry(root, (protoFileName)=>null == imports ? void 0 : imports.find((f)=>f.proto.name === protoFileName));
|
|
4748
4830
|
return reg.getFile(root.name);
|
|
4749
4831
|
}
|
|
@@ -4759,96 +4841,83 @@ function timestampDate(timestamp) {
|
|
|
4759
4841
|
return new Date(timestamp_timestampMs(timestamp));
|
|
4760
4842
|
}
|
|
4761
4843
|
function timestampFromMs(timestampMs) {
|
|
4844
|
+
const seconds = Math.floor(timestampMs / 1000);
|
|
4762
4845
|
return create(TimestampSchema, {
|
|
4763
|
-
seconds: protoInt64.parse(
|
|
4764
|
-
nanos: timestampMs
|
|
4846
|
+
seconds: protoInt64.parse(seconds),
|
|
4847
|
+
nanos: (timestampMs - 1000 * seconds) * 1000000
|
|
4765
4848
|
});
|
|
4766
4849
|
}
|
|
4767
4850
|
function timestamp_timestampMs(timestamp) {
|
|
4768
4851
|
return 1000 * Number(timestamp.seconds) + Math.ceil(timestamp.nanos / 1000000);
|
|
4769
4852
|
}
|
|
4770
|
-
const color_pad = (s)=>s.length < 2 ? `0${s}` : s;
|
|
4771
|
-
const
|
|
4772
|
-
const
|
|
4773
|
-
const
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
const
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
TOP: 3
|
|
4810
|
-
};
|
|
4811
|
-
const FontSize = {
|
|
4812
|
-
SMALL: 0,
|
|
4813
|
-
NORMAL: 1,
|
|
4814
|
-
LARGE: 2
|
|
4815
|
-
};
|
|
4816
|
-
const domainPreset = {
|
|
4817
|
-
acfun: 'acfun',
|
|
4818
|
-
baha: 'baha',
|
|
4819
|
-
bgm: 'bgm',
|
|
4820
|
-
bili: 'bili',
|
|
4821
|
-
bglobal: 'bglobal',
|
|
4822
|
-
ddplay: 'ddplay',
|
|
4823
|
-
tucao: 'tucao'
|
|
4824
|
-
};
|
|
4825
|
-
const platforms = Object.keys(domainPreset);
|
|
4826
|
-
class UniID {
|
|
4853
|
+
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
4854
|
+
const DmSegMobileReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 30);
|
|
4855
|
+
const DmWebViewReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 39);
|
|
4856
|
+
const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLCAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSEAoIcGxhdGZvcm0YDSABKAkSEgoFZXh0cmEYDiABKAlIAIgBAUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
|
|
4857
|
+
file_google_protobuf_timestamp
|
|
4858
|
+
]);
|
|
4859
|
+
const DanmakuReplySchema = /*@__PURE__*/ message_messageDesc(file_danuni, 2);
|
|
4860
|
+
var platform_PlatformInfoSource = /*#__PURE__*/ function(PlatformInfoSource) {
|
|
4861
|
+
PlatformInfoSource["Bangumi"] = "bgm";
|
|
4862
|
+
PlatformInfoSource["TMDB"] = "tmdb";
|
|
4863
|
+
return PlatformInfoSource;
|
|
4864
|
+
}({});
|
|
4865
|
+
const PlatformInfoSources = Object.values(platform_PlatformInfoSource);
|
|
4866
|
+
var platform_PlatformVideoSource = /*#__PURE__*/ function(PlatformVideoSource) {
|
|
4867
|
+
PlatformVideoSource["Acfun"] = "acfun";
|
|
4868
|
+
PlatformVideoSource["Baha"] = "baha";
|
|
4869
|
+
PlatformVideoSource["Bilibili"] = "bili";
|
|
4870
|
+
PlatformVideoSource["BilibiliGlobal"] = "bglobal";
|
|
4871
|
+
PlatformVideoSource["Iqiyi"] = "iqiyi";
|
|
4872
|
+
PlatformVideoSource["Tencent"] = "tencent";
|
|
4873
|
+
PlatformVideoSource["Youku"] = "youku";
|
|
4874
|
+
return PlatformVideoSource;
|
|
4875
|
+
}({});
|
|
4876
|
+
const PlatformVideoSources = Object.values(platform_PlatformVideoSource);
|
|
4877
|
+
var platform_PlatformDanmakuOnlySource = /*#__PURE__*/ function(PlatformDanmakuOnlySource) {
|
|
4878
|
+
PlatformDanmakuOnlySource["DanDanPlay"] = "ddplay";
|
|
4879
|
+
PlatformDanmakuOnlySource["TuCao"] = "tucao";
|
|
4880
|
+
return PlatformDanmakuOnlySource;
|
|
4881
|
+
}({});
|
|
4882
|
+
const PlatformDanmakuOnlySources = Object.values(platform_PlatformDanmakuOnlySource);
|
|
4883
|
+
const PlatformDanmakuSources = [
|
|
4884
|
+
...PlatformVideoSources,
|
|
4885
|
+
...PlatformDanmakuOnlySources
|
|
4886
|
+
];
|
|
4887
|
+
const PlatformSources = [
|
|
4888
|
+
...PlatformInfoSources,
|
|
4889
|
+
...PlatformDanmakuSources
|
|
4890
|
+
];
|
|
4891
|
+
class id_gen_UniID {
|
|
4827
4892
|
id;
|
|
4828
4893
|
domain;
|
|
4829
4894
|
constructor(id, domain){
|
|
4830
4895
|
this.id = id;
|
|
4831
4896
|
this.domain = domain;
|
|
4832
4897
|
}
|
|
4898
|
+
static fromString(str) {
|
|
4899
|
+
const [id, domain] = str.split('@');
|
|
4900
|
+
return new id_gen_UniID(id, domain);
|
|
4901
|
+
}
|
|
4833
4902
|
toString() {
|
|
4834
4903
|
return `${this.id}@${this.domain}`;
|
|
4835
4904
|
}
|
|
4836
4905
|
static fromNull(domain) {
|
|
4837
|
-
return new
|
|
4906
|
+
return new id_gen_UniID('runtime' === domain ? 'runtime' : 'anonymous', domain || 'danuni');
|
|
4838
4907
|
}
|
|
4839
4908
|
static fromBili({ cid, mid, midHash }) {
|
|
4840
|
-
if (cid) return new
|
|
4841
|
-
if (mid) return new
|
|
4842
|
-
if (midHash) return new
|
|
4843
|
-
return this.fromNull(
|
|
4909
|
+
if (cid) return new id_gen_UniID(cid.toString(), platform_PlatformVideoSource.Bilibili);
|
|
4910
|
+
if (mid) return new id_gen_UniID(mid.toString(), platform_PlatformVideoSource.Bilibili);
|
|
4911
|
+
if (midHash) return new id_gen_UniID(midHash, platform_PlatformVideoSource.Bilibili);
|
|
4912
|
+
return this.fromNull(platform_PlatformVideoSource.Bilibili);
|
|
4844
4913
|
}
|
|
4845
4914
|
static fromUnknown(id, domain) {
|
|
4846
|
-
if (id) return new
|
|
4915
|
+
if (id) return new id_gen_UniID(id, domain);
|
|
4847
4916
|
return this.fromNull(domain);
|
|
4848
4917
|
}
|
|
4849
4918
|
}
|
|
4850
4919
|
function createDMID(content = '', senderID, ctime, slice = 8) {
|
|
4851
|
-
return new
|
|
4920
|
+
return new jssha('SHA3-256', 'TEXT').update(content + senderID + UniDM.transCtime(ctime).toISOString()).getHash('HEX').slice(0, slice);
|
|
4852
4921
|
}
|
|
4853
4922
|
const BigIntSerializer = (k, v)=>'bigint' == typeof v ? v.toString() : v;
|
|
4854
4923
|
function cleanEmptyObjects(obj) {
|
|
@@ -4857,7 +4926,7 @@ function cleanEmptyObjects(obj) {
|
|
|
4857
4926
|
const cleaned = {};
|
|
4858
4927
|
for (const [key, value] of Object.entries(obj)){
|
|
4859
4928
|
const cleanedValue = cleanEmptyObjects(value);
|
|
4860
|
-
if (void 0 !== cleanedValue &&
|
|
4929
|
+
if (void 0 !== cleanedValue && ('object' != typeof cleanedValue || 0 !== Object.keys(cleanedValue).length)) cleaned[key] = cleanedValue;
|
|
4861
4930
|
}
|
|
4862
4931
|
return Object.keys(cleaned).length > 0 ? cleaned : {};
|
|
4863
4932
|
}
|
|
@@ -4916,16 +4985,16 @@ var dm_gen_ExtraDanUniChapterType = /*#__PURE__*/ function(ExtraDanUniChapterTyp
|
|
|
4916
4985
|
}({});
|
|
4917
4986
|
const ExtraDanUniChapterTypeDict = {
|
|
4918
4987
|
chs: {
|
|
4919
|
-
ch:
|
|
4920
|
-
rev:
|
|
4921
|
-
op:
|
|
4922
|
-
int:
|
|
4923
|
-
ed:
|
|
4924
|
-
prvw:
|
|
4925
|
-
cut:
|
|
4926
|
-
dup:
|
|
4927
|
-
biz:
|
|
4928
|
-
promo:
|
|
4988
|
+
ch: "\u5176\u5B83\u7247\u6BB5",
|
|
4989
|
+
rev: "\u56DE\u987E",
|
|
4990
|
+
op: "\u7247\u5934",
|
|
4991
|
+
int: "\u4E2D\u573A",
|
|
4992
|
+
ed: "\u7247\u5C3E",
|
|
4993
|
+
prvw: "\u9884\u544A",
|
|
4994
|
+
cut: "\u5220\u51CF",
|
|
4995
|
+
dup: "\u8865\u6863",
|
|
4996
|
+
biz: "\u5546\u4E1A\u5E7F\u544A",
|
|
4997
|
+
promo: "\u63A8\u5E7F"
|
|
4929
4998
|
}
|
|
4930
4999
|
};
|
|
4931
5000
|
var dm_gen_ExtraDanUniChapterAction = /*#__PURE__*/ function(ExtraDanUniChapterAction) {
|
|
@@ -4951,7 +5020,7 @@ var dm_gen_Pools = /*#__PURE__*/ function(Pools) {
|
|
|
4951
5020
|
return Pools;
|
|
4952
5021
|
}({});
|
|
4953
5022
|
class UniDM {
|
|
4954
|
-
|
|
5023
|
+
SOID;
|
|
4955
5024
|
progress;
|
|
4956
5025
|
mode;
|
|
4957
5026
|
fontsize;
|
|
@@ -4963,11 +5032,10 @@ class UniDM {
|
|
|
4963
5032
|
pool;
|
|
4964
5033
|
attr;
|
|
4965
5034
|
platform;
|
|
4966
|
-
SPMO;
|
|
4967
5035
|
extraStr;
|
|
4968
5036
|
DMID;
|
|
4969
|
-
constructor(
|
|
4970
|
-
this.
|
|
5037
|
+
constructor(SOID, progress = 0, mode = 0, fontsize = 25, color = 16777215, senderID = id_gen_UniID.fromNull().toString(), content = '', ctime = new Date(), weight = 0, pool = 0, attr = [], platform, extraStr, DMID){
|
|
5038
|
+
this.SOID = SOID;
|
|
4971
5039
|
this.progress = progress;
|
|
4972
5040
|
this.mode = mode;
|
|
4973
5041
|
this.fontsize = fontsize;
|
|
@@ -4979,14 +5047,13 @@ class UniDM {
|
|
|
4979
5047
|
this.pool = pool;
|
|
4980
5048
|
this.attr = attr;
|
|
4981
5049
|
this.platform = platform;
|
|
4982
|
-
this.SPMO = SPMO;
|
|
4983
5050
|
this.extraStr = extraStr;
|
|
4984
5051
|
this.DMID = DMID;
|
|
4985
5052
|
if (progress < 0) this.progress = 0;
|
|
4986
5053
|
if (mode < 0 || mode > 4) this.mode = 0;
|
|
4987
5054
|
if (fontsize <= 0) this.fontsize = 25;
|
|
4988
5055
|
if (color <= 0) this.color = 16777215;
|
|
4989
|
-
if (weight
|
|
5056
|
+
if (weight < 0 || weight > 10) this.weight = 5;
|
|
4990
5057
|
if (pool < 0 || pool > 3) this.pool = 0;
|
|
4991
5058
|
if (!DMID) DMID = this.toDMID();
|
|
4992
5059
|
this.progress = Number.parseFloat(progress.toFixed(3));
|
|
@@ -4994,14 +5061,14 @@ class UniDM {
|
|
|
4994
5061
|
if ('{}' === extraStr) this.extraStr = void 0;
|
|
4995
5062
|
}
|
|
4996
5063
|
static create(args) {
|
|
4997
|
-
return args ? new UniDM(args.
|
|
5064
|
+
return args ? new UniDM(args.SOID || id_gen_UniID.fromNull().toString(), args.progress, args.mode, args.fontsize, args.color, args.senderID, args.content, args.ctime, args.weight, args.pool, args.attr, args.platform, 'object' == typeof args.extra ? JSON.stringify(args.extra) : args.extra || args.extraStr, args.DMID) : new UniDM(id_gen_UniID.fromNull().toString());
|
|
4998
5065
|
}
|
|
4999
5066
|
get extra() {
|
|
5000
5067
|
const extra = JSON.parse(this.extraStr || '{}');
|
|
5001
5068
|
return extra;
|
|
5002
5069
|
}
|
|
5003
5070
|
get isFrom3rdPlatform() {
|
|
5004
|
-
if (this.platform &&
|
|
5071
|
+
if (this.platform && PlatformDanmakuSources.includes(this.platform)) return true;
|
|
5005
5072
|
return false;
|
|
5006
5073
|
}
|
|
5007
5074
|
toDMID() {
|
|
@@ -5009,12 +5076,11 @@ class UniDM {
|
|
|
5009
5076
|
}
|
|
5010
5077
|
isSameAs(dan, _check2 = false) {
|
|
5011
5078
|
const isSame = (k)=>this[k] === dan[k], checks = [
|
|
5012
|
-
'
|
|
5079
|
+
'SOID',
|
|
5013
5080
|
'content',
|
|
5014
5081
|
'mode',
|
|
5015
5082
|
'platform',
|
|
5016
|
-
'pool'
|
|
5017
|
-
'SPMO'
|
|
5083
|
+
'pool'
|
|
5018
5084
|
].every((k)=>isSame(k));
|
|
5019
5085
|
if ('{}' === JSON.stringify(this.extra) && '{}' === JSON.stringify(dan.extra)) return checks;
|
|
5020
5086
|
const thisHasOnlyMerge = this.extra.danuni?.merge && !this.extra.artplayer && !this.extra.bili && !this.extra.danuni.chapter;
|
|
@@ -5041,15 +5107,12 @@ class UniDM {
|
|
|
5041
5107
|
const def = UniDM.create(), dan = UniDM.create(this);
|
|
5042
5108
|
for(const key in dan){
|
|
5043
5109
|
const k = key, v = dan[k];
|
|
5044
|
-
if ('
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
if ('attr' === k && Array.isArray(v) && 0 === v.length) delete dan[k];
|
|
5049
|
-
if ('extraStr' === k && '{}' === v) delete dan[k];
|
|
5050
|
-
}
|
|
5051
|
-
} else delete dan[k];
|
|
5110
|
+
if ('SOID' !== key) if (v) if (v === def[k]) delete dan[k];
|
|
5111
|
+
else {
|
|
5112
|
+
if ('attr' === k && Array.isArray(v) && 0 === v.length) delete dan[k];
|
|
5113
|
+
if ('extraStr' === k && '{}' === v) delete dan[k];
|
|
5052
5114
|
}
|
|
5115
|
+
else delete dan[k];
|
|
5053
5116
|
}
|
|
5054
5117
|
return JSON.parse(JSON.stringify(dan));
|
|
5055
5118
|
}
|
|
@@ -5071,20 +5134,20 @@ class UniDM {
|
|
|
5071
5134
|
clone.content = `${this.content} x${merge.count}`;
|
|
5072
5135
|
} else if (danuni.chapter) {
|
|
5073
5136
|
const chapter = danuni.chapter;
|
|
5074
|
-
if ("cut" === chapter.type) clone.content = `[
|
|
5075
|
-
else if ("dup" === chapter.type) clone.content = `[
|
|
5076
|
-
else clone.content = `[
|
|
5137
|
+
if ("cut" === chapter.type) clone.content = `[\u{63D0}\u{793A}]${clone.platform}\u{6E90}${ExtraDanUniChapterTypeDict.chs[chapter.type]}\u{4E86}${chapter.duration}\u{79D2}`;
|
|
5138
|
+
else if ("dup" === chapter.type) clone.content = `[\u{63D0}\u{793A}(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${clone.platform}\u{6E90}-${chapter.duration}\u{79D2}`;
|
|
5139
|
+
else clone.content = `[\u{7A7A}\u{964D}(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${hh_mm_ss.fromS(clone.progress + chapter.duration)}`;
|
|
5077
5140
|
}
|
|
5078
5141
|
} else if (check('bili') && clone.extra.bili) {
|
|
5079
5142
|
const bili = clone.extra.bili;
|
|
5080
|
-
if (7 === bili.mode && bili.adv) clone.content = `[B
|
|
5143
|
+
if (7 === bili.mode && bili.adv) clone.content = `[B\u{7AD9}\u{9AD8}\u{7EA7}\u{5F39}\u{5E55}]${JSON.parse(bili.adv)[4] || ''}`;
|
|
5081
5144
|
else if (bili.command) {
|
|
5082
5145
|
const command = bili.command;
|
|
5083
|
-
clone.content = `[B
|
|
5146
|
+
clone.content = `[B\u{7AD9}\u{6307}\u{4EE4}\u{5F39}\u{5E55}]${command.content}`;
|
|
5084
5147
|
clone.fontsize = 36;
|
|
5085
5148
|
}
|
|
5086
5149
|
}
|
|
5087
|
-
clone.senderID = 'compat@
|
|
5150
|
+
clone.senderID = 'compat[bot]@dan-any';
|
|
5088
5151
|
clone.attr.push('Compatible');
|
|
5089
5152
|
if (cleanExtra) clone.extraStr = void 0;
|
|
5090
5153
|
return clone;
|
|
@@ -5096,10 +5159,8 @@ class UniDM {
|
|
|
5096
5159
|
if ('s' === tsUnit) return false;
|
|
5097
5160
|
return ts < 100000000;
|
|
5098
5161
|
}
|
|
5099
|
-
if ('number' == typeof oriCtime || 'bigint' == typeof oriCtime)
|
|
5100
|
-
|
|
5101
|
-
return new Date(1000 * Number(oriCtime));
|
|
5102
|
-
}
|
|
5162
|
+
if ('number' == typeof oriCtime || 'bigint' == typeof oriCtime) if (isMsTs(oriCtime)) return new Date(Number(oriCtime));
|
|
5163
|
+
else return new Date(1000 * Number(oriCtime));
|
|
5103
5164
|
if ('string' != typeof oriCtime) return oriCtime;
|
|
5104
5165
|
if (/^\d+n$/.test(oriCtime)) return new Date(Number(oriCtime.slice(0, -1)));
|
|
5105
5166
|
return new Date(oriCtime);
|
|
@@ -5146,11 +5207,11 @@ class UniDM {
|
|
|
5146
5207
|
}
|
|
5147
5208
|
return mode;
|
|
5148
5209
|
}
|
|
5149
|
-
static fromBili(args,
|
|
5210
|
+
static fromBili(args, cid) {
|
|
5150
5211
|
if (args.oid && !cid) cid = args.oid;
|
|
5151
|
-
const
|
|
5212
|
+
const SOID = `def::${id_gen_UniID.fromBili({
|
|
5152
5213
|
cid
|
|
5153
|
-
})
|
|
5214
|
+
})}`, senderID = id_gen_UniID.fromBili({
|
|
5154
5215
|
midHash: args.midHash
|
|
5155
5216
|
});
|
|
5156
5217
|
let mode = 0;
|
|
@@ -5188,28 +5249,79 @@ class UniDM {
|
|
|
5188
5249
|
}
|
|
5189
5250
|
return this.create({
|
|
5190
5251
|
...args,
|
|
5191
|
-
|
|
5252
|
+
SOID: SOID.toString(),
|
|
5192
5253
|
mode,
|
|
5193
5254
|
senderID: senderID.toString(),
|
|
5194
5255
|
ctime: this.transCtime(args.ctime, 's'),
|
|
5195
5256
|
weight: args.weight ? args.weight : 3 === pool ? 1 : 0,
|
|
5196
5257
|
pool,
|
|
5197
|
-
attr: DMAttrUtils.fromBin(args.attr,
|
|
5198
|
-
platform:
|
|
5199
|
-
SPMO,
|
|
5258
|
+
attr: DMAttrUtils.fromBin(args.attr, platform_PlatformVideoSource.Bilibili),
|
|
5259
|
+
platform: platform_PlatformVideoSource.Bilibili,
|
|
5200
5260
|
extra: args.mode >= 7 ? JSON.stringify(extra, BigIntSerializer) : void 0
|
|
5201
5261
|
});
|
|
5202
5262
|
}
|
|
5203
|
-
|
|
5263
|
+
toBiliXML() {
|
|
5264
|
+
const recMode = (mode, extra)=>{
|
|
5265
|
+
switch(mode){
|
|
5266
|
+
case 0:
|
|
5267
|
+
return 1;
|
|
5268
|
+
case 1:
|
|
5269
|
+
return 4;
|
|
5270
|
+
case 2:
|
|
5271
|
+
return 5;
|
|
5272
|
+
case 3:
|
|
5273
|
+
return 6;
|
|
5274
|
+
case 4:
|
|
5275
|
+
if (!extra) return 1;
|
|
5276
|
+
if (extra.adv) return 7;
|
|
5277
|
+
if (extra.code) return 8;
|
|
5278
|
+
else if (extra.bas) return 9;
|
|
5279
|
+
else return 1;
|
|
5280
|
+
default:
|
|
5281
|
+
return 1;
|
|
5282
|
+
}
|
|
5283
|
+
};
|
|
5284
|
+
const rMode = recMode(this.mode, this.extra?.bili);
|
|
5285
|
+
let content;
|
|
5286
|
+
switch(rMode){
|
|
5287
|
+
case 7:
|
|
5288
|
+
content = this.extra?.bili?.adv;
|
|
5289
|
+
break;
|
|
5290
|
+
case 8:
|
|
5291
|
+
content = this.extra?.bili?.code;
|
|
5292
|
+
break;
|
|
5293
|
+
case 9:
|
|
5294
|
+
content = this.extra?.bili?.bas;
|
|
5295
|
+
break;
|
|
5296
|
+
default:
|
|
5297
|
+
content = this.content;
|
|
5298
|
+
break;
|
|
5299
|
+
}
|
|
5300
|
+
return {
|
|
5301
|
+
'#text': content ?? this.content,
|
|
5302
|
+
'@_p': [
|
|
5303
|
+
this.progress,
|
|
5304
|
+
rMode,
|
|
5305
|
+
this.fontsize,
|
|
5306
|
+
this.color,
|
|
5307
|
+
this.ctime.getTime() / 1000,
|
|
5308
|
+
this.pool,
|
|
5309
|
+
this.senderID,
|
|
5310
|
+
this.DMID || this.toDMID(),
|
|
5311
|
+
this.weight
|
|
5312
|
+
].join(',')
|
|
5313
|
+
};
|
|
5314
|
+
}
|
|
5315
|
+
static fromBiliCommand(args, cid) {
|
|
5204
5316
|
if (args.oid && !cid) cid = args.oid;
|
|
5205
|
-
const
|
|
5317
|
+
const SOID = id_gen_UniID.fromBili({
|
|
5206
5318
|
cid
|
|
5207
|
-
}), senderID =
|
|
5319
|
+
}), senderID = id_gen_UniID.fromBili({
|
|
5208
5320
|
mid: args.mid
|
|
5209
5321
|
});
|
|
5210
5322
|
return this.create({
|
|
5211
5323
|
...args,
|
|
5212
|
-
|
|
5324
|
+
SOID: SOID.toString(),
|
|
5213
5325
|
mode: 4,
|
|
5214
5326
|
senderID: senderID.toString(),
|
|
5215
5327
|
ctime: new Date(`${args.ctime} GMT+0800`),
|
|
@@ -5218,8 +5330,7 @@ class UniDM {
|
|
|
5218
5330
|
attr: [
|
|
5219
5331
|
'Protect'
|
|
5220
5332
|
],
|
|
5221
|
-
platform:
|
|
5222
|
-
SPMO,
|
|
5333
|
+
platform: platform_PlatformVideoSource.Bilibili,
|
|
5223
5334
|
extra: JSON.stringify({
|
|
5224
5335
|
bili: {
|
|
5225
5336
|
command: args
|
|
@@ -5228,10 +5339,10 @@ class UniDM {
|
|
|
5228
5339
|
});
|
|
5229
5340
|
}
|
|
5230
5341
|
static fromDplayer(args, playerID, domain) {
|
|
5231
|
-
const
|
|
5342
|
+
const SOID = id_gen_UniID.fromUnknown(playerID, domain), senderID = id_gen_UniID.fromUnknown(args.midHash, domain);
|
|
5232
5343
|
return this.create({
|
|
5233
5344
|
...args,
|
|
5234
|
-
|
|
5345
|
+
SOID: SOID.toString(),
|
|
5235
5346
|
mode: this.transMode(args.mode, 'dplayer'),
|
|
5236
5347
|
senderID: senderID.toString(),
|
|
5237
5348
|
platform: domain
|
|
@@ -5250,7 +5361,7 @@ class UniDM {
|
|
|
5250
5361
|
};
|
|
5251
5362
|
}
|
|
5252
5363
|
static fromArtplayer(args, playerID, domain) {
|
|
5253
|
-
const
|
|
5364
|
+
const SOID = id_gen_UniID.fromUnknown(playerID, domain), senderID = id_gen_UniID.fromUnknown('', domain);
|
|
5254
5365
|
let extra = args.border ? {
|
|
5255
5366
|
artplayer: {
|
|
5256
5367
|
border: args.border,
|
|
@@ -5270,7 +5381,7 @@ class UniDM {
|
|
|
5270
5381
|
};
|
|
5271
5382
|
return this.create({
|
|
5272
5383
|
...args,
|
|
5273
|
-
|
|
5384
|
+
SOID: SOID.toString(),
|
|
5274
5385
|
mode: this.transMode(args.mode, 'artplayer'),
|
|
5275
5386
|
senderID: senderID.toString(),
|
|
5276
5387
|
platform: domain,
|
|
@@ -5289,11 +5400,11 @@ class UniDM {
|
|
|
5289
5400
|
style: this.extra.artplayer?.style
|
|
5290
5401
|
};
|
|
5291
5402
|
}
|
|
5292
|
-
static fromDDplay(args, episodeId, domain =
|
|
5293
|
-
const
|
|
5403
|
+
static fromDDplay(args, episodeId, domain = platform_PlatformDanmakuOnlySource.DanDanPlay) {
|
|
5404
|
+
const SOID = id_gen_UniID.fromUnknown(`def::${episodeId}`, domain);
|
|
5294
5405
|
return this.create({
|
|
5295
5406
|
...args,
|
|
5296
|
-
|
|
5407
|
+
SOID: SOID.toString(),
|
|
5297
5408
|
mode: this.transMode(args.mode, 'ddplay'),
|
|
5298
5409
|
senderID: args.uid,
|
|
5299
5410
|
content: args.m,
|
|
@@ -5315,78 +5426,605 @@ class UniDM {
|
|
|
5315
5426
|
};
|
|
5316
5427
|
}
|
|
5317
5428
|
}
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
}
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5429
|
+
class UniPool {
|
|
5430
|
+
dans;
|
|
5431
|
+
options;
|
|
5432
|
+
constructor(dans, options = {}){
|
|
5433
|
+
this.dans = dans;
|
|
5434
|
+
this.options = options;
|
|
5435
|
+
if (false !== options.dedupe) options.dedupe = true;
|
|
5436
|
+
if (this.options.dedupe) this.dedupe();
|
|
5437
|
+
}
|
|
5438
|
+
async pipe(fn) {
|
|
5439
|
+
return fn(this);
|
|
5440
|
+
}
|
|
5441
|
+
pipeSync(fn) {
|
|
5442
|
+
return fn(this);
|
|
5443
|
+
}
|
|
5444
|
+
get shared() {
|
|
5445
|
+
const isShared = (key)=>this.dans.every((d)=>d[key]);
|
|
5334
5446
|
return {
|
|
5335
|
-
|
|
5336
|
-
|
|
5337
|
-
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5447
|
+
SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
|
|
5448
|
+
senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
|
|
5449
|
+
platform: isShared('platform') ? this.dans[0].platform : void 0,
|
|
5450
|
+
pool: isShared('pool') ? this.dans[0].pool : void 0,
|
|
5451
|
+
mode: isShared('mode') ? this.dans[0].mode : void 0,
|
|
5452
|
+
color: isShared('color') ? this.dans[0].color : void 0
|
|
5341
5453
|
};
|
|
5342
|
-
}
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5347
|
-
|
|
5348
|
-
|
|
5349
|
-
|
|
5350
|
-
}
|
|
5351
|
-
|
|
5352
|
-
|
|
5353
|
-
|
|
5354
|
-
|
|
5355
|
-
|
|
5356
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
}
|
|
5454
|
+
}
|
|
5455
|
+
get stat() {
|
|
5456
|
+
const default_stat = {
|
|
5457
|
+
SOID: [],
|
|
5458
|
+
mode: [
|
|
5459
|
+
{
|
|
5460
|
+
val: dm_gen_Modes.Normal,
|
|
5461
|
+
count: 0
|
|
5462
|
+
},
|
|
5463
|
+
{
|
|
5464
|
+
val: dm_gen_Modes.Bottom,
|
|
5465
|
+
count: 0
|
|
5466
|
+
},
|
|
5467
|
+
{
|
|
5468
|
+
val: dm_gen_Modes.Top,
|
|
5469
|
+
count: 0
|
|
5470
|
+
},
|
|
5471
|
+
{
|
|
5472
|
+
val: dm_gen_Modes.Reverse,
|
|
5473
|
+
count: 0
|
|
5474
|
+
},
|
|
5475
|
+
{
|
|
5476
|
+
val: dm_gen_Modes.Ext,
|
|
5477
|
+
count: 0
|
|
5478
|
+
}
|
|
5479
|
+
],
|
|
5480
|
+
fontsize: [],
|
|
5481
|
+
color: [],
|
|
5482
|
+
senderID: [],
|
|
5483
|
+
content: [],
|
|
5484
|
+
weight: [],
|
|
5485
|
+
pool: [
|
|
5486
|
+
{
|
|
5487
|
+
val: dm_gen_Pools.Def,
|
|
5488
|
+
count: 0
|
|
5489
|
+
},
|
|
5490
|
+
{
|
|
5491
|
+
val: dm_gen_Pools.Sub,
|
|
5492
|
+
count: 0
|
|
5493
|
+
},
|
|
5494
|
+
{
|
|
5495
|
+
val: dm_gen_Pools.Adv,
|
|
5496
|
+
count: 0
|
|
5497
|
+
},
|
|
5498
|
+
{
|
|
5499
|
+
val: dm_gen_Pools.Ix,
|
|
5500
|
+
count: 0
|
|
5501
|
+
}
|
|
5502
|
+
],
|
|
5503
|
+
platform: []
|
|
5504
|
+
};
|
|
5505
|
+
const stat = this.dans.reduce((s, d)=>{
|
|
5506
|
+
const SOID = s.SOID.find((i)=>i.val === d.SOID);
|
|
5507
|
+
if (SOID) SOID.count++;
|
|
5508
|
+
else s.SOID.push({
|
|
5509
|
+
val: d.SOID,
|
|
5510
|
+
count: 1
|
|
5511
|
+
});
|
|
5512
|
+
const mode = s.mode.find((i)=>i.val === d.mode);
|
|
5513
|
+
if (mode) mode.count++;
|
|
5514
|
+
else s.mode.push({
|
|
5515
|
+
val: d.mode,
|
|
5516
|
+
count: 1
|
|
5517
|
+
});
|
|
5518
|
+
const fontsize = s.fontsize.find((i)=>i.val === d.fontsize);
|
|
5519
|
+
if (fontsize) fontsize.count++;
|
|
5520
|
+
else s.fontsize.push({
|
|
5521
|
+
val: d.fontsize,
|
|
5522
|
+
count: 1
|
|
5523
|
+
});
|
|
5524
|
+
const color = s.color.find((i)=>i.val === d.color);
|
|
5525
|
+
if (color) color.count++;
|
|
5526
|
+
else s.color.push({
|
|
5527
|
+
val: d.color,
|
|
5528
|
+
count: 1
|
|
5529
|
+
});
|
|
5530
|
+
const senderID = s.senderID.find((i)=>i.val === d.senderID);
|
|
5531
|
+
if (senderID) senderID.count++;
|
|
5532
|
+
else s.senderID.push({
|
|
5533
|
+
val: d.senderID,
|
|
5534
|
+
count: 1
|
|
5535
|
+
});
|
|
5536
|
+
const content = s.content.find((i)=>i.val === d.content);
|
|
5537
|
+
if (content) content.count++;
|
|
5538
|
+
else s.content.push({
|
|
5539
|
+
val: d.content,
|
|
5540
|
+
count: 1
|
|
5541
|
+
});
|
|
5542
|
+
const weight = s.weight.find((i)=>i.val === d.weight);
|
|
5543
|
+
if (weight) weight.count++;
|
|
5544
|
+
else s.weight.push({
|
|
5545
|
+
val: d.weight,
|
|
5546
|
+
count: 1
|
|
5547
|
+
});
|
|
5548
|
+
const pool = s.pool.find((i)=>i.val === d.pool);
|
|
5549
|
+
if (pool) pool.count++;
|
|
5550
|
+
else s.pool.push({
|
|
5551
|
+
val: d.pool,
|
|
5552
|
+
count: 1
|
|
5553
|
+
});
|
|
5554
|
+
const platform = s.platform.find((i)=>i.val === d.platform);
|
|
5555
|
+
if (platform) platform.count++;
|
|
5556
|
+
else s.platform.push({
|
|
5557
|
+
val: d.platform,
|
|
5558
|
+
count: 1
|
|
5559
|
+
});
|
|
5560
|
+
return s;
|
|
5561
|
+
}, default_stat);
|
|
5562
|
+
return stat;
|
|
5563
|
+
}
|
|
5564
|
+
get most() {
|
|
5565
|
+
const s = this.stat;
|
|
5566
|
+
return {
|
|
5567
|
+
mode: s.mode.sort((a, b)=>b.count - a.count)[0].val,
|
|
5568
|
+
fontsize: s.fontsize.sort((a, b)=>b.count - a.count)[0].val,
|
|
5569
|
+
color: s.color.sort((a, b)=>b.count - a.count)[0].val,
|
|
5570
|
+
senderID: s.senderID.sort((a, b)=>b.count - a.count)[0].val,
|
|
5571
|
+
content: s.content.sort((a, b)=>b.count - a.count)[0].val,
|
|
5572
|
+
weight: s.weight.sort((a, b)=>b.count - a.count)[0].val,
|
|
5573
|
+
pool: s.pool.sort((a, b)=>b.count - a.count)[0].val,
|
|
5574
|
+
platform: s.platform.sort((a, b)=>b.count - a.count)[0].val
|
|
5575
|
+
};
|
|
5576
|
+
}
|
|
5577
|
+
static create() {
|
|
5578
|
+
return new UniPool([]);
|
|
5579
|
+
}
|
|
5580
|
+
assign(dans) {
|
|
5581
|
+
if (dans instanceof UniPool) return new UniPool([
|
|
5582
|
+
...this.dans,
|
|
5583
|
+
...dans.dans
|
|
5584
|
+
]);
|
|
5585
|
+
if (dans instanceof UniDM) return new UniPool([
|
|
5586
|
+
...this.dans,
|
|
5587
|
+
dans
|
|
5588
|
+
]);
|
|
5589
|
+
if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new UniPool([
|
|
5590
|
+
...this.dans,
|
|
5591
|
+
...dans
|
|
5592
|
+
]);
|
|
5593
|
+
return this;
|
|
5594
|
+
}
|
|
5595
|
+
split(key) {
|
|
5596
|
+
if (this.shared[key]) return [
|
|
5597
|
+
this
|
|
5598
|
+
];
|
|
5599
|
+
const set = new Set(this.dans.map((d)=>d[key]));
|
|
5600
|
+
return [
|
|
5601
|
+
...set
|
|
5602
|
+
].map((v)=>new UniPool(this.dans.filter((d)=>d[key] === v), {
|
|
5603
|
+
dedupe: false
|
|
5604
|
+
}));
|
|
5605
|
+
}
|
|
5606
|
+
dedupe() {
|
|
5607
|
+
const map = new Map();
|
|
5608
|
+
this.dans.forEach((d)=>map.set(d.DMID || d.toDMID(), d));
|
|
5609
|
+
this.dans = [
|
|
5610
|
+
...map.values()
|
|
5611
|
+
];
|
|
5612
|
+
this.options.dedupe = false;
|
|
5613
|
+
}
|
|
5614
|
+
merge(lifetime = 0) {
|
|
5615
|
+
if (!this.shared.SOID) {
|
|
5616
|
+
console.error("\u672C\u529F\u80FD\u4EC5\u652F\u6301\u540C\u5F39\u5E55\u5E93\u5185\u4F7F\u7528\uFF0C\u53EF\u5148 .split('SOID') \u5728\u5206\u522B\u4F7F\u7528");
|
|
5617
|
+
return this;
|
|
5618
|
+
}
|
|
5619
|
+
if (lifetime <= 0) return this;
|
|
5620
|
+
const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
|
|
5621
|
+
const key = [
|
|
5622
|
+
'SOID',
|
|
5623
|
+
'content',
|
|
5624
|
+
'mode',
|
|
5625
|
+
'platform',
|
|
5626
|
+
'pool'
|
|
5627
|
+
].map((k)=>danmaku[k]).join('|');
|
|
5628
|
+
const cached = cache[key];
|
|
5629
|
+
const lastAppearTime = cached?.progress || 0;
|
|
5630
|
+
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached)) {
|
|
5631
|
+
const senders = mergeObj[key].senders;
|
|
5632
|
+
senders.push(danmaku.senderID);
|
|
5633
|
+
const extra = danmaku.extra;
|
|
5634
|
+
extra.danuni = extra.danuni || {};
|
|
5635
|
+
extra.danuni.merge = {
|
|
5636
|
+
count: senders.length,
|
|
5637
|
+
duration: danmaku.progress - cached.progress,
|
|
5638
|
+
senders,
|
|
5639
|
+
taolu_count: senders.length,
|
|
5640
|
+
taolu_senders: senders
|
|
5641
|
+
};
|
|
5642
|
+
danmaku.extraStr = JSON.stringify(extra);
|
|
5643
|
+
cache[key] = danmaku;
|
|
5644
|
+
mergeObj[key] = extra.danuni.merge;
|
|
5645
|
+
return [
|
|
5646
|
+
result,
|
|
5647
|
+
cache,
|
|
5648
|
+
mergeObj
|
|
5649
|
+
];
|
|
5650
|
+
}
|
|
5651
|
+
{
|
|
5652
|
+
mergeObj[key] = {
|
|
5653
|
+
count: 1,
|
|
5654
|
+
duration: 0,
|
|
5655
|
+
senders: [
|
|
5656
|
+
danmaku.senderID
|
|
5657
|
+
],
|
|
5658
|
+
taolu_count: 1,
|
|
5659
|
+
taolu_senders: [
|
|
5660
|
+
danmaku.senderID
|
|
5661
|
+
]
|
|
5662
|
+
};
|
|
5663
|
+
cache[key] = danmaku;
|
|
5664
|
+
const extra = danmaku.extra;
|
|
5665
|
+
extra.danuni = extra.danuni || {};
|
|
5666
|
+
extra.danuni.merge = mergeObj[key];
|
|
5667
|
+
danmaku.extraStr = JSON.stringify(extra);
|
|
5668
|
+
result.push(danmaku);
|
|
5669
|
+
return [
|
|
5670
|
+
result,
|
|
5671
|
+
cache,
|
|
5672
|
+
mergeObj
|
|
5673
|
+
];
|
|
5674
|
+
}
|
|
5675
|
+
}, [
|
|
5676
|
+
[],
|
|
5677
|
+
{},
|
|
5678
|
+
{}
|
|
5679
|
+
]);
|
|
5680
|
+
const [result, _cache, mergeObj] = mergeContext;
|
|
5681
|
+
result.forEach((danmaku, i)=>{
|
|
5682
|
+
const key = [
|
|
5683
|
+
'SOID',
|
|
5684
|
+
'content',
|
|
5685
|
+
'mode',
|
|
5686
|
+
'platform',
|
|
5687
|
+
'pool'
|
|
5688
|
+
].map((k)=>danmaku[k]).join('|');
|
|
5689
|
+
const extra = result[i].extra, mergeData = mergeObj[key];
|
|
5690
|
+
result[i].extraStr = JSON.stringify({
|
|
5691
|
+
...extra,
|
|
5692
|
+
danuni: {
|
|
5693
|
+
...extra.danuni,
|
|
5694
|
+
merge: mergeData
|
|
5695
|
+
}
|
|
5696
|
+
});
|
|
5697
|
+
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
5698
|
+
const updatedExtra = {
|
|
5699
|
+
...extra
|
|
5700
|
+
};
|
|
5701
|
+
if (updatedExtra.danuni) {
|
|
5702
|
+
delete updatedExtra.danuni.merge;
|
|
5703
|
+
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
5704
|
+
}
|
|
5705
|
+
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? JSON.stringify(updatedExtra) : void 0;
|
|
5706
|
+
} else {
|
|
5707
|
+
result[i].senderID = 'merge[bot]@dan-any';
|
|
5708
|
+
result[i].attr ? result[i].attr.push('Protect') : result[i].attr = [
|
|
5709
|
+
'Protect'
|
|
5710
|
+
];
|
|
5711
|
+
}
|
|
5712
|
+
});
|
|
5713
|
+
return new UniPool(result);
|
|
5714
|
+
}
|
|
5715
|
+
minify() {
|
|
5716
|
+
return this.dans.map((d)=>d.minify());
|
|
5717
|
+
}
|
|
5718
|
+
convert2(format, continue_on_error = false) {
|
|
5719
|
+
switch(format){
|
|
5720
|
+
case 'danuni.json':
|
|
5721
|
+
return this.dans;
|
|
5722
|
+
case 'danuni.bin':
|
|
5723
|
+
return this.toPb();
|
|
5724
|
+
case 'dplayer.json':
|
|
5725
|
+
return this.toDplayer();
|
|
5726
|
+
case 'artplayer.json':
|
|
5727
|
+
return this.toArtplayer();
|
|
5728
|
+
case 'ddplay.json':
|
|
5729
|
+
return this.toDDplay();
|
|
5730
|
+
case 'common.ass':
|
|
5731
|
+
return this.toASS();
|
|
5732
|
+
default:
|
|
5733
|
+
{
|
|
5734
|
+
const message = '(err) Unknown format or unsupported now!';
|
|
5735
|
+
if (continue_on_error) return message;
|
|
5736
|
+
throw new Error(message);
|
|
5737
|
+
}
|
|
5738
|
+
}
|
|
5739
|
+
}
|
|
5740
|
+
static fromPb(bin) {
|
|
5741
|
+
const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
|
|
5742
|
+
return new UniPool(data.danmakus.map((d)=>new UniDM(d.SOID, d.progress, d.mode, d.fontsize, d.color, d.senderID, d.content, timestampDate(d.ctime || timestampNow()), d.weight, d.pool, d.attr, d.platform, d.extra, d.DMID)));
|
|
5743
|
+
}
|
|
5744
|
+
toPb() {
|
|
5745
|
+
return toBinary(DanmakuReplySchema, create(DanmakuReplySchema, {
|
|
5746
|
+
danmakus: this.dans.map((d)=>({
|
|
5747
|
+
SOID: d.SOID,
|
|
5748
|
+
DMID: d.DMID,
|
|
5749
|
+
progress: d.progress,
|
|
5750
|
+
mode: d.mode,
|
|
5751
|
+
fontsize: d.fontsize,
|
|
5752
|
+
color: d.color,
|
|
5753
|
+
senderID: d.senderID,
|
|
5754
|
+
content: d.content,
|
|
5755
|
+
ctime: timestampFromDate(d.ctime),
|
|
5756
|
+
weight: d.weight,
|
|
5757
|
+
pool: d.pool,
|
|
5758
|
+
attr: d.attr,
|
|
5759
|
+
platform: d.platform,
|
|
5760
|
+
extra: d.extraStr
|
|
5761
|
+
}))
|
|
5762
|
+
}));
|
|
5763
|
+
}
|
|
5764
|
+
static fromBiliXML(xml) {
|
|
5765
|
+
const parser = new XMLParser({
|
|
5766
|
+
ignoreAttributes: false
|
|
5767
|
+
}), oriData = parser.parse(xml), dans = oriData.i.d;
|
|
5768
|
+
return new UniPool(dans.map((d)=>{
|
|
5769
|
+
const p_str = d['@_p'], p_arr = p_str.split(',');
|
|
5770
|
+
return UniDM.fromBili({
|
|
5771
|
+
content: d['#text'],
|
|
5772
|
+
progress: Number.parseFloat(p_arr[0]),
|
|
5773
|
+
mode: Number.parseInt(p_arr[1]),
|
|
5774
|
+
fontsize: Number.parseInt(p_arr[2]),
|
|
5775
|
+
color: Number.parseInt(p_arr[3]),
|
|
5776
|
+
ctime: BigInt(p_arr[4]),
|
|
5777
|
+
pool: Number.parseInt(p_arr[5]),
|
|
5778
|
+
midHash: p_arr[6],
|
|
5779
|
+
id: BigInt(p_arr[7]),
|
|
5780
|
+
weight: Number.parseInt(p_arr[8])
|
|
5781
|
+
}, BigInt(oriData.i.chatid));
|
|
5782
|
+
}));
|
|
5783
|
+
}
|
|
5784
|
+
toBiliXML() {
|
|
5785
|
+
const genCID = (id)=>{
|
|
5786
|
+
const UniID = id_gen_UniID.fromString(id);
|
|
5787
|
+
if (UniID.domain === platform_PlatformVideoSource.Bilibili) {
|
|
5788
|
+
const cid = Number(UniID.id.replaceAll('def::', ''));
|
|
5789
|
+
if (cid) return cid;
|
|
5790
|
+
}
|
|
5791
|
+
return Number.parseInt(Buffer.from(id).toString('hex'), 16);
|
|
5792
|
+
};
|
|
5793
|
+
const builder = new XMLBuilder({
|
|
5794
|
+
ignoreAttributes: false
|
|
5795
|
+
});
|
|
5796
|
+
return builder.build({
|
|
5797
|
+
'?xml': {
|
|
5798
|
+
'@_version': '1.0',
|
|
5799
|
+
'@_encoding': 'UTF-8'
|
|
5800
|
+
},
|
|
5801
|
+
i: {
|
|
5802
|
+
chatserver: 'chat.bilibili.com',
|
|
5803
|
+
chatid: genCID(this.dans[0].SOID),
|
|
5804
|
+
mission: 0,
|
|
5805
|
+
maxlimit: this.dans.length,
|
|
5806
|
+
state: 0,
|
|
5807
|
+
real_name: 0,
|
|
5808
|
+
source: 'k-v',
|
|
5809
|
+
d: this.dans.map((dan)=>dan.toBiliXML())
|
|
5810
|
+
}
|
|
5811
|
+
});
|
|
5812
|
+
}
|
|
5813
|
+
static fromBiliGrpc(bin) {
|
|
5814
|
+
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin)), json = data.elems;
|
|
5815
|
+
return new UniPool(json.map((d)=>UniDM.fromBili({
|
|
5816
|
+
...d,
|
|
5817
|
+
progress: d.progress / 1000
|
|
5818
|
+
})));
|
|
5819
|
+
}
|
|
5820
|
+
static fromBiliCommandGrpc(bin) {
|
|
5821
|
+
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin)), json = data.commandDms;
|
|
5822
|
+
return new UniPool(json.map((d)=>UniDM.fromBiliCommand(d)));
|
|
5823
|
+
}
|
|
5824
|
+
static fromDplayer(json, playerID, domain = 'other') {
|
|
5825
|
+
return new UniPool(json.data.map((d)=>UniDM.fromDplayer({
|
|
5826
|
+
content: d[4],
|
|
5827
|
+
progress: d[0],
|
|
5828
|
+
mode: d[1],
|
|
5829
|
+
color: d[2],
|
|
5830
|
+
midHash: d[3]
|
|
5831
|
+
}, playerID, domain)));
|
|
5832
|
+
}
|
|
5833
|
+
toDplayer() {
|
|
5834
|
+
return {
|
|
5835
|
+
code: 0,
|
|
5836
|
+
data: this.dans.map((dan)=>{
|
|
5837
|
+
const d = dan.toDplayer();
|
|
5838
|
+
return [
|
|
5839
|
+
d.progress,
|
|
5840
|
+
d.mode,
|
|
5841
|
+
d.color,
|
|
5842
|
+
d.midHash,
|
|
5843
|
+
d.content
|
|
5844
|
+
];
|
|
5845
|
+
})
|
|
5846
|
+
};
|
|
5847
|
+
}
|
|
5848
|
+
static fromArtplayer(json, playerID, domain = 'other') {
|
|
5849
|
+
return new UniPool(json.map((d)=>UniDM.fromArtplayer({
|
|
5850
|
+
content: d.text,
|
|
5851
|
+
progress: d.time || 0,
|
|
5852
|
+
mode: d.mode || 0,
|
|
5853
|
+
color: Number((d.color || 'FFFFFF').replace('#', '0x')),
|
|
5854
|
+
style: d.style
|
|
5855
|
+
}, playerID, domain)));
|
|
5856
|
+
}
|
|
5857
|
+
toArtplayer() {
|
|
5858
|
+
return this.dans.map((dan)=>{
|
|
5859
|
+
const d = dan.toArtplayer();
|
|
5860
|
+
return {
|
|
5861
|
+
text: d.content,
|
|
5862
|
+
time: d.progress,
|
|
5863
|
+
mode: d.mode,
|
|
5864
|
+
color: `#${d.color.toString(16).toUpperCase() || 'FFFFFF'}`,
|
|
5865
|
+
border: d.border,
|
|
5866
|
+
style: d.style
|
|
5867
|
+
};
|
|
5868
|
+
});
|
|
5869
|
+
}
|
|
5870
|
+
static fromDDPlay(json, episodeId) {
|
|
5871
|
+
return new UniPool(json.comments.map((d)=>{
|
|
5872
|
+
const p_arr = d.p.split(',');
|
|
5873
|
+
return UniDM.fromDDplay({
|
|
5874
|
+
cid: d.cid,
|
|
5875
|
+
color: Number.parseInt(p_arr[2]),
|
|
5876
|
+
m: d.m,
|
|
5877
|
+
mode: Number.parseInt(p_arr[1]),
|
|
5878
|
+
progress: Number.parseFloat(p_arr[0]),
|
|
5879
|
+
uid: p_arr[3]
|
|
5880
|
+
}, episodeId);
|
|
5881
|
+
}));
|
|
5882
|
+
}
|
|
5883
|
+
toDDplay() {
|
|
5884
|
+
return {
|
|
5885
|
+
count: this.dans.length,
|
|
5886
|
+
comments: this.dans.map((dan)=>{
|
|
5887
|
+
const d = dan.toDDplay();
|
|
5888
|
+
return {
|
|
5889
|
+
cid: d.cid,
|
|
5890
|
+
p: `${d.progress},${d.mode},${d.color},${d.uid}`,
|
|
5891
|
+
m: d.m
|
|
5892
|
+
};
|
|
5893
|
+
})
|
|
5894
|
+
};
|
|
5895
|
+
}
|
|
5896
|
+
static fromASS(ass) {
|
|
5897
|
+
return parseAssRawField(ass);
|
|
5898
|
+
}
|
|
5899
|
+
toASS(options = {
|
|
5900
|
+
substyle: {}
|
|
5901
|
+
}) {
|
|
5902
|
+
const fn = this.shared.SOID;
|
|
5903
|
+
return generateASS(this, {
|
|
5904
|
+
filename: fn,
|
|
5905
|
+
title: fn,
|
|
5906
|
+
...options
|
|
5907
|
+
});
|
|
5908
|
+
}
|
|
5909
|
+
}
|
|
5910
|
+
const color_pad = (s)=>s.length < 2 ? `0${s}` : s;
|
|
5911
|
+
const decimalToHex = (n)=>color_pad(n.toString(16));
|
|
5912
|
+
const isDarkColor = ({ r, g, b })=>0.299 * r + 0.587 * g + 0.114 * b < 0x30;
|
|
5913
|
+
const WHITE = {
|
|
5914
|
+
r: 255,
|
|
5915
|
+
g: 255,
|
|
5916
|
+
b: 255
|
|
5917
|
+
};
|
|
5918
|
+
const BLACK = {
|
|
5919
|
+
r: 0,
|
|
5920
|
+
g: 0,
|
|
5921
|
+
b: 0
|
|
5922
|
+
};
|
|
5923
|
+
const hexColorToRGB = (hex)=>{
|
|
5924
|
+
if (0 === hex.indexOf('#')) hex = hex.slice(1);
|
|
5925
|
+
const [r, g, b] = 3 === hex.length ? hex.split('').map((c)=>c + c) : hex.match(/../g) || [];
|
|
5926
|
+
return {
|
|
5927
|
+
r: Number.parseInt(r, 16),
|
|
5928
|
+
g: Number.parseInt(g, 16),
|
|
5929
|
+
b: Number.parseInt(b, 16)
|
|
5930
|
+
};
|
|
5931
|
+
};
|
|
5932
|
+
const formatColor = ({ r, g, b }, opacity)=>{
|
|
5933
|
+
const color = [
|
|
5934
|
+
b,
|
|
5935
|
+
g,
|
|
5936
|
+
r
|
|
5937
|
+
];
|
|
5938
|
+
if (void 0 !== opacity) {
|
|
5939
|
+
const alpha = Math.round((1 - opacity) * 255);
|
|
5940
|
+
color.unshift(alpha);
|
|
5941
|
+
}
|
|
5942
|
+
return `&H${color.map(decimalToHex).join('').toUpperCase()}`;
|
|
5943
|
+
};
|
|
5944
|
+
const getDecoratingColor = (color)=>isDarkColor(color) ? WHITE : BLACK;
|
|
5945
|
+
const isWhite = (color)=>255 === color.r && 255 === color.g && 255 === color.b;
|
|
5946
|
+
const DanmakuType = {
|
|
5947
|
+
SCROLL: 1,
|
|
5948
|
+
BOTTOM: 2,
|
|
5949
|
+
TOP: 3
|
|
5950
|
+
};
|
|
5951
|
+
const FontSize = {
|
|
5952
|
+
SMALL: 0,
|
|
5953
|
+
NORMAL: 1,
|
|
5954
|
+
LARGE: 2
|
|
5955
|
+
};
|
|
5956
|
+
function decimalToRGB888(decimal) {
|
|
5957
|
+
const r = decimal >> 16 & 0xff;
|
|
5958
|
+
const g = decimal >> 8 & 0xff;
|
|
5959
|
+
const b = 0xff & decimal;
|
|
5960
|
+
return {
|
|
5961
|
+
r,
|
|
5962
|
+
g,
|
|
5963
|
+
b
|
|
5964
|
+
};
|
|
5965
|
+
}
|
|
5966
|
+
function UniPool2DanmakuLists(UP) {
|
|
5967
|
+
const dans = UP.dans;
|
|
5968
|
+
let type = DanmakuType.SCROLL;
|
|
5969
|
+
return dans.map((d)=>{
|
|
5970
|
+
if (d.mode === dm_gen_Modes.Bottom) type = DanmakuType.BOTTOM;
|
|
5971
|
+
else if (d.mode === dm_gen_Modes.Top) type = DanmakuType.TOP;
|
|
5972
|
+
return {
|
|
5973
|
+
time: d.progress,
|
|
5974
|
+
type,
|
|
5975
|
+
fontSizeType: d.fontsize,
|
|
5976
|
+
content: d.content,
|
|
5977
|
+
color: decimalToRGB888(d.color),
|
|
5978
|
+
extra: d
|
|
5979
|
+
};
|
|
5980
|
+
});
|
|
5981
|
+
}
|
|
5982
|
+
function DanmakuList2UniPool(d) {
|
|
5983
|
+
return new UniPool(d.map((d)=>UniDM.create(d.extra)));
|
|
5984
|
+
}
|
|
5985
|
+
const lang_assign = (source, ...targets)=>{
|
|
5986
|
+
for (const target of targets)for (const key of Object.keys(target))source[key] = target[key];
|
|
5987
|
+
return source;
|
|
5988
|
+
};
|
|
5989
|
+
const arrayOfLength = (length, defaultValue)=>{
|
|
5990
|
+
const array = new Array(length);
|
|
5991
|
+
for(let i = 0; i < length; i++)array[i] = defaultValue;
|
|
5992
|
+
return array;
|
|
5993
|
+
};
|
|
5994
|
+
const computeScrollInTime = (rectWidth, screenWidth, scrollTime)=>{
|
|
5995
|
+
const speed = (screenWidth + rectWidth) / scrollTime;
|
|
5996
|
+
return rectWidth / speed;
|
|
5997
|
+
};
|
|
5998
|
+
const computeScrollOverTime = (rectWidth, screenWidth, scrollTime)=>{
|
|
5999
|
+
const speed = (screenWidth + rectWidth) / scrollTime;
|
|
6000
|
+
return screenWidth / speed;
|
|
6001
|
+
};
|
|
6002
|
+
const splitGrids = ({ fontSize, padding, playResY, bottomSpace })=>{
|
|
6003
|
+
const defaultFontSize = fontSize[FontSize.NORMAL];
|
|
6004
|
+
const paddingTop = padding[0];
|
|
6005
|
+
const paddingBottom = padding[2];
|
|
6006
|
+
const linesCount = Math.floor((playResY - bottomSpace) / (defaultFontSize + paddingTop + paddingBottom));
|
|
6007
|
+
return {
|
|
6008
|
+
1: arrayOfLength(linesCount, {
|
|
6009
|
+
start: 0,
|
|
6010
|
+
end: 0,
|
|
6011
|
+
width: 0
|
|
6012
|
+
}),
|
|
6013
|
+
3: arrayOfLength(linesCount, 0),
|
|
6014
|
+
2: arrayOfLength(linesCount, 0)
|
|
6015
|
+
};
|
|
6016
|
+
};
|
|
6017
|
+
const measureTextWidth = (()=>{
|
|
6018
|
+
const canvasContext = createCanvas(50, 50).getContext('2d');
|
|
6019
|
+
const supportTextMeasure = !!canvasContext.measureText("\u4E2D");
|
|
6020
|
+
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
6021
|
+
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
6022
|
+
const textWidth = canvasContext.measureText(text).width;
|
|
6023
|
+
return Math.round(textWidth);
|
|
6024
|
+
};
|
|
6025
|
+
console.warn('[Warn] node-canvas is installed without text measure support, layout may not be correct');
|
|
6026
|
+
return (_fontName, fontSize, _bold, text)=>text.length * fontSize;
|
|
6027
|
+
})();
|
|
5390
6028
|
const resolveAvailableFixGrid = (grids, time)=>{
|
|
5391
6029
|
for (const [i, grid] of grids.entries())if (grid <= time) return i;
|
|
5392
6030
|
return -1;
|
|
@@ -5470,7 +6108,7 @@ const formatTime = (seconds)=>{
|
|
|
5470
6108
|
const minorSecond = Math.floor((seconds - integer) * 100);
|
|
5471
6109
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
5472
6110
|
};
|
|
5473
|
-
const encode = (text)=>text.toString().replaceAll('{',
|
|
6111
|
+
const encode = (text)=>text.toString().replaceAll('{', "\uFF5B").replaceAll('}', "\uFF5D").replaceAll(/\r|\n/g, '');
|
|
5474
6112
|
const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
|
|
5475
6113
|
const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
|
|
5476
6114
|
const colorCommand = (color)=>`\\c${formatColor(color)}`;
|
|
@@ -5555,7 +6193,7 @@ const info = ({ playResX, playResY }, { filename, title })=>{
|
|
|
5555
6193
|
const content = [
|
|
5556
6194
|
'[Script Info]',
|
|
5557
6195
|
`Title: ${title}`,
|
|
5558
|
-
`Original Script:
|
|
6196
|
+
`Original Script: \u{6839}\u{636E} ${filename} \u{7684}\u{5F39}\u{5E55}\u{4FE1}\u{606F}\u{FF0C}\u{7531} ${package_namespaceObject.e8} \u{751F}\u{6210}`,
|
|
5559
6197
|
'ScriptType: v4.00+',
|
|
5560
6198
|
'Collisions: Reverse',
|
|
5561
6199
|
`PlayResX: ${playResX}`,
|
|
@@ -5576,16 +6214,16 @@ function fromUint16Array(array) {
|
|
|
5576
6214
|
for (const element of array)result += String.fromCharCode(element);
|
|
5577
6215
|
return result;
|
|
5578
6216
|
}
|
|
5579
|
-
|
|
5580
|
-
const
|
|
6217
|
+
function raw_raw(list, config, context, compressType = 'brotli', baseType = 'base18384') {
|
|
6218
|
+
const raw1 = {
|
|
5581
6219
|
list,
|
|
5582
6220
|
config,
|
|
5583
6221
|
context
|
|
5584
|
-
}, rawText = JSON.stringify(
|
|
6222
|
+
}, rawText = JSON.stringify(raw1);
|
|
5585
6223
|
let compress = Buffer.from('');
|
|
5586
|
-
compress = 'brotli' === compressType ?
|
|
5587
|
-
return `;RawCompressType: ${compressType}\n;RawBaseType: ${baseType}\n;Raw: ${'base64' === baseType ? compress.toString('base64') : fromUint16Array(
|
|
5588
|
-
}
|
|
6224
|
+
compress = 'brotli' === compressType ? brotliCompressSync(rawText) : gzipSync(rawText);
|
|
6225
|
+
return `;RawCompressType: ${compressType}\n;RawBaseType: ${baseType}\n;Raw: ${'base64' === baseType ? compress.toString('base64') : fromUint16Array(external_base16384_encode(compress))}`;
|
|
6226
|
+
}
|
|
5589
6227
|
function deRaw(ass) {
|
|
5590
6228
|
const arr = ass.split('\n'), lineCompressType = arr.find((line)=>line.startsWith(';RawCompressType:')), lineBaseType = arr.find((line)=>line.startsWith(';RawBaseType:')), lineRaw = arr.find((line)=>line.startsWith(';Raw:'));
|
|
5591
6229
|
if (!lineCompressType || !lineBaseType || !lineRaw) return;
|
|
@@ -5593,9 +6231,9 @@ function deRaw(ass) {
|
|
|
5593
6231
|
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim(), baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
5594
6232
|
if (!compressTypes.includes(compressType)) compressType = 'gzip';
|
|
5595
6233
|
if (!baseTypes.includes(baseType)) baseType = 'base64';
|
|
5596
|
-
const text = lineRaw.replace(';Raw: ', '').trim(), buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(
|
|
6234
|
+
const text = lineRaw.replace(';Raw: ', '').trim(), buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, 'utf-8').toString('utf-8')));
|
|
5597
6235
|
let decompress = Buffer.from('');
|
|
5598
|
-
decompress = 'brotli' === compressType ?
|
|
6236
|
+
decompress = 'brotli' === compressType ? brotliDecompressSync(buffer) : gunzipSync(buffer);
|
|
5599
6237
|
try {
|
|
5600
6238
|
return JSON.parse(decompress.toString('utf-8'));
|
|
5601
6239
|
} catch {
|
|
@@ -5647,14 +6285,14 @@ const style = ({ fontName, fontSize, color: configColor, outlineColor, backColor
|
|
|
5647
6285
|
const ass_create = (list, rawList, config, context = {
|
|
5648
6286
|
filename: 'unknown',
|
|
5649
6287
|
title: 'unknown'
|
|
5650
|
-
})=>{
|
|
6288
|
+
}, rawConfig)=>{
|
|
5651
6289
|
const Elist = UniPool2DanmakuLists(list), ErawList = UniPool2DanmakuLists(rawList);
|
|
5652
6290
|
const content = [
|
|
5653
6291
|
info(config, context),
|
|
5654
6292
|
style(config),
|
|
5655
6293
|
ass_event(Elist, config)
|
|
5656
6294
|
];
|
|
5657
|
-
if (config.includeRaw) content.push(
|
|
6295
|
+
if (config.includeRaw) content.push(raw_raw(ErawList, config, context, rawConfig?.compressType, rawConfig?.baseType));
|
|
5658
6296
|
return `${content.join('\n\n')}\n`;
|
|
5659
6297
|
};
|
|
5660
6298
|
const ass_gen_config = (overrides = {})=>{
|
|
@@ -5699,7 +6337,7 @@ function generateASS(danmaku, options) {
|
|
|
5699
6337
|
const content = ass_create(layoutList, danmaku, config, {
|
|
5700
6338
|
filename: options?.filename || 'unknown',
|
|
5701
6339
|
title: options?.title || 'unknown'
|
|
5702
|
-
});
|
|
6340
|
+
}, options.raw);
|
|
5703
6341
|
return content;
|
|
5704
6342
|
}
|
|
5705
6343
|
function parseAssRawField(ass) {
|
|
@@ -5707,42 +6345,167 @@ function parseAssRawField(ass) {
|
|
|
5707
6345
|
if (!raw) return UniPool.create();
|
|
5708
6346
|
return DanmakuList2UniPool(raw.list);
|
|
5709
6347
|
}
|
|
5710
|
-
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
5711
|
-
const DmSegMobileReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 30);
|
|
5712
|
-
const DmWebViewReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 39);
|
|
5713
|
-
const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIt4CCgdEYW5tYWt1EgwKBEZDSUQYASABKAkSDAoERE1JRBgCIAEoCRIQCghwcm9ncmVzcxgDIAEoBRIlCgRtb2RlGAQgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuTW9kZRIQCghmb250c2l6ZRgFIAEoBRINCgVjb2xvchgGIAEoBRIQCghzZW5kZXJJRBgHIAEoCRIPCgdjb250ZW50GAggASgJEikKBWN0aW1lGAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIOCgZ3ZWlnaHQYCiABKAUSJQoEcG9vbBgLIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLlBvb2wSDAoEYXR0chgMIAMoCRIQCghwbGF0Zm9ybRgNIAEoCRIRCgRTUE1PGA4gASgJSACIAQESEgoFZXh0cmEYDyABKAlIAYgBAUIHCgVfU1BNT0IICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EANQAGIGcHJvdG8z", [
|
|
5714
|
-
file_google_protobuf_timestamp
|
|
5715
|
-
]);
|
|
5716
|
-
const DanmakuReplySchema = /*@__PURE__*/ message_messageDesc(file_danuni, 1);
|
|
5717
|
-
class UniPool {
|
|
6348
|
+
class src_UniPool {
|
|
5718
6349
|
dans;
|
|
5719
|
-
|
|
5720
|
-
constructor(dans){
|
|
6350
|
+
options;
|
|
6351
|
+
constructor(dans, options = {}){
|
|
5721
6352
|
this.dans = dans;
|
|
5722
|
-
this.
|
|
5723
|
-
|
|
5724
|
-
|
|
5725
|
-
|
|
5726
|
-
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
6353
|
+
this.options = options;
|
|
6354
|
+
if (false !== options.dedupe) options.dedupe = true;
|
|
6355
|
+
if (this.options.dedupe) this.dedupe();
|
|
6356
|
+
}
|
|
6357
|
+
async pipe(fn) {
|
|
6358
|
+
return fn(this);
|
|
6359
|
+
}
|
|
6360
|
+
pipeSync(fn) {
|
|
6361
|
+
return fn(this);
|
|
6362
|
+
}
|
|
6363
|
+
get shared() {
|
|
6364
|
+
const isShared = (key)=>this.dans.every((d)=>d[key]);
|
|
6365
|
+
return {
|
|
6366
|
+
SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
|
|
6367
|
+
senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
|
|
6368
|
+
platform: isShared('platform') ? this.dans[0].platform : void 0,
|
|
6369
|
+
pool: isShared('pool') ? this.dans[0].pool : void 0,
|
|
6370
|
+
mode: isShared('mode') ? this.dans[0].mode : void 0,
|
|
6371
|
+
color: isShared('color') ? this.dans[0].color : void 0
|
|
6372
|
+
};
|
|
6373
|
+
}
|
|
6374
|
+
get stat() {
|
|
6375
|
+
const default_stat = {
|
|
6376
|
+
SOID: [],
|
|
6377
|
+
mode: [
|
|
6378
|
+
{
|
|
6379
|
+
val: dm_gen_Modes.Normal,
|
|
6380
|
+
count: 0
|
|
6381
|
+
},
|
|
6382
|
+
{
|
|
6383
|
+
val: dm_gen_Modes.Bottom,
|
|
6384
|
+
count: 0
|
|
6385
|
+
},
|
|
6386
|
+
{
|
|
6387
|
+
val: dm_gen_Modes.Top,
|
|
6388
|
+
count: 0
|
|
6389
|
+
},
|
|
6390
|
+
{
|
|
6391
|
+
val: dm_gen_Modes.Reverse,
|
|
6392
|
+
count: 0
|
|
6393
|
+
},
|
|
6394
|
+
{
|
|
6395
|
+
val: dm_gen_Modes.Ext,
|
|
6396
|
+
count: 0
|
|
6397
|
+
}
|
|
6398
|
+
],
|
|
6399
|
+
fontsize: [],
|
|
6400
|
+
color: [],
|
|
6401
|
+
senderID: [],
|
|
6402
|
+
content: [],
|
|
6403
|
+
weight: [],
|
|
6404
|
+
pool: [
|
|
6405
|
+
{
|
|
6406
|
+
val: dm_gen_Pools.Def,
|
|
6407
|
+
count: 0
|
|
6408
|
+
},
|
|
6409
|
+
{
|
|
6410
|
+
val: dm_gen_Pools.Sub,
|
|
6411
|
+
count: 0
|
|
6412
|
+
},
|
|
6413
|
+
{
|
|
6414
|
+
val: dm_gen_Pools.Adv,
|
|
6415
|
+
count: 0
|
|
6416
|
+
},
|
|
6417
|
+
{
|
|
6418
|
+
val: dm_gen_Pools.Ix,
|
|
6419
|
+
count: 0
|
|
6420
|
+
}
|
|
6421
|
+
],
|
|
6422
|
+
platform: []
|
|
6423
|
+
};
|
|
6424
|
+
const stat = this.dans.reduce((s, d)=>{
|
|
6425
|
+
const SOID = s.SOID.find((i)=>i.val === d.SOID);
|
|
6426
|
+
if (SOID) SOID.count++;
|
|
6427
|
+
else s.SOID.push({
|
|
6428
|
+
val: d.SOID,
|
|
6429
|
+
count: 1
|
|
6430
|
+
});
|
|
6431
|
+
const mode = s.mode.find((i)=>i.val === d.mode);
|
|
6432
|
+
if (mode) mode.count++;
|
|
6433
|
+
else s.mode.push({
|
|
6434
|
+
val: d.mode,
|
|
6435
|
+
count: 1
|
|
6436
|
+
});
|
|
6437
|
+
const fontsize = s.fontsize.find((i)=>i.val === d.fontsize);
|
|
6438
|
+
if (fontsize) fontsize.count++;
|
|
6439
|
+
else s.fontsize.push({
|
|
6440
|
+
val: d.fontsize,
|
|
6441
|
+
count: 1
|
|
6442
|
+
});
|
|
6443
|
+
const color = s.color.find((i)=>i.val === d.color);
|
|
6444
|
+
if (color) color.count++;
|
|
6445
|
+
else s.color.push({
|
|
6446
|
+
val: d.color,
|
|
6447
|
+
count: 1
|
|
6448
|
+
});
|
|
6449
|
+
const senderID = s.senderID.find((i)=>i.val === d.senderID);
|
|
6450
|
+
if (senderID) senderID.count++;
|
|
6451
|
+
else s.senderID.push({
|
|
6452
|
+
val: d.senderID,
|
|
6453
|
+
count: 1
|
|
6454
|
+
});
|
|
6455
|
+
const content = s.content.find((i)=>i.val === d.content);
|
|
6456
|
+
if (content) content.count++;
|
|
6457
|
+
else s.content.push({
|
|
6458
|
+
val: d.content,
|
|
6459
|
+
count: 1
|
|
6460
|
+
});
|
|
6461
|
+
const weight = s.weight.find((i)=>i.val === d.weight);
|
|
6462
|
+
if (weight) weight.count++;
|
|
6463
|
+
else s.weight.push({
|
|
6464
|
+
val: d.weight,
|
|
6465
|
+
count: 1
|
|
6466
|
+
});
|
|
6467
|
+
const pool = s.pool.find((i)=>i.val === d.pool);
|
|
6468
|
+
if (pool) pool.count++;
|
|
6469
|
+
else s.pool.push({
|
|
6470
|
+
val: d.pool,
|
|
6471
|
+
count: 1
|
|
6472
|
+
});
|
|
6473
|
+
const platform = s.platform.find((i)=>i.val === d.platform);
|
|
6474
|
+
if (platform) platform.count++;
|
|
6475
|
+
else s.platform.push({
|
|
6476
|
+
val: d.platform,
|
|
6477
|
+
count: 1
|
|
6478
|
+
});
|
|
6479
|
+
return s;
|
|
6480
|
+
}, default_stat);
|
|
6481
|
+
return stat;
|
|
6482
|
+
}
|
|
6483
|
+
get most() {
|
|
6484
|
+
const s = this.stat;
|
|
6485
|
+
return {
|
|
6486
|
+
mode: s.mode.sort((a, b)=>b.count - a.count)[0].val,
|
|
6487
|
+
fontsize: s.fontsize.sort((a, b)=>b.count - a.count)[0].val,
|
|
6488
|
+
color: s.color.sort((a, b)=>b.count - a.count)[0].val,
|
|
6489
|
+
senderID: s.senderID.sort((a, b)=>b.count - a.count)[0].val,
|
|
6490
|
+
content: s.content.sort((a, b)=>b.count - a.count)[0].val,
|
|
6491
|
+
weight: s.weight.sort((a, b)=>b.count - a.count)[0].val,
|
|
6492
|
+
pool: s.pool.sort((a, b)=>b.count - a.count)[0].val,
|
|
6493
|
+
platform: s.platform.sort((a, b)=>b.count - a.count)[0].val
|
|
6494
|
+
};
|
|
5732
6495
|
}
|
|
5733
6496
|
static create() {
|
|
5734
|
-
return new
|
|
6497
|
+
return new src_UniPool([]);
|
|
5735
6498
|
}
|
|
5736
6499
|
assign(dans) {
|
|
5737
|
-
if (dans instanceof
|
|
6500
|
+
if (dans instanceof src_UniPool) return new src_UniPool([
|
|
5738
6501
|
...this.dans,
|
|
5739
6502
|
...dans.dans
|
|
5740
6503
|
]);
|
|
5741
|
-
if (dans instanceof UniDM) return new
|
|
6504
|
+
if (dans instanceof UniDM) return new src_UniPool([
|
|
5742
6505
|
...this.dans,
|
|
5743
6506
|
dans
|
|
5744
6507
|
]);
|
|
5745
|
-
if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new
|
|
6508
|
+
if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new src_UniPool([
|
|
5746
6509
|
...this.dans,
|
|
5747
6510
|
...dans
|
|
5748
6511
|
]);
|
|
@@ -5755,21 +6518,31 @@ class UniPool {
|
|
|
5755
6518
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
5756
6519
|
return [
|
|
5757
6520
|
...set
|
|
5758
|
-
].map((v)=>new
|
|
6521
|
+
].map((v)=>new src_UniPool(this.dans.filter((d)=>d[key] === v), {
|
|
6522
|
+
dedupe: false
|
|
6523
|
+
}));
|
|
6524
|
+
}
|
|
6525
|
+
dedupe() {
|
|
6526
|
+
const map = new Map();
|
|
6527
|
+
this.dans.forEach((d)=>map.set(d.DMID || d.toDMID(), d));
|
|
6528
|
+
this.dans = [
|
|
6529
|
+
...map.values()
|
|
6530
|
+
];
|
|
6531
|
+
this.options.dedupe = false;
|
|
5759
6532
|
}
|
|
5760
6533
|
merge(lifetime = 0) {
|
|
5761
|
-
if (!this.shared.
|
|
5762
|
-
console.error("
|
|
6534
|
+
if (!this.shared.SOID) {
|
|
6535
|
+
console.error("\u672C\u529F\u80FD\u4EC5\u652F\u6301\u540C\u5F39\u5E55\u5E93\u5185\u4F7F\u7528\uFF0C\u53EF\u5148 .split('SOID') \u5728\u5206\u522B\u4F7F\u7528");
|
|
5763
6536
|
return this;
|
|
5764
6537
|
}
|
|
5765
6538
|
if (lifetime <= 0) return this;
|
|
5766
6539
|
const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
|
|
5767
6540
|
const key = [
|
|
6541
|
+
'SOID',
|
|
5768
6542
|
'content',
|
|
5769
6543
|
'mode',
|
|
5770
6544
|
'platform',
|
|
5771
|
-
'pool'
|
|
5772
|
-
'SPMO'
|
|
6545
|
+
'pool'
|
|
5773
6546
|
].map((k)=>danmaku[k]).join('|');
|
|
5774
6547
|
const cached = cache[key];
|
|
5775
6548
|
const lastAppearTime = cached?.progress || 0;
|
|
@@ -5781,7 +6554,9 @@ class UniPool {
|
|
|
5781
6554
|
extra.danuni.merge = {
|
|
5782
6555
|
count: senders.length,
|
|
5783
6556
|
duration: danmaku.progress - cached.progress,
|
|
5784
|
-
senders
|
|
6557
|
+
senders,
|
|
6558
|
+
taolu_count: senders.length,
|
|
6559
|
+
taolu_senders: senders
|
|
5785
6560
|
};
|
|
5786
6561
|
danmaku.extraStr = JSON.stringify(extra);
|
|
5787
6562
|
cache[key] = danmaku;
|
|
@@ -5798,6 +6573,10 @@ class UniPool {
|
|
|
5798
6573
|
duration: 0,
|
|
5799
6574
|
senders: [
|
|
5800
6575
|
danmaku.senderID
|
|
6576
|
+
],
|
|
6577
|
+
taolu_count: 1,
|
|
6578
|
+
taolu_senders: [
|
|
6579
|
+
danmaku.senderID
|
|
5801
6580
|
]
|
|
5802
6581
|
};
|
|
5803
6582
|
cache[key] = danmaku;
|
|
@@ -5820,11 +6599,11 @@ class UniPool {
|
|
|
5820
6599
|
const [result, _cache, mergeObj] = mergeContext;
|
|
5821
6600
|
result.forEach((danmaku, i)=>{
|
|
5822
6601
|
const key = [
|
|
6602
|
+
'SOID',
|
|
5823
6603
|
'content',
|
|
5824
6604
|
'mode',
|
|
5825
6605
|
'platform',
|
|
5826
|
-
'pool'
|
|
5827
|
-
'SPMO'
|
|
6606
|
+
'pool'
|
|
5828
6607
|
].map((k)=>danmaku[k]).join('|');
|
|
5829
6608
|
const extra = result[i].extra, mergeData = mergeObj[key];
|
|
5830
6609
|
result[i].extraStr = JSON.stringify({
|
|
@@ -5834,20 +6613,23 @@ class UniPool {
|
|
|
5834
6613
|
merge: mergeData
|
|
5835
6614
|
}
|
|
5836
6615
|
});
|
|
5837
|
-
if (mergeData?.count) {
|
|
5838
|
-
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
5846
|
-
|
|
5847
|
-
|
|
6616
|
+
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
6617
|
+
const updatedExtra = {
|
|
6618
|
+
...extra
|
|
6619
|
+
};
|
|
6620
|
+
if (updatedExtra.danuni) {
|
|
6621
|
+
delete updatedExtra.danuni.merge;
|
|
6622
|
+
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
6623
|
+
}
|
|
6624
|
+
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? JSON.stringify(updatedExtra) : void 0;
|
|
6625
|
+
} else {
|
|
6626
|
+
result[i].senderID = 'merge[bot]@dan-any';
|
|
6627
|
+
result[i].attr ? result[i].attr.push('Protect') : result[i].attr = [
|
|
6628
|
+
'Protect'
|
|
6629
|
+
];
|
|
5848
6630
|
}
|
|
5849
6631
|
});
|
|
5850
|
-
return new
|
|
6632
|
+
return new src_UniPool(result);
|
|
5851
6633
|
}
|
|
5852
6634
|
minify() {
|
|
5853
6635
|
return this.dans.map((d)=>d.minify());
|
|
@@ -5876,12 +6658,12 @@ class UniPool {
|
|
|
5876
6658
|
}
|
|
5877
6659
|
static fromPb(bin) {
|
|
5878
6660
|
const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
|
|
5879
|
-
return new
|
|
6661
|
+
return new src_UniPool(data.danmakus.map((d)=>new UniDM(d.SOID, d.progress, d.mode, d.fontsize, d.color, d.senderID, d.content, timestampDate(d.ctime || timestampNow()), d.weight, d.pool, d.attr, d.platform, d.extra, d.DMID)));
|
|
5880
6662
|
}
|
|
5881
6663
|
toPb() {
|
|
5882
6664
|
return toBinary(DanmakuReplySchema, create(DanmakuReplySchema, {
|
|
5883
6665
|
danmakus: this.dans.map((d)=>({
|
|
5884
|
-
|
|
6666
|
+
SOID: d.SOID,
|
|
5885
6667
|
DMID: d.DMID,
|
|
5886
6668
|
progress: d.progress,
|
|
5887
6669
|
mode: d.mode,
|
|
@@ -5894,16 +6676,15 @@ class UniPool {
|
|
|
5894
6676
|
pool: d.pool,
|
|
5895
6677
|
attr: d.attr,
|
|
5896
6678
|
platform: d.platform,
|
|
5897
|
-
SPMO: d.SPMO,
|
|
5898
6679
|
extra: d.extraStr
|
|
5899
6680
|
}))
|
|
5900
6681
|
}));
|
|
5901
6682
|
}
|
|
5902
|
-
static fromBiliXML(xml
|
|
5903
|
-
const parser = new
|
|
6683
|
+
static fromBiliXML(xml) {
|
|
6684
|
+
const parser = new XMLParser({
|
|
5904
6685
|
ignoreAttributes: false
|
|
5905
6686
|
}), oriData = parser.parse(xml), dans = oriData.i.d;
|
|
5906
|
-
return new
|
|
6687
|
+
return new src_UniPool(dans.map((d)=>{
|
|
5907
6688
|
const p_str = d['@_p'], p_arr = p_str.split(',');
|
|
5908
6689
|
return UniDM.fromBili({
|
|
5909
6690
|
content: d['#text'],
|
|
@@ -5916,19 +6697,51 @@ class UniPool {
|
|
|
5916
6697
|
midHash: p_arr[6],
|
|
5917
6698
|
id: BigInt(p_arr[7]),
|
|
5918
6699
|
weight: Number.parseInt(p_arr[8])
|
|
5919
|
-
},
|
|
6700
|
+
}, BigInt(oriData.i.chatid));
|
|
5920
6701
|
}));
|
|
5921
6702
|
}
|
|
5922
|
-
|
|
6703
|
+
toBiliXML() {
|
|
6704
|
+
const genCID = (id)=>{
|
|
6705
|
+
const UniID = id_gen_UniID.fromString(id);
|
|
6706
|
+
if (UniID.domain === platform_PlatformVideoSource.Bilibili) {
|
|
6707
|
+
const cid = Number(UniID.id.replaceAll('def::', ''));
|
|
6708
|
+
if (cid) return cid;
|
|
6709
|
+
}
|
|
6710
|
+
return Number.parseInt(Buffer.from(id).toString('hex'), 16);
|
|
6711
|
+
};
|
|
6712
|
+
const builder = new XMLBuilder({
|
|
6713
|
+
ignoreAttributes: false
|
|
6714
|
+
});
|
|
6715
|
+
return builder.build({
|
|
6716
|
+
'?xml': {
|
|
6717
|
+
'@_version': '1.0',
|
|
6718
|
+
'@_encoding': 'UTF-8'
|
|
6719
|
+
},
|
|
6720
|
+
i: {
|
|
6721
|
+
chatserver: 'chat.bilibili.com',
|
|
6722
|
+
chatid: genCID(this.dans[0].SOID),
|
|
6723
|
+
mission: 0,
|
|
6724
|
+
maxlimit: this.dans.length,
|
|
6725
|
+
state: 0,
|
|
6726
|
+
real_name: 0,
|
|
6727
|
+
source: 'k-v',
|
|
6728
|
+
d: this.dans.map((dan)=>dan.toBiliXML())
|
|
6729
|
+
}
|
|
6730
|
+
});
|
|
6731
|
+
}
|
|
6732
|
+
static fromBiliGrpc(bin) {
|
|
5923
6733
|
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin)), json = data.elems;
|
|
5924
|
-
return new
|
|
6734
|
+
return new src_UniPool(json.map((d)=>UniDM.fromBili({
|
|
6735
|
+
...d,
|
|
6736
|
+
progress: d.progress / 1000
|
|
6737
|
+
})));
|
|
5925
6738
|
}
|
|
5926
|
-
static fromBiliCommandGrpc(bin
|
|
6739
|
+
static fromBiliCommandGrpc(bin) {
|
|
5927
6740
|
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin)), json = data.commandDms;
|
|
5928
|
-
return new
|
|
6741
|
+
return new src_UniPool(json.map((d)=>UniDM.fromBiliCommand(d)));
|
|
5929
6742
|
}
|
|
5930
6743
|
static fromDplayer(json, playerID, domain = 'other') {
|
|
5931
|
-
return new
|
|
6744
|
+
return new src_UniPool(json.data.map((d)=>UniDM.fromDplayer({
|
|
5932
6745
|
content: d[4],
|
|
5933
6746
|
progress: d[0],
|
|
5934
6747
|
mode: d[1],
|
|
@@ -5952,7 +6765,7 @@ class UniPool {
|
|
|
5952
6765
|
};
|
|
5953
6766
|
}
|
|
5954
6767
|
static fromArtplayer(json, playerID, domain = 'other') {
|
|
5955
|
-
return new
|
|
6768
|
+
return new src_UniPool(json.map((d)=>UniDM.fromArtplayer({
|
|
5956
6769
|
content: d.text,
|
|
5957
6770
|
progress: d.time || 0,
|
|
5958
6771
|
mode: d.mode || 0,
|
|
@@ -5973,8 +6786,8 @@ class UniPool {
|
|
|
5973
6786
|
};
|
|
5974
6787
|
});
|
|
5975
6788
|
}
|
|
5976
|
-
static fromDDPlay(json, episodeId
|
|
5977
|
-
return new
|
|
6789
|
+
static fromDDPlay(json, episodeId) {
|
|
6790
|
+
return new src_UniPool(json.comments.map((d)=>{
|
|
5978
6791
|
const p_arr = d.p.split(',');
|
|
5979
6792
|
return UniDM.fromDDplay({
|
|
5980
6793
|
cid: d.cid,
|
|
@@ -5983,7 +6796,7 @@ class UniPool {
|
|
|
5983
6796
|
mode: Number.parseInt(p_arr[1]),
|
|
5984
6797
|
progress: Number.parseFloat(p_arr[0]),
|
|
5985
6798
|
uid: p_arr[3]
|
|
5986
|
-
}, episodeId
|
|
6799
|
+
}, episodeId);
|
|
5987
6800
|
}));
|
|
5988
6801
|
}
|
|
5989
6802
|
toDDplay() {
|
|
@@ -6005,7 +6818,7 @@ class UniPool {
|
|
|
6005
6818
|
toASS(options = {
|
|
6006
6819
|
substyle: {}
|
|
6007
6820
|
}) {
|
|
6008
|
-
const fn = this.shared.
|
|
6821
|
+
const fn = this.shared.SOID;
|
|
6009
6822
|
return generateASS(this, {
|
|
6010
6823
|
filename: fn,
|
|
6011
6824
|
title: fn,
|
|
@@ -6013,4 +6826,4 @@ class UniPool {
|
|
|
6013
6826
|
});
|
|
6014
6827
|
}
|
|
6015
6828
|
}
|
|
6016
|
-
export { UniDM, dm_gen_namespaceObject as UniDMTools, id_gen_namespaceObject as UniIDTools, UniPool };
|
|
6829
|
+
export { UniDM, dm_gen_namespaceObject as UniDMTools, id_gen_namespaceObject as UniIDTools, src_UniPool as UniPool, platform_namespaceObject as platform };
|