@dan-uni/dan-any 0.9.8 → 1.0.0

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/dist/index.min.js CHANGED
@@ -8479,7 +8479,7 @@ var __webpack_modules__ = {
8479
8479
  function _isUint8Array(obj) {
8480
8480
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8481
8481
  }
8482
- var debugUtil = __webpack_require__("?14dd");
8482
+ var debugUtil = __webpack_require__("?8beb");
8483
8483
  var debug;
8484
8484
  debug = debugUtil && debugUtil.debuglog ? debugUtil.debuglog('stream') : function() {};
8485
8485
  var BufferList = __webpack_require__("../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js");
@@ -9856,7 +9856,7 @@ var __webpack_modules__ = {
9856
9856
  return ("string" === hint ? String : Number)(input);
9857
9857
  }
9858
9858
  var _require = __webpack_require__("../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js"), Buffer = _require.Buffer;
9859
- var _require2 = __webpack_require__("?fe28"), inspect = _require2.inspect;
9859
+ var _require2 = __webpack_require__("?c028"), inspect = _require2.inspect;
9860
9860
  var custom = inspect && inspect.custom || 'inspect';
9861
9861
  function copyBuffer(src, target, offset) {
9862
9862
  Buffer.prototype.copy.call(src, target, offset);
@@ -11414,8 +11414,8 @@ var __webpack_modules__ = {
11414
11414
  return tryTypedArrays(value);
11415
11415
  };
11416
11416
  },
11417
- "?fe28": function() {},
11418
- "?14dd": function() {},
11417
+ "?c028": function() {},
11418
+ "?8beb": function() {},
11419
11419
  "../../node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js": function(module, __unused_webpack_exports, __webpack_require__) {
11420
11420
  var possibleNames = __webpack_require__("../../node_modules/.pnpm/possible-typed-array-names@1.1.0/node_modules/possible-typed-array-names/index.js");
11421
11421
  var g = 'undefined' == typeof globalThis ? __webpack_require__.g : globalThis;
@@ -11495,11 +11495,11 @@ __webpack_require__.d(dm_gen_namespaceObject, {
11495
11495
  Pools: ()=>dm_gen_Pools,
11496
11496
  UniDM: ()=>UniDM
11497
11497
  });
11498
- var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.9.8","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
11498
+ var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.0","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
11499
11499
  const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
11500
11500
  const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
11501
11501
  const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
11502
- const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLCAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSEAoIcGxhdGZvcm0YDSABKAkSEgoFZXh0cmEYDiABKAlIAIgBAUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
11502
+ const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
11503
11503
  file_google_protobuf_timestamp
11504
11504
  ]);
11505
11505
  const DanmakuReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_danuni, 2);
@@ -11745,6 +11745,7 @@ class UniDM {
11745
11745
  return this.options.dmid(this);
11746
11746
  }
11747
11747
  isSameAs(dan, options) {
11748
+ if (this === dan) return true;
11748
11749
  if (4 === this.mode || 4 === dan.mode) return false;
11749
11750
  if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
11750
11751
  const isSame = (k)=>this[k] === dan[k];
@@ -11758,26 +11759,22 @@ class UniDM {
11758
11759
  return checks;
11759
11760
  }
11760
11761
  minify() {
11761
- const def = UniDM.create();
11762
- const dan = UniDM.create(this);
11763
- const shouldKeep = (key, value)=>{
11764
- if ('SOID' === key) return true;
11765
- if (null == value) return false;
11766
- if (value === def[key]) return false;
11767
- if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
11768
- if ('extraStr' === key && '{}' === value) return false;
11769
- return true;
11770
- };
11762
+ const def = new UniDM();
11771
11763
  const result = {
11772
- SOID: dan.SOID
11773
- };
11774
- for (const key of Object.keys(dan)){
11775
- const value = dan[key];
11776
- if (shouldKeep(key, value)) {
11777
- if ('SOID' === key) continue;
11778
- Reflect.set(result, key, value);
11779
- }
11780
- }
11764
+ SOID: this.SOID
11765
+ };
11766
+ if (this.progress !== def.progress) result.progress = this.progress;
11767
+ if (this.mode !== def.mode) result.mode = this.mode;
11768
+ if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
11769
+ if (this.color !== def.color) result.color = this.color;
11770
+ if (this.senderID !== def.senderID) result.senderID = this.senderID;
11771
+ if (this.content !== def.content) result.content = this.content;
11772
+ if (this.weight !== def.weight) result.weight = this.weight;
11773
+ if (this.pool !== def.pool) result.pool = this.pool;
11774
+ if (this.attr.length > 0) result.attr = this.attr;
11775
+ if (void 0 !== this.platform) result.platform = this.platform;
11776
+ if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
11777
+ if (void 0 !== this.DMID) result.DMID = this.DMID;
11781
11778
  return result;
11782
11779
  }
