@dan-uni/dan-any 0.9.4 → 0.9.5
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 +4 -0
- package/dist/index.js +88 -78
- package/dist/index.min.js +97 -92
- package/dist/index.umd.min.js +332 -231
- package/dist/src/ass-gen/ass/create.d.ts +1 -2
- package/dist/src/ass-gen/ass/dialogue.d.ts +1 -2
- package/dist/src/ass-gen/ass/event.d.ts +1 -2
- package/dist/src/ass-gen/ass/info.d.ts +2 -2
- package/dist/src/ass-gen/ass/style.d.ts +1 -2
- package/dist/src/ass-gen/config.d.ts +1 -2
- package/package.json +6 -6
- package/src/ass-gen/__tests__/generate.test.ts +2 -2
- package/src/ass-gen/ass/create.ts +7 -6
- package/src/ass-gen/ass/dialogue.ts +1 -2
- package/src/ass-gen/ass/event.ts +2 -3
- package/src/ass-gen/ass/info.ts +1 -2
- package/src/ass-gen/ass/raw.ts +7 -7
- package/src/ass-gen/ass/style.ts +1 -2
- package/src/ass-gen/config.ts +1 -1
- package/src/ass-gen/index.ts +7 -4
- package/src/ass-gen/util/layout.ts +1 -1
- package/src/index.ts +18 -11
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +1 -1
- package/src/utils/dm-gen.ts +28 -27
- package/types/tsconfig.tsbuildinfo +1 -1
package/README.md
CHANGED
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
- [ ] 完善使用文档
|
|
45
45
|
- [ ] 支持chpt弹幕转换为Artplayer章节(artplayer-plugin-chapter)
|
|
46
46
|
|
|
47
|
+
## Awesome Projects
|
|
48
|
+
|
|
49
|
+
- [HengXin666/BiLiBiLi_DanMu_Crawling](https://github.com/HengXin666/BiLiBiLi_DanMu_Crawling)
|
|
50
|
+
|
|
47
51
|
## License 许可证
|
|
48
52
|
|
|
49
53
|
Released under the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) 3.0.
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ __webpack_require__.d(dm_gen_namespaceObject, {
|
|
|
60
60
|
Pools: ()=>dm_gen_Pools,
|
|
61
61
|
UniDM: ()=>UniDM
|
|
62
62
|
});
|
|
63
|
-
var package_namespaceObject = JSON.parse('{"
|
|
63
|
+
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.9.5","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
64
64
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
65
65
|
const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
|
|
66
66
|
const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
|
|
@@ -216,16 +216,16 @@ var dm_gen_ExtraDanUniChapterType = /*#__PURE__*/ function(ExtraDanUniChapterTyp
|
|
|
216
216
|
}({});
|
|
217
217
|
const ExtraDanUniChapterTypeDict = {
|
|
218
218
|
chs: {
|
|
219
|
-
ch:
|
|
220
|
-
rev:
|
|
221
|
-
op:
|
|
222
|
-
int:
|
|
223
|
-
ed:
|
|
224
|
-
prvw:
|
|
225
|
-
cut:
|
|
226
|
-
dup:
|
|
227
|
-
biz:
|
|
228
|
-
promo:
|
|
219
|
+
ch: '其它片段',
|
|
220
|
+
rev: '回顾',
|
|
221
|
+
op: '片头',
|
|
222
|
+
int: '中场',
|
|
223
|
+
ed: '片尾',
|
|
224
|
+
prvw: '预告',
|
|
225
|
+
cut: '删减',
|
|
226
|
+
dup: '补档',
|
|
227
|
+
biz: '商业广告',
|
|
228
|
+
promo: '推广'
|
|
229
229
|
}
|
|
230
230
|
};
|
|
231
231
|
var dm_gen_ExtraDanUniChapterAction = /*#__PURE__*/ function(ExtraDanUniChapterAction) {
|
|
@@ -324,22 +324,27 @@ class UniDM {
|
|
|
324
324
|
minify() {
|
|
325
325
|
const def = UniDM.create();
|
|
326
326
|
const dan = UniDM.create(this);
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
if (
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
327
|
+
const shouldKeep = (key, value)=>{
|
|
328
|
+
if ('SOID' === key) return true;
|
|
329
|
+
if (null == value) return false;
|
|
330
|
+
if (value === def[key]) return false;
|
|
331
|
+
if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
|
|
332
|
+
if ('extraStr' === key && '{}' === value) return false;
|
|
333
|
+
return true;
|
|
334
|
+
};
|
|
335
|
+
const result = {
|
|
336
|
+
SOID: dan.SOID
|
|
337
|
+
};
|
|
338
|
+
for (const key of Object.keys(dan)){
|
|
339
|
+
const value = dan[key];
|
|
340
|
+
if (shouldKeep(key, value)) {
|
|
341
|
+
if ('SOID' === key) continue;
|
|
342
|
+
Reflect.set(result, key, value);
|
|
334
343
|
}
|
|
335
|
-
else delete dan[k];
|
|
336
344
|
}
|
|
337
|
-
return
|
|
345
|
+
return result;
|
|
338
346
|
}
|
|
339
|
-
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {
|
|
340
|
-
include: [],
|
|
341
|
-
exclude: []
|
|
342
|
-
}) {
|
|
347
|
+
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
343
348
|
if (!this.extra) return this;
|
|
344
349
|
{
|
|
345
350
|
if (!include) include = [];
|
|
@@ -354,16 +359,16 @@ class UniDM {
|
|
|
354
359
|
clone.content = `${this.content} x${merge.count}`;
|
|
355
360
|
} else if (danuni.chapter) {
|
|
356
361
|
const chapter = danuni.chapter;
|
|
357
|
-
if ("cut" === chapter.type) clone.content = `[
|
|
358
|
-
else if ("dup" === chapter.type) clone.content = `[
|
|
359
|
-
else clone.content = `[
|
|
362
|
+
if ("cut" === chapter.type) clone.content = `[提示]${clone.platform}源${ExtraDanUniChapterTypeDict.chs[chapter.type]}了${chapter.duration}秒`;
|
|
363
|
+
else if ("dup" === chapter.type) clone.content = `[提示(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${clone.platform}源-${chapter.duration}秒`;
|
|
364
|
+
else clone.content = `[空降(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${hh_mm_ss.fromS(clone.progress + chapter.duration)}`;
|
|
360
365
|
}
|
|
361
366
|
} else if (check('bili') && clone.extra.bili) {
|
|
362
367
|
const bili = clone.extra.bili;
|
|
363
|
-
if (7 === bili.mode && bili.adv) clone.content = `[B
|
|
368
|
+
if (7 === bili.mode && bili.adv) clone.content = `[B站高级弹幕]${dm_gen_JSON.parse(bili.adv)[4] || ''}`;
|
|
364
369
|
else if (bili.command) {
|
|
365
370
|
const command = bili.command;
|
|
366
|
-
clone.content = `[B
|
|
371
|
+
clone.content = `[B站指令弹幕]${command.content}`;
|
|
367
372
|
clone.fontsize = 36;
|
|
368
373
|
}
|
|
369
374
|
}
|
|
@@ -478,7 +483,7 @@ class UniDM {
|
|
|
478
483
|
mode,
|
|
479
484
|
senderID: senderID.toString(),
|
|
480
485
|
ctime: this.transCtime(args.ctime, 's'),
|
|
481
|
-
weight: args.weight
|
|
486
|
+
weight: args.weight || (3 === pool ? 1 : 0),
|
|
482
487
|
pool,
|
|
483
488
|
attr: DMAttrUtils.fromBin(args.attr, platform_PlatformVideoSource.Bilibili),
|
|
484
489
|
platform: platform_PlatformVideoSource.Bilibili,
|
|
@@ -852,7 +857,7 @@ const src_JSON = json_bigint({
|
|
|
852
857
|
});
|
|
853
858
|
const DanUniConvertTipTemplate = {
|
|
854
859
|
meassage: 'Converted by DanUni!',
|
|
855
|
-
version: `JS/TS ${package_namespaceObject.
|
|
860
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
856
861
|
};
|
|
857
862
|
class UniPool {
|
|
858
863
|
constructor(dans, options = {}, info = {
|
|
@@ -899,7 +904,7 @@ class UniPool {
|
|
|
899
904
|
return stats;
|
|
900
905
|
}
|
|
901
906
|
getMost(key) {
|
|
902
|
-
return this.getStat(key).
|
|
907
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
903
908
|
}
|
|
904
909
|
get most() {
|
|
905
910
|
return {
|
|
@@ -961,7 +966,7 @@ class UniPool {
|
|
|
961
966
|
}
|
|
962
967
|
merge(lifetime = 0) {
|
|
963
968
|
if (!this.shared.SOID) {
|
|
964
|
-
console.error("
|
|
969
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
965
970
|
return this;
|
|
966
971
|
}
|
|
967
972
|
if (lifetime <= 0) return this;
|
|
@@ -1070,7 +1075,7 @@ class UniPool {
|
|
|
1070
1075
|
'str',
|
|
1071
1076
|
'bin'
|
|
1072
1077
|
];
|
|
1073
|
-
const err =
|
|
1078
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
1074
1079
|
const parseJSON = (json)=>{
|
|
1075
1080
|
try {
|
|
1076
1081
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -1144,16 +1149,16 @@ class UniPool {
|
|
|
1144
1149
|
const fileStr = new TextDecoder().decode(file);
|
|
1145
1150
|
const prStr = parseStr(fileStr);
|
|
1146
1151
|
if (prStr) return prStr;
|
|
1147
|
-
errmesg = `${err}(
|
|
1152
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
1148
1153
|
} catch {}
|
|
1149
1154
|
} else if (mod.includes('json')) {
|
|
1150
1155
|
const prJSON = parseJSON(file);
|
|
1151
|
-
if (!prJSON) throw new Error(`${err}(
|
|
1156
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
1152
1157
|
return prJSON;
|
|
1153
1158
|
}
|
|
1154
1159
|
} else if (isString(file)) {
|
|
1155
1160
|
const prStr = parseStr(file);
|
|
1156
|
-
if (!prStr) throw new Error(`${err}(
|
|
1161
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
1157
1162
|
return prStr;
|
|
1158
1163
|
}
|
|
1159
1164
|
throw new Error(errmesg ?? err);
|
|
@@ -1251,7 +1256,7 @@ class UniPool {
|
|
|
1251
1256
|
};
|
|
1252
1257
|
if (options?.avoidSenderIDWithAt) {
|
|
1253
1258
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
1254
|
-
if (!ok) throw new Error(
|
|
1259
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
1255
1260
|
}
|
|
1256
1261
|
const builder = new XMLBuilder({
|
|
1257
1262
|
ignoreAttributes: false
|
|
@@ -1386,14 +1391,16 @@ class UniPool {
|
|
|
1386
1391
|
static fromASS(ass, options) {
|
|
1387
1392
|
return parseAssRawField(ass, options);
|
|
1388
1393
|
}
|
|
1389
|
-
toASS(canvasCtx, options
|
|
1390
|
-
|
|
1391
|
-
|
|
1394
|
+
toASS(canvasCtx, options) {
|
|
1395
|
+
const defaultOptions = {
|
|
1396
|
+
substyle: {}
|
|
1397
|
+
};
|
|
1398
|
+
const finalOptions = options ?? defaultOptions;
|
|
1392
1399
|
const fn = this.shared.SOID;
|
|
1393
1400
|
return generateASS(this, {
|
|
1394
1401
|
filename: fn,
|
|
1395
1402
|
title: fn,
|
|
1396
|
-
...
|
|
1403
|
+
...finalOptions
|
|
1397
1404
|
}, canvasCtx);
|
|
1398
1405
|
}
|
|
1399
1406
|
}
|
|
@@ -1505,7 +1512,7 @@ const splitGrids = ({ fontSize, padding, playResY, bottomSpace })=>{
|
|
|
1505
1512
|
};
|
|
1506
1513
|
};
|
|
1507
1514
|
const measureTextWidthConstructor = (canvasContext)=>{
|
|
1508
|
-
const supportTextMeasure = !!canvasContext.measureText(
|
|
1515
|
+
const supportTextMeasure = !!canvasContext.measureText('中');
|
|
1509
1516
|
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
1510
1517
|
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
1511
1518
|
const textWidth = canvasContext.measureText(text).width;
|
|
@@ -1583,7 +1590,7 @@ const initializeLayout = (config, canvasCtx)=>{
|
|
|
1583
1590
|
const layoutDanmaku = (inputList, config, canvasCtx)=>{
|
|
1584
1591
|
const list = [
|
|
1585
1592
|
...UniPool2DanmakuLists(inputList)
|
|
1586
|
-
].
|
|
1593
|
+
].toSorted((x, y)=>x.time - y.time);
|
|
1587
1594
|
const layout = initializeLayout(config, canvasCtx);
|
|
1588
1595
|
return DanmakuList2UniPool(list.map(layout).filter((danmaku)=>!!danmaku));
|
|
1589
1596
|
};
|
|
@@ -1597,7 +1604,7 @@ const formatTime = (seconds)=>{
|
|
|
1597
1604
|
const minorSecond = Math.floor((seconds - integer) * 100);
|
|
1598
1605
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
1599
1606
|
};
|
|
1600
|
-
const encode = (text)=>text.toString().replaceAll('{',
|
|
1607
|
+
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
1601
1608
|
const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
|
|
1602
1609
|
const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
|
|
1603
1610
|
const colorCommand = (color)=>`\\c${formatColor(color)}`;
|
|
@@ -1666,7 +1673,7 @@ const calculateDanmakuPosition = (danmaku, config)=>{
|
|
|
1666
1673
|
throw new Error(`Unknown danmaku type: ${danmaku.type}`);
|
|
1667
1674
|
}
|
|
1668
1675
|
};
|
|
1669
|
-
const
|
|
1676
|
+
const event_event = (list, config)=>{
|
|
1670
1677
|
const content = [
|
|
1671
1678
|
'[Events]',
|
|
1672
1679
|
'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text',
|
|
@@ -1677,11 +1684,11 @@ const ass_event = (list, config)=>{
|
|
|
1677
1684
|
];
|
|
1678
1685
|
return content.join('\n');
|
|
1679
1686
|
};
|
|
1680
|
-
const
|
|
1687
|
+
const info_info = ({ playResX, playResY }, { filename, title })=>{
|
|
1681
1688
|
const content = [
|
|
1682
1689
|
'[Script Info]',
|
|
1683
1690
|
`Title: ${title}`,
|
|
1684
|
-
`Original Script:
|
|
1691
|
+
`Original Script: 根据 ${filename} 的弹幕信息,由 ${package_namespaceObject.TB} 生成`,
|
|
1685
1692
|
'ScriptType: v4.00+',
|
|
1686
1693
|
'Collisions: Reverse',
|
|
1687
1694
|
`PlayResX: ${playResX}`,
|
|
@@ -1690,17 +1697,17 @@ const ass_info = ({ playResX, playResY }, { filename, title })=>{
|
|
|
1690
1697
|
];
|
|
1691
1698
|
return content.join('\n');
|
|
1692
1699
|
};
|
|
1693
|
-
const compressTypes = [
|
|
1700
|
+
const compressTypes = new Set([
|
|
1694
1701
|
'brotli',
|
|
1695
1702
|
'gzip'
|
|
1696
|
-
];
|
|
1697
|
-
const baseTypes = [
|
|
1703
|
+
]);
|
|
1704
|
+
const baseTypes = new Set([
|
|
1698
1705
|
'base64',
|
|
1699
1706
|
'base18384'
|
|
1700
|
-
];
|
|
1707
|
+
]);
|
|
1701
1708
|
function fromUint16Array(array) {
|
|
1702
1709
|
let result = '';
|
|
1703
|
-
for (const element of array)result += String.
|
|
1710
|
+
for (const element of array)result += String.fromCodePoint(element);
|
|
1704
1711
|
return result;
|
|
1705
1712
|
}
|
|
1706
1713
|
function raw_raw(list, config, context, compressType = 'brotli', baseType = 'base18384') {
|
|
@@ -1723,14 +1730,14 @@ function deRaw(ass) {
|
|
|
1723
1730
|
{
|
|
1724
1731
|
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim();
|
|
1725
1732
|
let baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
1726
|
-
if (!compressTypes.
|
|
1727
|
-
if (!baseTypes.
|
|
1733
|
+
if (!compressTypes.has(compressType)) compressType = 'gzip';
|
|
1734
|
+
if (!baseTypes.has(baseType)) baseType = 'base64';
|
|
1728
1735
|
const text = lineRaw.replace(';Raw: ', '').trim();
|
|
1729
|
-
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, '
|
|
1736
|
+
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, 'utf8').toString('utf8')));
|
|
1730
1737
|
let decompress;
|
|
1731
1738
|
decompress = 'brotli' === compressType ? brotliDecompressSync(buffer) : gunzipSync(buffer);
|
|
1732
1739
|
try {
|
|
1733
|
-
return JSON.parse(decompress.toString('
|
|
1740
|
+
return JSON.parse(decompress.toString('utf8'));
|
|
1734
1741
|
} catch {
|
|
1735
1742
|
return;
|
|
1736
1743
|
}
|
|
@@ -1777,21 +1784,22 @@ const style = ({ fontName, fontSize, color: configColor, outlineColor, backColor
|
|
|
1777
1784
|
];
|
|
1778
1785
|
return content.join('\n');
|
|
1779
1786
|
};
|
|
1780
|
-
const
|
|
1787
|
+
const default_context = {
|
|
1781
1788
|
filename: 'unknown',
|
|
1782
1789
|
title: 'unknown'
|
|
1783
|
-
}
|
|
1790
|
+
};
|
|
1791
|
+
const create_ass = (list, rawList, config, context = default_context, rawConfig)=>{
|
|
1784
1792
|
const Elist = UniPool2DanmakuLists(list);
|
|
1785
1793
|
const ErawList = UniPool2DanmakuLists(rawList);
|
|
1786
1794
|
const content = [
|
|
1787
|
-
|
|
1795
|
+
info_info(config, context),
|
|
1788
1796
|
style(config),
|
|
1789
|
-
|
|
1797
|
+
event_event(Elist, config)
|
|
1790
1798
|
];
|
|
1791
1799
|
if (config.includeRaw) content.push(raw_raw(ErawList, config, context, rawConfig?.compressType, rawConfig?.baseType));
|
|
1792
1800
|
return `${content.join('\n\n')}\n`;
|
|
1793
1801
|
};
|
|
1794
|
-
const
|
|
1802
|
+
const getConfig = (overrides = {})=>{
|
|
1795
1803
|
const defaults = {
|
|
1796
1804
|
fontSize: [
|
|
1797
1805
|
25,
|
|
@@ -1827,10 +1835,10 @@ const ass_gen_config = (overrides = {})=>{
|
|
|
1827
1835
|
return config;
|
|
1828
1836
|
};
|
|
1829
1837
|
function generateASS(danmaku, options, canvasCtx) {
|
|
1830
|
-
const config =
|
|
1838
|
+
const config = getConfig(options.substyle);
|
|
1831
1839
|
const mergedList = danmaku.merge(config.mergeIn);
|
|
1832
1840
|
const layoutList = layoutDanmaku(mergedList, config, canvasCtx);
|
|
1833
|
-
const content =
|
|
1841
|
+
const content = create_ass(layoutList, danmaku, config, {
|
|
1834
1842
|
filename: options?.filename || 'unknown',
|
|
1835
1843
|
title: options?.title || 'unknown'
|
|
1836
1844
|
}, options.raw);
|
|
@@ -1838,15 +1846,15 @@ function generateASS(danmaku, options, canvasCtx) {
|
|
|
1838
1846
|
}
|
|
1839
1847
|
function parseAssRawField(ass, options) {
|
|
1840
1848
|
const raw = deRaw(ass);
|
|
1841
|
-
if (
|
|
1842
|
-
return
|
|
1849
|
+
if (raw) return DanmakuList2UniPool(raw.list, options);
|
|
1850
|
+
return UniPool.create();
|
|
1843
1851
|
}
|
|
1844
1852
|
const src_JSON_0 = json_bigint({
|
|
1845
1853
|
useNativeBigInt: true
|
|
1846
1854
|
});
|
|
1847
1855
|
const src_DanUniConvertTipTemplate = {
|
|
1848
1856
|
meassage: 'Converted by DanUni!',
|
|
1849
|
-
version: `JS/TS ${package_namespaceObject.
|
|
1857
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
1850
1858
|
};
|
|
1851
1859
|
class src_UniPool {
|
|
1852
1860
|
constructor(dans, options = {}, info = {
|
|
@@ -1893,7 +1901,7 @@ class src_UniPool {
|
|
|
1893
1901
|
return stats;
|
|
1894
1902
|
}
|
|
1895
1903
|
getMost(key) {
|
|
1896
|
-
return this.getStat(key).
|
|
1904
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
1897
1905
|
}
|
|
1898
1906
|
get most() {
|
|
1899
1907
|
return {
|
|
@@ -1955,7 +1963,7 @@ class src_UniPool {
|
|
|
1955
1963
|
}
|
|
1956
1964
|
merge(lifetime = 0) {
|
|
1957
1965
|
if (!this.shared.SOID) {
|
|
1958
|
-
console.error("
|
|
1966
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
1959
1967
|
return this;
|
|
1960
1968
|
}
|
|
1961
1969
|
if (lifetime <= 0) return this;
|
|
@@ -2064,7 +2072,7 @@ class src_UniPool {
|
|
|
2064
2072
|
'str',
|
|
2065
2073
|
'bin'
|
|
2066
2074
|
];
|
|
2067
|
-
const err =
|
|
2075
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
2068
2076
|
const parseJSON = (json)=>{
|
|
2069
2077
|
try {
|
|
2070
2078
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -2138,16 +2146,16 @@ class src_UniPool {
|
|
|
2138
2146
|
const fileStr = new TextDecoder().decode(file);
|
|
2139
2147
|
const prStr = parseStr(fileStr);
|
|
2140
2148
|
if (prStr) return prStr;
|
|
2141
|
-
errmesg = `${err}(
|
|
2149
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
2142
2150
|
} catch {}
|
|
2143
2151
|
} else if (mod.includes('json')) {
|
|
2144
2152
|
const prJSON = parseJSON(file);
|
|
2145
|
-
if (!prJSON) throw new Error(`${err}(
|
|
2153
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
2146
2154
|
return prJSON;
|
|
2147
2155
|
}
|
|
2148
2156
|
} else if (isString(file)) {
|
|
2149
2157
|
const prStr = parseStr(file);
|
|
2150
|
-
if (!prStr) throw new Error(`${err}(
|
|
2158
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
2151
2159
|
return prStr;
|
|
2152
2160
|
}
|
|
2153
2161
|
throw new Error(errmesg ?? err);
|
|
@@ -2245,7 +2253,7 @@ class src_UniPool {
|
|
|
2245
2253
|
};
|
|
2246
2254
|
if (options?.avoidSenderIDWithAt) {
|
|
2247
2255
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
2248
|
-
if (!ok) throw new Error(
|
|
2256
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
2249
2257
|
}
|
|
2250
2258
|
const builder = new XMLBuilder({
|
|
2251
2259
|
ignoreAttributes: false
|
|
@@ -2380,14 +2388,16 @@ class src_UniPool {
|
|
|
2380
2388
|
static fromASS(ass, options) {
|
|
2381
2389
|
return parseAssRawField(ass, options);
|
|
2382
2390
|
}
|
|
2383
|
-
toASS(canvasCtx, options
|
|
2384
|
-
|
|
2385
|
-
|
|
2391
|
+
toASS(canvasCtx, options) {
|
|
2392
|
+
const defaultOptions = {
|
|
2393
|
+
substyle: {}
|
|
2394
|
+
};
|
|
2395
|
+
const finalOptions = options ?? defaultOptions;
|
|
2386
2396
|
const fn = this.shared.SOID;
|
|
2387
2397
|
return generateASS(this, {
|
|
2388
2398
|
filename: fn,
|
|
2389
2399
|
title: fn,
|
|
2390
|
-
...
|
|
2400
|
+
...finalOptions
|
|
2391
2401
|
}, canvasCtx);
|
|
2392
2402
|
}
|
|
2393
2403
|
}
|