@dan-uni/dan-any 0.9.4 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/index.js +129 -79
- package/dist/index.min.js +138 -93
- package/dist/index.umd.min.js +373 -232
- 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/dist/src/index.d.ts +68 -1
- package/dist/src/utils/dm-gen.d.ts +3 -0
- 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.test.ts +0 -1
- package/src/index.ts +120 -12
- 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 +38 -28
- 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.6","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
|
}
|
|
@@ -443,7 +448,9 @@ class UniDM {
|
|
|
443
448
|
bili: {
|
|
444
449
|
mode: args.mode,
|
|
445
450
|
pool: args.pool,
|
|
446
|
-
dmid: args.id
|
|
451
|
+
dmid: args.id,
|
|
452
|
+
attr: args.attr,
|
|
453
|
+
mid: args.mid
|
|
447
454
|
}
|
|
448
455
|
};
|
|
449
456
|
switch(args.mode){
|
|
@@ -478,7 +485,7 @@ class UniDM {
|
|
|
478
485
|
mode,
|
|
479
486
|
senderID: senderID.toString(),
|
|
480
487
|
ctime: this.transCtime(args.ctime, 's'),
|
|
481
|
-
weight: args.weight
|
|
488
|
+
weight: args.weight || (3 === pool ? 1 : 0),
|
|
482
489
|
pool,
|
|
483
490
|
attr: DMAttrUtils.fromBin(args.attr, platform_PlatformVideoSource.Bilibili),
|
|
484
491
|
platform: platform_PlatformVideoSource.Bilibili,
|
|
@@ -852,7 +859,7 @@ const src_JSON = json_bigint({
|
|
|
852
859
|
});
|
|
853
860
|
const DanUniConvertTipTemplate = {
|
|
854
861
|
meassage: 'Converted by DanUni!',
|
|
855
|
-
version: `JS/TS ${package_namespaceObject.
|
|
862
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
856
863
|
};
|
|
857
864
|
class UniPool {
|
|
858
865
|
constructor(dans, options = {}, info = {
|
|
@@ -899,7 +906,7 @@ class UniPool {
|
|
|
899
906
|
return stats;
|
|
900
907
|
}
|
|
901
908
|
getMost(key) {
|
|
902
|
-
return this.getStat(key).
|
|
909
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
903
910
|
}
|
|
904
911
|
get most() {
|
|
905
912
|
return {
|
|
@@ -961,7 +968,7 @@ class UniPool {
|
|
|
961
968
|
}
|
|
962
969
|
merge(lifetime = 0) {
|
|
963
970
|
if (!this.shared.SOID) {
|
|
964
|
-
console.error("
|
|
971
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
965
972
|
return this;
|
|
966
973
|
}
|
|
967
974
|
if (lifetime <= 0) return this;
|
|
@@ -1070,7 +1077,7 @@ class UniPool {
|
|
|
1070
1077
|
'str',
|
|
1071
1078
|
'bin'
|
|
1072
1079
|
];
|
|
1073
|
-
const err =
|
|
1080
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
1074
1081
|
const parseJSON = (json)=>{
|
|
1075
1082
|
try {
|
|
1076
1083
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -1144,16 +1151,16 @@ class UniPool {
|
|
|
1144
1151
|
const fileStr = new TextDecoder().decode(file);
|
|
1145
1152
|
const prStr = parseStr(fileStr);
|
|
1146
1153
|
if (prStr) return prStr;
|
|
1147
|
-
errmesg = `${err}(
|
|
1154
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
1148
1155
|
} catch {}
|
|
1149
1156
|
} else if (mod.includes('json')) {
|
|
1150
1157
|
const prJSON = parseJSON(file);
|
|
1151
|
-
if (!prJSON) throw new Error(`${err}(
|
|
1158
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
1152
1159
|
return prJSON;
|
|
1153
1160
|
}
|
|
1154
1161
|
} else if (isString(file)) {
|
|
1155
1162
|
const prStr = parseStr(file);
|
|
1156
|
-
if (!prStr) throw new Error(`${err}(
|
|
1163
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
1157
1164
|
return prStr;
|
|
1158
1165
|
}
|
|
1159
1166
|
throw new Error(errmesg ?? err);
|
|
@@ -1251,7 +1258,7 @@ class UniPool {
|
|
|
1251
1258
|
};
|
|
1252
1259
|
if (options?.avoidSenderIDWithAt) {
|
|
1253
1260
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
1254
|
-
if (!ok) throw new Error(
|
|
1261
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
1255
1262
|
}
|
|
1256
1263
|
const builder = new XMLBuilder({
|
|
1257
1264
|
ignoreAttributes: false
|
|
@@ -1290,6 +1297,25 @@ class UniPool {
|
|
|
1290
1297
|
const json = data.commandDms;
|
|
1291
1298
|
return new UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
|
|
1292
1299
|
}
|
|
1300
|
+
static fromBiliUp(json, options) {
|
|
1301
|
+
return new UniPool(json.data.result.map((d)=>{
|
|
1302
|
+
const attrBin = d.attrs ? d.attrs.split(',').map(Number).reduce((bin, bitPosition)=>bin | 1 << bitPosition - 1, 0) : 0;
|
|
1303
|
+
return UniDM.fromBili({
|
|
1304
|
+
id: BigInt(d.id_str || d.id),
|
|
1305
|
+
progress: d.progress / 1000,
|
|
1306
|
+
mode: d.mode,
|
|
1307
|
+
fontsize: d.fontsize,
|
|
1308
|
+
color: Number.parseInt(d.color, 16),
|
|
1309
|
+
mid: d.mid,
|
|
1310
|
+
midHash: d.mid_hash,
|
|
1311
|
+
content: d.msg,
|
|
1312
|
+
ctime: BigInt(d.ctime),
|
|
1313
|
+
pool: d.pool,
|
|
1314
|
+
attr: attrBin,
|
|
1315
|
+
oid: BigInt(d.oid)
|
|
1316
|
+
}, BigInt(d.oid), options);
|
|
1317
|
+
}), options);
|
|
1318
|
+
}
|
|
1293
1319
|
static fromDplayer(json, playerID, domain = 'other', options) {
|
|
1294
1320
|
return new UniPool(json.data.map((d)=>UniDM.fromDplayer({
|
|
1295
1321
|
content: d[4],
|
|
@@ -1386,14 +1412,16 @@ class UniPool {
|
|
|
1386
1412
|
static fromASS(ass, options) {
|
|
1387
1413
|
return parseAssRawField(ass, options);
|
|
1388
1414
|
}
|
|
1389
|
-
toASS(canvasCtx, options
|
|
1390
|
-
|
|
1391
|
-
|
|
1415
|
+
toASS(canvasCtx, options) {
|
|
1416
|
+
const defaultOptions = {
|
|
1417
|
+
substyle: {}
|
|
1418
|
+
};
|
|
1419
|
+
const finalOptions = options ?? defaultOptions;
|
|
1392
1420
|
const fn = this.shared.SOID;
|
|
1393
1421
|
return generateASS(this, {
|
|
1394
1422
|
filename: fn,
|
|
1395
1423
|
title: fn,
|
|
1396
|
-
...
|
|
1424
|
+
...finalOptions
|
|
1397
1425
|
}, canvasCtx);
|
|
1398
1426
|
}
|
|
1399
1427
|
}
|
|
@@ -1505,7 +1533,7 @@ const splitGrids = ({ fontSize, padding, playResY, bottomSpace })=>{
|
|
|
1505
1533
|
};
|
|
1506
1534
|
};
|
|
1507
1535
|
const measureTextWidthConstructor = (canvasContext)=>{
|
|
1508
|
-
const supportTextMeasure = !!canvasContext.measureText(
|
|
1536
|
+
const supportTextMeasure = !!canvasContext.measureText('中');
|
|
1509
1537
|
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
1510
1538
|
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
1511
1539
|
const textWidth = canvasContext.measureText(text).width;
|
|
@@ -1583,7 +1611,7 @@ const initializeLayout = (config, canvasCtx)=>{
|
|
|
1583
1611
|
const layoutDanmaku = (inputList, config, canvasCtx)=>{
|
|
1584
1612
|
const list = [
|
|
1585
1613
|
...UniPool2DanmakuLists(inputList)
|
|
1586
|
-
].
|
|
1614
|
+
].toSorted((x, y)=>x.time - y.time);
|
|
1587
1615
|
const layout = initializeLayout(config, canvasCtx);
|
|
1588
1616
|
return DanmakuList2UniPool(list.map(layout).filter((danmaku)=>!!danmaku));
|
|
1589
1617
|
};
|
|
@@ -1597,7 +1625,7 @@ const formatTime = (seconds)=>{
|
|
|
1597
1625
|
const minorSecond = Math.floor((seconds - integer) * 100);
|
|
1598
1626
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
1599
1627
|
};
|
|
1600
|
-
const encode = (text)=>text.toString().replaceAll('{',
|
|
1628
|
+
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
1601
1629
|
const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
|
|
1602
1630
|
const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
|
|
1603
1631
|
const colorCommand = (color)=>`\\c${formatColor(color)}`;
|
|
@@ -1666,7 +1694,7 @@ const calculateDanmakuPosition = (danmaku, config)=>{
|
|
|
1666
1694
|
throw new Error(`Unknown danmaku type: ${danmaku.type}`);
|
|
1667
1695
|
}
|
|
1668
1696
|
};
|
|
1669
|
-
const
|
|
1697
|
+
const event_event = (list, config)=>{
|
|
1670
1698
|
const content = [
|
|
1671
1699
|
'[Events]',
|
|
1672
1700
|
'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text',
|
|
@@ -1677,11 +1705,11 @@ const ass_event = (list, config)=>{
|
|
|
1677
1705
|
];
|
|
1678
1706
|
return content.join('\n');
|
|
1679
1707
|
};
|
|
1680
|
-
const
|
|
1708
|
+
const info_info = ({ playResX, playResY }, { filename, title })=>{
|
|
1681
1709
|
const content = [
|
|
1682
1710
|
'[Script Info]',
|
|
1683
1711
|
`Title: ${title}`,
|
|
1684
|
-
`Original Script:
|
|
1712
|
+
`Original Script: 根据 ${filename} 的弹幕信息,由 ${package_namespaceObject.TB} 生成`,
|
|
1685
1713
|
'ScriptType: v4.00+',
|
|
1686
1714
|
'Collisions: Reverse',
|
|
1687
1715
|
`PlayResX: ${playResX}`,
|
|
@@ -1690,17 +1718,17 @@ const ass_info = ({ playResX, playResY }, { filename, title })=>{
|
|
|
1690
1718
|
];
|
|
1691
1719
|
return content.join('\n');
|
|
1692
1720
|
};
|
|
1693
|
-
const compressTypes = [
|
|
1721
|
+
const compressTypes = new Set([
|
|
1694
1722
|
'brotli',
|
|
1695
1723
|
'gzip'
|
|
1696
|
-
];
|
|
1697
|
-
const baseTypes = [
|
|
1724
|
+
]);
|
|
1725
|
+
const baseTypes = new Set([
|
|
1698
1726
|
'base64',
|
|
1699
1727
|
'base18384'
|
|
1700
|
-
];
|
|
1728
|
+
]);
|
|
1701
1729
|
function fromUint16Array(array) {
|
|
1702
1730
|
let result = '';
|
|
1703
|
-
for (const element of array)result += String.
|
|
1731
|
+
for (const element of array)result += String.fromCodePoint(element);
|
|
1704
1732
|
return result;
|
|
1705
1733
|
}
|
|
1706
1734
|
function raw_raw(list, config, context, compressType = 'brotli', baseType = 'base18384') {
|
|
@@ -1723,14 +1751,14 @@ function deRaw(ass) {
|
|
|
1723
1751
|
{
|
|
1724
1752
|
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim();
|
|
1725
1753
|
let baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
1726
|
-
if (!compressTypes.
|
|
1727
|
-
if (!baseTypes.
|
|
1754
|
+
if (!compressTypes.has(compressType)) compressType = 'gzip';
|
|
1755
|
+
if (!baseTypes.has(baseType)) baseType = 'base64';
|
|
1728
1756
|
const text = lineRaw.replace(';Raw: ', '').trim();
|
|
1729
|
-
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, '
|
|
1757
|
+
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, 'utf8').toString('utf8')));
|
|
1730
1758
|
let decompress;
|
|
1731
1759
|
decompress = 'brotli' === compressType ? brotliDecompressSync(buffer) : gunzipSync(buffer);
|
|
1732
1760
|
try {
|
|
1733
|
-
return JSON.parse(decompress.toString('
|
|
1761
|
+
return JSON.parse(decompress.toString('utf8'));
|
|
1734
1762
|
} catch {
|
|
1735
1763
|
return;
|
|
1736
1764
|
}
|
|
@@ -1777,21 +1805,22 @@ const style = ({ fontName, fontSize, color: configColor, outlineColor, backColor
|
|
|
1777
1805
|
];
|
|
1778
1806
|
return content.join('\n');
|
|
1779
1807
|
};
|
|
1780
|
-
const
|
|
1808
|
+
const default_context = {
|
|
1781
1809
|
filename: 'unknown',
|
|
1782
1810
|
title: 'unknown'
|
|
1783
|
-
}
|
|
1811
|
+
};
|
|
1812
|
+
const create_ass = (list, rawList, config, context = default_context, rawConfig)=>{
|
|
1784
1813
|
const Elist = UniPool2DanmakuLists(list);
|
|
1785
1814
|
const ErawList = UniPool2DanmakuLists(rawList);
|
|
1786
1815
|
const content = [
|
|
1787
|
-
|
|
1816
|
+
info_info(config, context),
|
|
1788
1817
|
style(config),
|
|
1789
|
-
|
|
1818
|
+
event_event(Elist, config)
|
|
1790
1819
|
];
|
|
1791
1820
|
if (config.includeRaw) content.push(raw_raw(ErawList, config, context, rawConfig?.compressType, rawConfig?.baseType));
|
|
1792
1821
|
return `${content.join('\n\n')}\n`;
|
|
1793
1822
|
};
|
|
1794
|
-
const
|
|
1823
|
+
const getConfig = (overrides = {})=>{
|
|
1795
1824
|
const defaults = {
|
|
1796
1825
|
fontSize: [
|
|
1797
1826
|
25,
|
|
@@ -1827,10 +1856,10 @@ const ass_gen_config = (overrides = {})=>{
|
|
|
1827
1856
|
return config;
|
|
1828
1857
|
};
|
|
1829
1858
|
function generateASS(danmaku, options, canvasCtx) {
|
|
1830
|
-
const config =
|
|
1859
|
+
const config = getConfig(options.substyle);
|
|
1831
1860
|
const mergedList = danmaku.merge(config.mergeIn);
|
|
1832
1861
|
const layoutList = layoutDanmaku(mergedList, config, canvasCtx);
|
|
1833
|
-
const content =
|
|
1862
|
+
const content = create_ass(layoutList, danmaku, config, {
|
|
1834
1863
|
filename: options?.filename || 'unknown',
|
|
1835
1864
|
title: options?.title || 'unknown'
|
|
1836
1865
|
}, options.raw);
|
|
@@ -1838,15 +1867,15 @@ function generateASS(danmaku, options, canvasCtx) {
|
|
|
1838
1867
|
}
|
|
1839
1868
|
function parseAssRawField(ass, options) {
|
|
1840
1869
|
const raw = deRaw(ass);
|
|
1841
|
-
if (
|
|
1842
|
-
return
|
|
1870
|
+
if (raw) return DanmakuList2UniPool(raw.list, options);
|
|
1871
|
+
return UniPool.create();
|
|
1843
1872
|
}
|
|
1844
1873
|
const src_JSON_0 = json_bigint({
|
|
1845
1874
|
useNativeBigInt: true
|
|
1846
1875
|
});
|
|
1847
1876
|
const src_DanUniConvertTipTemplate = {
|
|
1848
1877
|
meassage: 'Converted by DanUni!',
|
|
1849
|
-
version: `JS/TS ${package_namespaceObject.
|
|
1878
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
1850
1879
|
};
|
|
1851
1880
|
class src_UniPool {
|
|
1852
1881
|
constructor(dans, options = {}, info = {
|
|
@@ -1893,7 +1922,7 @@ class src_UniPool {
|
|
|
1893
1922
|
return stats;
|
|
1894
1923
|
}
|
|
1895
1924
|
getMost(key) {
|
|
1896
|
-
return this.getStat(key).
|
|
1925
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
1897
1926
|
}
|
|
1898
1927
|
get most() {
|
|
1899
1928
|
return {
|
|
@@ -1955,7 +1984,7 @@ class src_UniPool {
|
|
|
1955
1984
|
}
|
|
1956
1985
|
merge(lifetime = 0) {
|
|
1957
1986
|
if (!this.shared.SOID) {
|
|
1958
|
-
console.error("
|
|
1987
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
1959
1988
|
return this;
|
|
1960
1989
|
}
|
|
1961
1990
|
if (lifetime <= 0) return this;
|
|
@@ -2064,7 +2093,7 @@ class src_UniPool {
|
|
|
2064
2093
|
'str',
|
|
2065
2094
|
'bin'
|
|
2066
2095
|
];
|
|
2067
|
-
const err =
|
|
2096
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
2068
2097
|
const parseJSON = (json)=>{
|
|
2069
2098
|
try {
|
|
2070
2099
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -2138,16 +2167,16 @@ class src_UniPool {
|
|
|
2138
2167
|
const fileStr = new TextDecoder().decode(file);
|
|
2139
2168
|
const prStr = parseStr(fileStr);
|
|
2140
2169
|
if (prStr) return prStr;
|
|
2141
|
-
errmesg = `${err}(
|
|
2170
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
2142
2171
|
} catch {}
|
|
2143
2172
|
} else if (mod.includes('json')) {
|
|
2144
2173
|
const prJSON = parseJSON(file);
|
|
2145
|
-
if (!prJSON) throw new Error(`${err}(
|
|
2174
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
2146
2175
|
return prJSON;
|
|
2147
2176
|
}
|
|
2148
2177
|
} else if (isString(file)) {
|
|
2149
2178
|
const prStr = parseStr(file);
|
|
2150
|
-
if (!prStr) throw new Error(`${err}(
|
|
2179
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
2151
2180
|
return prStr;
|
|
2152
2181
|
}
|
|
2153
2182
|
throw new Error(errmesg ?? err);
|
|
@@ -2245,7 +2274,7 @@ class src_UniPool {
|
|
|
2245
2274
|
};
|
|
2246
2275
|
if (options?.avoidSenderIDWithAt) {
|
|
2247
2276
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
2248
|
-
if (!ok) throw new Error(
|
|
2277
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
2249
2278
|
}
|
|
2250
2279
|
const builder = new XMLBuilder({
|
|
2251
2280
|
ignoreAttributes: false
|
|
@@ -2284,6 +2313,25 @@ class src_UniPool {
|
|
|
2284
2313
|
const json = data.commandDms;
|
|
2285
2314
|
return new src_UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
|
|
2286
2315
|
}
|
|
2316
|
+
static fromBiliUp(json, options) {
|
|
2317
|
+
return new src_UniPool(json.data.result.map((d)=>{
|
|
2318
|
+
const attrBin = d.attrs ? d.attrs.split(',').map(Number).reduce((bin, bitPosition)=>bin | 1 << bitPosition - 1, 0) : 0;
|
|
2319
|
+
return UniDM.fromBili({
|
|
2320
|
+
id: BigInt(d.id_str || d.id),
|
|
2321
|
+
progress: d.progress / 1000,
|
|
2322
|
+
mode: d.mode,
|
|
2323
|
+
fontsize: d.fontsize,
|
|
2324
|
+
color: Number.parseInt(d.color, 16),
|
|
2325
|
+
mid: d.mid,
|
|
2326
|
+
midHash: d.mid_hash,
|
|
2327
|
+
content: d.msg,
|
|
2328
|
+
ctime: BigInt(d.ctime),
|
|
2329
|
+
pool: d.pool,
|
|
2330
|
+
attr: attrBin,
|
|
2331
|
+
oid: BigInt(d.oid)
|
|
2332
|
+
}, BigInt(d.oid), options);
|
|
2333
|
+
}), options);
|
|
2334
|
+
}
|
|
2287
2335
|
static fromDplayer(json, playerID, domain = 'other', options) {
|
|
2288
2336
|
return new src_UniPool(json.data.map((d)=>UniDM.fromDplayer({
|
|
2289
2337
|
content: d[4],
|
|
@@ -2380,14 +2428,16 @@ class src_UniPool {
|
|
|
2380
2428
|
static fromASS(ass, options) {
|
|
2381
2429
|
return parseAssRawField(ass, options);
|
|
2382
2430
|
}
|
|
2383
|
-
toASS(canvasCtx, options
|
|
2384
|
-
|
|
2385
|
-
|
|
2431
|
+
toASS(canvasCtx, options) {
|
|
2432
|
+
const defaultOptions = {
|
|
2433
|
+
substyle: {}
|
|
2434
|
+
};
|
|
2435
|
+
const finalOptions = options ?? defaultOptions;
|
|
2386
2436
|
const fn = this.shared.SOID;
|
|
2387
2437
|
return generateASS(this, {
|
|
2388
2438
|
filename: fn,
|
|
2389
2439
|
title: fn,
|
|
2390
|
-
...
|
|
2440
|
+
...finalOptions
|
|
2391
2441
|
}, canvasCtx);
|
|
2392
2442
|
}
|
|
2393
2443
|
}
|