11783
11780
  downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
@@ -12329,46 +12326,91 @@ class UniPool {
12329
12326
  return fn(this);
12330
12327
  }
12331
12328
  get shared() {
12332
- const isShared = (key)=>this.dans.every((d)=>d[key]);
12333
- return {
12334
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
12335
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
12336
- platform: isShared('platform') ? this.dans[0].platform : void 0,
12337
- pool: isShared('pool') ? this.dans[0].pool : void 0,
12338
- mode: isShared('mode') ? this.dans[0].mode : void 0,
12339
- color: isShared('color') ? this.dans[0].color : void 0
12340
- };
12329
+ if (0 === this.dans.length) return {};
12330
+ const keys = [
12331
+ 'SOID',
12332
+ 'senderID',
12333
+ 'platform',
12334
+ 'pool',
12335
+ 'mode',
12336
+ 'color'
12337
+ ];
12338
+ const result = {};
12339
+ for (const key of keys){
12340
+ const sharedVal = this.getShared(key);
12341
+ if (void 0 !== sharedVal) result[key] = sharedVal;
12342
+ }
12343
+ return result;
12341
12344
  }
12342
12345
  getShared(key) {
12343
- const isShared = (key)=>this.dans.every((d)=>d[key]);
12344
- return isShared(key) ? this.dans[0][key] : void 0;
12346
+ if (0 === this.dans.length) return;
12347
+ const firstVal = this.dans[0][key];
12348
+ for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
12349
+ return firstVal;
12345
12350
  }
12346
12351
  getStat(key) {
12347
- const default_stat = [];
12348
- const stats = this.dans.reduce((stat, dan)=>{
12349
- const valWithCount = stat.find((i)=>i.val === dan[key]);
12350
- if (valWithCount) valWithCount.count++;
12351
- else stat.push({
12352
- val: dan[key],
12353
- count: 1
12354
- });
12355
- return stat;
12356
- }, default_stat);
12357
- return stats;
12352
+ const statMap = new Map();
12353
+ for (const dan of this.dans){
12354
+ const val = dan[key];
12355
+ statMap.set(val, (statMap.get(val) || 0) + 1);
12356
+ }
12357
+ return statMap;
12358
12358
  }
12359
12359
  getMost(key) {
12360
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
12360
+ const stats = this.getStat(key);
12361
+ if (0 === stats.size) return {
12362
+ val: void 0,
12363
+ count: 0
12364
+ };
12365
+ let mostVal;
12366
+ let maxCount = 0;
12367
+ for (const [val, count] of stats.entries())if (count > maxCount) {
12368
+ maxCount = count;
12369
+ mostVal = val;
12370
+ }
12371
+ return {
12372
+ val: mostVal,
12373
+ count: maxCount
12374
+ };
12361
12375
  }
12362
12376
  get most() {
12377
+ const keys = [
12378
+ 'mode',
12379
+ 'fontsize',
12380
+ 'color',
12381
+ 'senderID',
12382
+ 'content',
12383
+ 'weight',
12384
+ 'pool',
12385
+ 'platform'
12386
+ ];
12387
+ const statMaps = new Map();
12388
+ for (const dan of this.dans)for (const key of keys){
12389
+ if (!statMaps.has(key)) statMaps.set(key, new Map());
12390
+ const statMap = statMaps.get(key);
12391
+ const val = dan[key];
12392
+ statMap.set(val, (statMap.get(val) || 0) + 1);
12393
+ }
12394
+ const result = {};
12395
+ for (const key of keys){
12396
+ const statMap = statMaps.get(key);
12397
+ let mostVal;
12398
+ let maxCount = 0;
12399
+ for (const [val, count] of statMap.entries())if (count > maxCount) {
12400
+ maxCount = count;
12401
+ mostVal = val;
12402
+ }
12403
+ result[key] = mostVal;
12404
+ }
12363
12405
  return {
12364
- mode: this.getMost('mode').val,
12365
- fontsize: this.getMost('fontsize').val,
12366
- color: this.getMost('color').val,
12367
- senderID: this.getMost('senderID').val,
12368
- content: this.getMost('content').val,
12369
- weight: this.getMost('weight').val,
12370
- pool: this.getMost('pool').val,
12371
- platform: this.getMost('platform').val
12406
+ mode: result.mode,
12407
+ fontsize: result.fontsize,
12408
+ color: result.color,
12409
+ senderID: result.senderID,
12410
+ content: result.content,
12411
+ weight: result.weight,
12412
+ pool: result.pool,
12413
+ platform: result.platform
12372
12414
  };
12373
12415
  }
12374
12416
  static create(options) {
@@ -12396,7 +12438,7 @@ class UniPool {
12396
12438
  return this;
12397
12439
  }
12398
12440
  split(key) {
12399
- if (this.shared[key]) return [
12441
+ if (this.getShared(key)) return [
12400
12442
  this
12401
12443
  ];
12402
12444
  const set = new Set(this.dans.map((d)=>d[key]));
@@ -12418,44 +12460,27 @@ class UniPool {
12418
12460
  this.options.dedupe = false;
12419
12461
  }
12420
12462
  merge(lifetime = 0) {
12421
- if (!this.shared.SOID) {
12463
+ if (!this.getShared('SOID')) {
12422
12464
  console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
12423
12465
  return this;
12424
12466
  }
12425
12467
  if (lifetime <= 0) return this;
12426
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
12427
- const key = [
12428
- 'content',
12429
- 'mode',
12430
- 'pool',
12431
- 'platform'
12432
- ].map((k)=>danmaku[k]).join('|');
12468
+ const result = [];
12469
+ const cache = {};
12470
+ const mergeObj = {};
12471
+ for (const danmaku of this.dans){
12472
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
12433
12473
  const cached = cache[key];
12434
- const lastAppearTime = cached?.progress || 0;
12435
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
12474
+ if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
12436
12475
  skipDanuniMerge: true
12437
12476
  })) {
12438
- const senders = mergeObj[key].senders;
12439
- senders.push(danmaku.senderID);
12440
- const extra = danmaku.extra;
12441
- extra.danuni = extra.danuni || {};
12442
- extra.danuni.merge = {
12443
- count: senders.length,
12444
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
12445
- senders,
12446
- taolu_count: senders.length,
12447
- taolu_senders: senders
12448
- };
12449
- danmaku.extraStr = src_JSON.stringify(extra);
12477
+ mergeObj[key].senders.push(danmaku.senderID);
12478
+ mergeObj[key].count = mergeObj[key].senders.length;
12479
+ mergeObj[key].taolu_count = mergeObj[key].count;
12480
+ mergeObj[key].taolu_senders = mergeObj[key].senders;
12481
+ mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
12450
12482
  cache[key] = danmaku;
12451
- mergeObj[key] = extra.danuni.merge;
12452
- return [
12453
- result,
12454
- cache,
12455
- mergeObj
12456
- ];
12457
- }
12458
- {
12483
+ } else {
12459
12484
  mergeObj[key] = {
12460
12485
  count: 1,
12461
12486
  duration: 0,
@@ -12468,55 +12493,31 @@ class UniPool {
12468
12493
  ]
12469
12494
  };
12470
12495
  cache[key] = danmaku;
12471
- const extra = danmaku.extra;
12472
- extra.danuni = extra.danuni || {};
12473
- extra.danuni.merge = mergeObj[key];
12474
- danmaku.extraStr = src_JSON.stringify(extra);
12475
12496
  result.push(danmaku);
12476
- return [
12477
- result,
12478
- cache,
12479
- mergeObj
12480
- ];
12481
12497
  }
12482
- }, [
12483
- [],
12484
- {},
12485
- {}
12486
- ]);
12487
- const [result, _cache, mergeObj] = mergeContext;
12488
- result.forEach((danmaku, i)=>{
12489
- const key = [
12490
- 'content',
12491
- 'mode',
12492
- 'platform',
12493
- 'pool'
12494
- ].map((k)=>danmaku[k]).join('|');
12495
- const extra = result[i].extra;
12498
+ }
12499
+ for (const danmaku of result){
12500
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
12496
12501
  const mergeData = mergeObj[key];
12497
- result[i].extraStr = src_JSON.stringify({
12498
- ...extra,
12499
- danuni: {
12500
- ...extra.danuni,
12501
- merge: mergeData
12502
- }
12503
- });
12504
- if (mergeData?.count) if (mergeData.count <= 1) {
12505
- const updatedExtra = {
12506
- ...extra
12507
- };
12508
- if (updatedExtra.danuni) {
12509
- delete updatedExtra.danuni.merge;
12510
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
12511
- }
12512
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
12513
- } else {
12514
- result[i].senderID = 'merge[bot]@dan-any';
12515
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
12502
+ const extra = danmaku.extra;
12503
+ if (mergeData.count > 1) {
12504
+ danmaku.senderID = 'merge[bot]@dan-any';
12505
+ if (danmaku.attr) {
12506
+ if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
12507
+ } else danmaku.attr = [
12516
12508
  dm_gen_DMAttr.Protect
12517
12509
  ];
12510
+ extra.danuni = extra.danuni || {};
12511
+ extra.danuni.merge = mergeData;
12512
+ danmaku.extraStr = src_JSON.stringify(extra);
12513
+ } else {
12514
+ if (extra.danuni?.merge) {
12515
+ delete extra.danuni.merge;
12516
+ if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
12517
+ }
12518
+ danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
12518
12519
  }
12519
- });
12520
+ }
12520
12521
  return new UniPool(result, this.options, this.info);
12521
12522
  }
12522
12523
  minify() {
@@ -12539,14 +12540,18 @@ class UniPool {
12539
12540
  pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
12540
12541
  fmt: 'artplayer.json'
12541
12542
  };
12542
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
12543
+ if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
12543
12544
  pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
12544
12545
  fmt: 'ddplay.json'
12545
12546
  };
12546
- else if (json?.code == 0 && json.data && json.data.every((d)=>Array.isArray(d))) return {
12547
+ else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
12547
12548
  pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
12548
12549
  fmt: 'dplayer.json'
12549
12550
  };
12551
+ else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
12552
+ pool: this.fromBiliUp(json, options),
12553
+ fmt: 'bili.up.json'
12554
+ };
12550
12555
  } catch {}
12551
12556
  };
12552
12557
  const parseStr = (file)=>{
@@ -12714,7 +12719,7 @@ class UniPool {
12714
12719
  source: 'k-v',
12715
12720
  danuni: {
12716
12721
  ...DanUniConvertTipTemplate,
12717
- data: this.shared.SOID
12722
+ data: this.getShared('SOID')
12718
12723
  },
12719
12724
  d: this.dans.map((dan)=>dan.toBiliXML(options))
12720
12725
  }
@@ -12853,7 +12858,7 @@ class UniPool {
12853
12858
  substyle: {}
12854
12859
  };
12855
12860
  const finalOptions = options ?? defaultOptions;
12856
- const fn = this.shared.SOID;
12861
+ const fn = this.getShared('SOID');
12857
12862
  return generateASS(this, {
12858
12863
  filename: fn,
12859
12864
  title: fn,
@@ -13062,10 +13067,10 @@ const formatTime = (seconds)=>{
13062
13067
  return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
13063
13068
  };
13064
13069
  const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
13065
- const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
13066
- const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
13067
- const colorCommand = (color)=>`\\c${formatColor(color)}`;
13068
- const borderColorCommand = (color)=>`\\3c${formatColor(color)}`;
13070
+ const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
13071
+ const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
13072
+ const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
13073
+ const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
13069
13074
  const dialogue = (danmaku, config)=>{
13070
13075
  const { fontSizeType, content, time } = danmaku;
13071
13076
  const { scrollTime, fixTime } = config;
@@ -13332,46 +13337,91 @@ class src_UniPool {
13332
13337
  return fn(this);
13333
13338
  }
13334
13339
  get shared() {
13335
- const isShared = (key)=>this.dans.every((d)=>d[key]);
13336
- return {
13337
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
13338
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
13339
- platform: isShared('platform') ? this.dans[0].platform : void 0,
13340
- pool: isShared('pool') ? this.dans[0].pool : void 0,
13341
- mode: isShared('mode') ? this.dans[0].mode : void 0,
13342
- color: isShared('color') ? this.dans[0].color : void 0
13343
- };
13340
+ if (0 === this.dans.length) return {};
13341
+ const keys = [
13342
+ 'SOID',
13343
+ 'senderID',
13344
+ 'platform',
13345
+ 'pool',
13346
+ 'mode',
13347
+ 'color'
13348
+ ];
13349
+ const result = {};
13350
+ for (const key of keys){
13351
+ const sharedVal = this.getShared(key);
13352
+ if (void 0 !== sharedVal) result[key] = sharedVal;
13353
+ }
13354
+ return result;
13344
13355
  }
13345
13356
  getShared(key) {
13346
- const isShared = (key)=>this.dans.every((d)=>d[key]);
13347
- return isShared(key) ? this.dans[0][key] : void 0;
13357
+ if (0 === this.dans.length) return;
13358
+ const firstVal = this.dans[0][key];
13359
+ for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
13360
+ return firstVal;
13348
13361
  }
13349
13362
  getStat(key) {
13350
- const default_stat = [];
13351
- const stats = this.dans.reduce((stat, dan)=>{
13352
- const valWithCount = stat.find((i)=>i.val === dan[key]);
13353
- if (valWithCount) valWithCount.count++;
13354
- else stat.push({
13355
- val: dan[key],
13356
- count: 1
13357
- });
13358
- return stat;
13359
- }, default_stat);
13360
- return stats;
13363
+ const statMap = new Map();
13364
+ for (const dan of this.dans){
13365
+ const val = dan[key];
13366
+ statMap.set(val, (statMap.get(val) || 0) + 1);
13367
+ }
13368
+ return statMap;
13361
13369
  }
13362
13370
  getMost(key) {
13363
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
13371
+ const stats = this.getStat(key);
13372
+ if (0 === stats.size) return {
13373
+ val: void 0,
13374
+ count: 0
13375
+ };
13376
+ let mostVal;
13377
+ let maxCount = 0;
13378
+ for (const [val, count] of stats.entries())if (count > maxCount) {
13379
+ maxCount = count;
13380
+ mostVal = val;
13381
+ }
13382
+ return {
13383
+ val: mostVal,
13384
+ count: maxCount
13385
+ };
13364
13386
  }
13365
13387
  get most() {
13388
+ const keys = [
13389
+ 'mode',
13390
+ 'fontsize',
13391
+ 'color',
13392
+ 'senderID',
13393
+ 'content',
13394
+ 'weight',
13395
+ 'pool',
13396
+ 'platform'
13397
+ ];
13398
+ const statMaps = new Map();
13399
+ for (const dan of this.dans)for (const key of keys){
13400
+ if (!statMaps.has(key)) statMaps.set(key, new Map());
13401
+ const statMap = statMaps.get(key);
13402
+ const val = dan[key];
13403
+ statMap.set(val, (statMap.get(val) || 0) + 1);
13404
+ }
13405
+ const result = {};
13406
+ for (const key of keys){
13407
+ const statMap = statMaps.get(key);
13408
+ let mostVal;
13409
+ let maxCount = 0;
13410
+ for (const [val, count] of statMap.entries())if (count > maxCount) {
13411
+ maxCount = count;
13412
+ mostVal = val;
13413
+ }
13414
+ result[key] = mostVal;
13415
+ }
13366
13416
  return {
13367
- mode: this.getMost('mode').val,
13368
- fontsize: this.getMost('fontsize').val,
13369
- color: this.getMost('color').val,
13370
- senderID: this.getMost('senderID').val,
13371
- content: this.getMost('content').val,
13372
- weight: this.getMost('weight').val,
13373
- pool: this.getMost('pool').val,
13374
- platform: this.getMost('platform').val
13417
+ mode: result.mode,
13418
+ fontsize: result.fontsize,
13419
+ color: result.color,
13420
+ senderID: result.senderID,
13421
+ content: result.content,
13422
+ weight: result.weight,
13423
+ pool: result.pool,
13424
+ platform: result.platform
13375
13425
  };
13376
13426
  }
13377
13427
  static create(options) {
@@ -13399,7 +13449,7 @@ class src_UniPool {
13399
13449
  return this;
13400
13450
  }
13401
13451
  split(key) {
13402
- if (this.shared[key]) return [
13452
+ if (this.getShared(key)) return [
13403
13453
  this
13404
13454
  ];
13405
13455
  const set = new Set(this.dans.map((d)=>d[key]));
@@ -13421,44 +13471,27 @@ class src_UniPool {
13421
13471
  this.options.dedupe = false;
13422
13472
  }
13423
13473
  merge(lifetime = 0) {
13424
- if (!this.shared.SOID) {
13474
+ if (!this.getShared('SOID')) {
13425
13475
  console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
13426
13476
  return this;
13427
13477
  }
13428
13478
  if (lifetime <= 0) return this;
13429
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
13430
- const key = [
13431
- 'content',
13432
- 'mode',
13433
- 'pool',
13434
- 'platform'
13435
- ].map((k)=>danmaku[k]).join('|');
13479
+ const result = [];
13480
+ const cache = {};
13481
+ const mergeObj = {};
13482
+ for (const danmaku of this.dans){
13483
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
13436
13484
  const cached = cache[key];
13437
- const lastAppearTime = cached?.progress || 0;
13438
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
13485
+ if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
13439
13486
  skipDanuniMerge: true
13440
13487
  })) {
13441
- const senders = mergeObj[key].senders;
13442
- senders.push(danmaku.senderID);
13443
- const extra = danmaku.extra;
13444
- extra.danuni = extra.danuni || {};
13445
- extra.danuni.merge = {
13446
- count: senders.length,
13447
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
13448
- senders,
13449
- taolu_count: senders.length,
13450
- taolu_senders: senders
13451
- };
13452
- danmaku.extraStr = src_JSON_0.stringify(extra);
13488
+ mergeObj[key].senders.push(danmaku.senderID);
13489
+ mergeObj[key].count = mergeObj[key].senders.length;
13490
+ mergeObj[key].taolu_count = mergeObj[key].count;
13491
+ mergeObj[key].taolu_senders = mergeObj[key].senders;
13492
+ mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
13453
13493
  cache[key] = danmaku;
13454
- mergeObj[key] = extra.danuni.merge;
13455
- return [
13456
- result,
13457
- cache,
13458
- mergeObj
13459
- ];
13460
- }
13461
- {
13494
+ } else {
13462
13495
  mergeObj[key] = {
13463
13496
  count: 1,
13464
13497
  duration: 0,
@@ -13471,55 +13504,31 @@ class src_UniPool {
13471
13504
  ]
13472
13505
  };
13473
13506
  cache[key] = danmaku;
13474
- const extra = danmaku.extra;
13475
- extra.danuni = extra.danuni || {};
13476
- extra.danuni.merge = mergeObj[key];
13477
- danmaku.extraStr = src_JSON_0.stringify(extra);
13478
13507
  result.push(danmaku);
13479
- return [
13480
- result,
13481
- cache,
13482
- mergeObj
13483
- ];
13484
13508
  }
13485
- }, [
13486
- [],
13487
- {},
13488
- {}
13489
- ]);
13490
- const [result, _cache, mergeObj] = mergeContext;
13491
- result.forEach((danmaku, i)=>{
13492
- const key = [
13493
- 'content',
13494
- 'mode',
13495
- 'platform',
13496
- 'pool'
13497
- ].map((k)=>danmaku[k]).join('|');
13498
- const extra = result[i].extra;
13509
+ }
13510
+ for (const danmaku of result){
13511
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
13499
13512
  const mergeData = mergeObj[key];
13500
- result[i].extraStr = src_JSON_0.stringify({
13501
- ...extra,
13502
- danuni: {
13503
- ...extra.danuni,
13504
- merge: mergeData
13505
- }
13506
- });
13507
- if (mergeData?.count) if (mergeData.count <= 1) {
13508
- const updatedExtra = {
13509
- ...extra
13510
- };
13511
- if (updatedExtra.danuni) {
13512
- delete updatedExtra.danuni.merge;
13513
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
13514
- }
13515
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
13516
- } else {
13517
- result[i].senderID = 'merge[bot]@dan-any';
13518
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
13513
+ const extra = danmaku.extra;
13514
+ if (mergeData.count > 1) {
13515
+ danmaku.senderID = 'merge[bot]@dan-any';
13516
+ if (danmaku.attr) {
13517
+ if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
13518
+ } else danmaku.attr = [
13519
13519
  dm_gen_DMAttr.Protect
13520
13520
  ];
13521
+ extra.danuni = extra.danuni || {};
13522
+ extra.danuni.merge = mergeData;
13523
+ danmaku.extraStr = src_JSON_0.stringify(extra);
13524
+ } else {
13525
+ if (extra.danuni?.merge) {
13526
+ delete extra.danuni.merge;
13527
+ if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
13528
+ }
13529
+ danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON_0.stringify(extra) : void 0;
13521
13530
  }
13522
- });
13531
+ }
13523
13532
  return new src_UniPool(result, this.options, this.info);
13524
13533
  }
13525
13534
  minify() {
@@ -13542,14 +13551,18 @@ class src_UniPool {
13542
13551
  pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
13543
13552
  fmt: 'artplayer.json'
13544
13553
  };
13545
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
13554
+ if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
13546
13555
  pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
13547
13556
  fmt: 'ddplay.json'
13548
13557
  };
13549
- else if (json?.code == 0 && json.data && json.data.every((d)=>Array.isArray(d))) return {
13558
+ else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
13550
13559
  pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
13551
13560
  fmt: 'dplayer.json'
13552
13561
  };
13562
+ else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
13563
+ pool: this.fromBiliUp(json, options),
13564
+ fmt: 'bili.up.json'
13565
+ };
13553
13566
  } catch {}
13554
13567
  };
13555
13568
  const parseStr = (file)=>{
@@ -13717,7 +13730,7 @@ class src_UniPool {
13717
13730
  source: 'k-v',
13718
13731
  danuni: {
13719
13732
  ...src_DanUniConvertTipTemplate,
13720
- data: this.shared.SOID
13733
+ data: this.getShared('SOID')
13721
13734
  },
13722
13735
  d: this.dans.map((dan)=>dan.toBiliXML(options))
13723
13736
  }
@@ -13856,7 +13869,7 @@ class src_UniPool {
13856
13869
  substyle: {}
13857
13870
  };
13858
13871
  const finalOptions = options ?? defaultOptions;
13859
- const fn = this.shared.SOID;
13872
+ const fn = this.getShared('SOID');
13860
13873
  return generateASS(this, {
13861
13874
  filename: fn,
13862
13875
  title: fn,