@openmouse/protocol 0.1.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.
Files changed (547) hide show
  1. package/CONTRIBUTING.md +167 -0
  2. package/README.md +89 -0
  3. package/dist/asus/index.d.ts +52 -0
  4. package/dist/asus/index.d.ts.map +1 -0
  5. package/dist/asus/index.js +248 -0
  6. package/dist/asus/index.js.map +1 -0
  7. package/dist/atk/index.d.ts +200 -0
  8. package/dist/atk/index.d.ts.map +1 -0
  9. package/dist/atk/index.js +480 -0
  10. package/dist/atk/index.js.map +1 -0
  11. package/dist/bitmouse/index.d.ts +284 -0
  12. package/dist/bitmouse/index.d.ts.map +1 -0
  13. package/dist/bitmouse/index.js +396 -0
  14. package/dist/bitmouse/index.js.map +1 -0
  15. package/dist/compx/codec.d.ts +31 -0
  16. package/dist/compx/codec.d.ts.map +1 -0
  17. package/dist/compx/codec.js +50 -0
  18. package/dist/compx/codec.js.map +1 -0
  19. package/dist/corsair/index.d.ts +147 -0
  20. package/dist/corsair/index.d.ts.map +1 -0
  21. package/dist/corsair/index.js +223 -0
  22. package/dist/corsair/index.js.map +1 -0
  23. package/dist/dareu/index.d.ts +136 -0
  24. package/dist/dareu/index.d.ts.map +1 -0
  25. package/dist/dareu/index.js +344 -0
  26. package/dist/dareu/index.js.map +1 -0
  27. package/dist/drivers/asus/hid.d.ts +29 -0
  28. package/dist/drivers/asus/hid.d.ts.map +1 -0
  29. package/dist/drivers/asus/hid.js +419 -0
  30. package/dist/drivers/asus/hid.js.map +1 -0
  31. package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
  32. package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
  33. package/dist/drivers/atk/bitmouse-hid.js +501 -0
  34. package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
  35. package/dist/drivers/atk/hid.d.ts +163 -0
  36. package/dist/drivers/atk/hid.d.ts.map +1 -0
  37. package/dist/drivers/atk/hid.js +1368 -0
  38. package/dist/drivers/atk/hid.js.map +1 -0
  39. package/dist/drivers/atk/products.d.ts +13 -0
  40. package/dist/drivers/atk/products.d.ts.map +1 -0
  41. package/dist/drivers/atk/products.js +13 -0
  42. package/dist/drivers/atk/products.js.map +1 -0
  43. package/dist/drivers/attackshark/dpi.d.ts +41 -0
  44. package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
  45. package/dist/drivers/attackshark/dpi.js +215 -0
  46. package/dist/drivers/attackshark/dpi.js.map +1 -0
  47. package/dist/drivers/attackshark/hid.d.ts +124 -0
  48. package/dist/drivers/attackshark/hid.d.ts.map +1 -0
  49. package/dist/drivers/attackshark/hid.js +728 -0
  50. package/dist/drivers/attackshark/hid.js.map +1 -0
  51. package/dist/drivers/corsair/hid.d.ts +70 -0
  52. package/dist/drivers/corsair/hid.d.ts.map +1 -0
  53. package/dist/drivers/corsair/hid.js +414 -0
  54. package/dist/drivers/corsair/hid.js.map +1 -0
  55. package/dist/drivers/dareu/hid.d.ts +59 -0
  56. package/dist/drivers/dareu/hid.d.ts.map +1 -0
  57. package/dist/drivers/dareu/hid.js +478 -0
  58. package/dist/drivers/dareu/hid.js.map +1 -0
  59. package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
  60. package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
  61. package/dist/drivers/endgame/egg-op1-hid.js +605 -0
  62. package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
  63. package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
  64. package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
  65. package/dist/drivers/endgame/egg-we-control.js +87 -0
  66. package/dist/drivers/endgame/egg-we-control.js.map +1 -0
  67. package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
  68. package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
  69. package/dist/drivers/endgame/egg-we-hid.js +514 -0
  70. package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
  71. package/dist/drivers/fantech/hid.d.ts +106 -0
  72. package/dist/drivers/fantech/hid.d.ts.map +1 -0
  73. package/dist/drivers/fantech/hid.js +295 -0
  74. package/dist/drivers/fantech/hid.js.map +1 -0
  75. package/dist/drivers/finalmouse/hid.d.ts +31 -0
  76. package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
  77. package/dist/drivers/finalmouse/hid.js +181 -0
  78. package/dist/drivers/finalmouse/hid.js.map +1 -0
  79. package/dist/drivers/gearhub/hid.d.ts +191 -0
  80. package/dist/drivers/gearhub/hid.d.ts.map +1 -0
  81. package/dist/drivers/gearhub/hid.js +542 -0
  82. package/dist/drivers/gearhub/hid.js.map +1 -0
  83. package/dist/drivers/glorious/classic-hid.d.ts +62 -0
  84. package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
  85. package/dist/drivers/glorious/classic-hid.js +326 -0
  86. package/dist/drivers/glorious/classic-hid.js.map +1 -0
  87. package/dist/drivers/glorious/hid.d.ts +39 -0
  88. package/dist/drivers/glorious/hid.d.ts.map +1 -0
  89. package/dist/drivers/glorious/hid.js +203 -0
  90. package/dist/drivers/glorious/hid.js.map +1 -0
  91. package/dist/drivers/gwolves/hid.d.ts +27 -0
  92. package/dist/drivers/gwolves/hid.d.ts.map +1 -0
  93. package/dist/drivers/gwolves/hid.js +225 -0
  94. package/dist/drivers/gwolves/hid.js.map +1 -0
  95. package/dist/drivers/gwolves/products.d.ts +17 -0
  96. package/dist/drivers/gwolves/products.d.ts.map +1 -0
  97. package/dist/drivers/gwolves/products.js +58 -0
  98. package/dist/drivers/gwolves/products.js.map +1 -0
  99. package/dist/drivers/hyperx/hid.d.ts +59 -0
  100. package/dist/drivers/hyperx/hid.d.ts.map +1 -0
  101. package/dist/drivers/hyperx/hid.js +229 -0
  102. package/dist/drivers/hyperx/hid.js.map +1 -0
  103. package/dist/drivers/incott/hid.d.ts +513 -0
  104. package/dist/drivers/incott/hid.d.ts.map +1 -0
  105. package/dist/drivers/incott/hid.js +1173 -0
  106. package/dist/drivers/incott/hid.js.map +1 -0
  107. package/dist/drivers/index.d.ts +5 -0
  108. package/dist/drivers/index.d.ts.map +1 -0
  109. package/dist/drivers/index.js +5 -0
  110. package/dist/drivers/index.js.map +1 -0
  111. package/dist/drivers/keychron/m6-hid.d.ts +81 -0
  112. package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
  113. package/dist/drivers/keychron/m6-hid.js +486 -0
  114. package/dist/drivers/keychron/m6-hid.js.map +1 -0
  115. package/dist/drivers/keychron/nape-hid.d.ts +60 -0
  116. package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
  117. package/dist/drivers/keychron/nape-hid.js +432 -0
  118. package/dist/drivers/keychron/nape-hid.js.map +1 -0
  119. package/dist/drivers/ksnake/hid.d.ts +74 -0
  120. package/dist/drivers/ksnake/hid.d.ts.map +1 -0
  121. package/dist/drivers/ksnake/hid.js +368 -0
  122. package/dist/drivers/ksnake/hid.js.map +1 -0
  123. package/dist/drivers/lamzu/hid.d.ts +58 -0
  124. package/dist/drivers/lamzu/hid.d.ts.map +1 -0
  125. package/dist/drivers/lamzu/hid.js +414 -0
  126. package/dist/drivers/lamzu/hid.js.map +1 -0
  127. package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
  128. package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
  129. package/dist/drivers/lamzu-atlantis/hid.js +587 -0
  130. package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
  131. package/dist/drivers/logitech/bolt.d.ts +41 -0
  132. package/dist/drivers/logitech/bolt.d.ts.map +1 -0
  133. package/dist/drivers/logitech/bolt.js +105 -0
  134. package/dist/drivers/logitech/bolt.js.map +1 -0
  135. package/dist/drivers/logitech/hidpp.d.ts +525 -0
  136. package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
  137. package/dist/drivers/logitech/hidpp.js +2774 -0
  138. package/dist/drivers/logitech/hidpp.js.map +1 -0
  139. package/dist/drivers/logitech/mode-status.d.ts +53 -0
  140. package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
  141. package/dist/drivers/logitech/mode-status.js +52 -0
  142. package/dist/drivers/logitech/mode-status.js.map +1 -0
  143. package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
  144. package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
  145. package/dist/drivers/logitech/onboard-profiles.js +965 -0
  146. package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
  147. package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
  148. package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
  149. package/dist/drivers/logitech/rgb-effects.js +93 -0
  150. package/dist/drivers/logitech/rgb-effects.js.map +1 -0
  151. package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
  152. package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
  153. package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
  154. package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
  155. package/dist/drivers/mchose/dock-hid.d.ts +26 -0
  156. package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
  157. package/dist/drivers/mchose/dock-hid.js +176 -0
  158. package/dist/drivers/mchose/dock-hid.js.map +1 -0
  159. package/dist/drivers/mchose/hid.d.ts +118 -0
  160. package/dist/drivers/mchose/hid.d.ts.map +1 -0
  161. package/dist/drivers/mchose/hid.js +550 -0
  162. package/dist/drivers/mchose/hid.js.map +1 -0
  163. package/dist/drivers/mchose/v3-hid.d.ts +109 -0
  164. package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
  165. package/dist/drivers/mchose/v3-hid.js +572 -0
  166. package/dist/drivers/mchose/v3-hid.js.map +1 -0
  167. package/dist/drivers/microsoft/hid.d.ts +25 -0
  168. package/dist/drivers/microsoft/hid.d.ts.map +1 -0
  169. package/dist/drivers/microsoft/hid.js +247 -0
  170. package/dist/drivers/microsoft/hid.js.map +1 -0
  171. package/dist/drivers/moddo/hid.d.ts +31 -0
  172. package/dist/drivers/moddo/hid.d.ts.map +1 -0
  173. package/dist/drivers/moddo/hid.js +154 -0
  174. package/dist/drivers/moddo/hid.js.map +1 -0
  175. package/dist/drivers/mouse-types.d.ts +388 -0
  176. package/dist/drivers/mouse-types.d.ts.map +1 -0
  177. package/dist/drivers/mouse-types.js +2 -0
  178. package/dist/drivers/mouse-types.js.map +1 -0
  179. package/dist/drivers/ninjutso/hid.d.ts +62 -0
  180. package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
  181. package/dist/drivers/ninjutso/hid.js +680 -0
  182. package/dist/drivers/ninjutso/hid.js.map +1 -0
  183. package/dist/drivers/orbital/hid.d.ts +24 -0
  184. package/dist/drivers/orbital/hid.d.ts.map +1 -0
  185. package/dist/drivers/orbital/hid.js +85 -0
  186. package/dist/drivers/orbital/hid.js.map +1 -0
  187. package/dist/drivers/orbital/host-protocol.d.ts +59 -0
  188. package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
  189. package/dist/drivers/orbital/host-protocol.js +884 -0
  190. package/dist/drivers/orbital/host-protocol.js.map +1 -0
  191. package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
  192. package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
  193. package/dist/drivers/pulsar/pulsar-hid.js +381 -0
  194. package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
  195. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
  196. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
  197. package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
  198. package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
  199. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
  200. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
  201. package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
  202. package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
  203. package/dist/drivers/rawm/hid.d.ts +29 -0
  204. package/dist/drivers/rawm/hid.d.ts.map +1 -0
  205. package/dist/drivers/rawm/hid.js +210 -0
  206. package/dist/drivers/rawm/hid.js.map +1 -0
  207. package/dist/drivers/razer/cobra-hid.d.ts +63 -0
  208. package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
  209. package/dist/drivers/razer/cobra-hid.js +282 -0
  210. package/dist/drivers/razer/cobra-hid.js.map +1 -0
  211. package/dist/drivers/razer/hid-open.d.ts +13 -0
  212. package/dist/drivers/razer/hid-open.d.ts.map +1 -0
  213. package/dist/drivers/razer/hid-open.js +29 -0
  214. package/dist/drivers/razer/hid-open.js.map +1 -0
  215. package/dist/drivers/razer/hid.d.ts +231 -0
  216. package/dist/drivers/razer/hid.d.ts.map +1 -0
  217. package/dist/drivers/razer/hid.js +772 -0
  218. package/dist/drivers/razer/hid.js.map +1 -0
  219. package/dist/drivers/razer/viper-hid.d.ts +33 -0
  220. package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
  221. package/dist/drivers/razer/viper-hid.js +177 -0
  222. package/dist/drivers/razer/viper-hid.js.map +1 -0
  223. package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
  224. package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
  225. package/dist/drivers/razer/viper-mini-hid.js +273 -0
  226. package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
  227. package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
  228. package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
  229. package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
  230. package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
  231. package/dist/drivers/registry.d.ts +70 -0
  232. package/dist/drivers/registry.d.ts.map +1 -0
  233. package/dist/drivers/registry.js +146 -0
  234. package/dist/drivers/registry.js.map +1 -0
  235. package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
  236. package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
  237. package/dist/drivers/steelseries/aerox3-hid.js +172 -0
  238. package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
  239. package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
  240. package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
  241. package/dist/drivers/steelseries/aerox5-hid.js +173 -0
  242. package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
  243. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
  244. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
  245. package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
  246. package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
  247. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
  248. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
  249. package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
  250. package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
  251. package/dist/drivers/steelseries/hid.d.ts +48 -0
  252. package/dist/drivers/steelseries/hid.d.ts.map +1 -0
  253. package/dist/drivers/steelseries/hid.js +157 -0
  254. package/dist/drivers/steelseries/hid.js.map +1 -0
  255. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
  256. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
  257. package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
  258. package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
  259. package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
  260. package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
  261. package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
  262. package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
  263. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
  264. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
  265. package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
  266. package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
  267. package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
  268. package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
  269. package/dist/drivers/steelseries/rival310-hid.js +182 -0
  270. package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
  271. package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
  272. package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
  273. package/dist/drivers/steelseries/rival650-hid.js +209 -0
  274. package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
  275. package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
  276. package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
  277. package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
  278. package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
  279. package/dist/drivers/teevolution/hid.d.ts +82 -0
  280. package/dist/drivers/teevolution/hid.d.ts.map +1 -0
  281. package/dist/drivers/teevolution/hid.js +607 -0
  282. package/dist/drivers/teevolution/hid.js.map +1 -0
  283. package/dist/drivers/vendors.d.ts +254 -0
  284. package/dist/drivers/vendors.d.ts.map +1 -0
  285. package/dist/drivers/vendors.js +587 -0
  286. package/dist/drivers/vendors.js.map +1 -0
  287. package/dist/drivers/vgn/hid.d.ts +33 -0
  288. package/dist/drivers/vgn/hid.d.ts.map +1 -0
  289. package/dist/drivers/vgn/hid.js +213 -0
  290. package/dist/drivers/vgn/hid.js.map +1 -0
  291. package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
  292. package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
  293. package/dist/drivers/wallhack/keyboard-hid.js +80 -0
  294. package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
  295. package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
  296. package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
  297. package/dist/drivers/wallhack/mouse-hid.js +288 -0
  298. package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
  299. package/dist/drivers/webhid.d.ts +59 -0
  300. package/dist/drivers/webhid.d.ts.map +1 -0
  301. package/dist/drivers/webhid.js +2 -0
  302. package/dist/drivers/webhid.js.map +1 -0
  303. package/dist/drivers/wlmouse/hid.d.ts +81 -0
  304. package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
  305. package/dist/drivers/wlmouse/hid.js +576 -0
  306. package/dist/drivers/wlmouse/hid.js.map +1 -0
  307. package/dist/drivers/wooting/hid.d.ts +86 -0
  308. package/dist/drivers/wooting/hid.d.ts.map +1 -0
  309. package/dist/drivers/wooting/hid.js +320 -0
  310. package/dist/drivers/wooting/hid.js.map +1 -0
  311. package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
  312. package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
  313. package/dist/drivers/zaunkoenig/hid.js +162 -0
  314. package/dist/drivers/zaunkoenig/hid.js.map +1 -0
  315. package/dist/endgame-gear/op1.d.ts +165 -0
  316. package/dist/endgame-gear/op1.d.ts.map +1 -0
  317. package/dist/endgame-gear/op1.js +384 -0
  318. package/dist/endgame-gear/op1.js.map +1 -0
  319. package/dist/endgame-gear/wireless.d.ts +93 -0
  320. package/dist/endgame-gear/wireless.d.ts.map +1 -0
  321. package/dist/endgame-gear/wireless.js +242 -0
  322. package/dist/endgame-gear/wireless.js.map +1 -0
  323. package/dist/fantech/index.d.ts +9 -0
  324. package/dist/fantech/index.d.ts.map +1 -0
  325. package/dist/fantech/index.js +11 -0
  326. package/dist/fantech/index.js.map +1 -0
  327. package/dist/finalmouse/index.d.ts +41 -0
  328. package/dist/finalmouse/index.d.ts.map +1 -0
  329. package/dist/finalmouse/index.js +106 -0
  330. package/dist/finalmouse/index.js.map +1 -0
  331. package/dist/gearhub/index.d.ts +210 -0
  332. package/dist/gearhub/index.d.ts.map +1 -0
  333. package/dist/gearhub/index.js +282 -0
  334. package/dist/gearhub/index.js.map +1 -0
  335. package/dist/glorious/index.d.ts +89 -0
  336. package/dist/glorious/index.d.ts.map +1 -0
  337. package/dist/glorious/index.js +236 -0
  338. package/dist/glorious/index.js.map +1 -0
  339. package/dist/glorious-classic/index.d.ts +103 -0
  340. package/dist/glorious-classic/index.d.ts.map +1 -0
  341. package/dist/glorious-classic/index.js +304 -0
  342. package/dist/glorious-classic/index.js.map +1 -0
  343. package/dist/gwolves/index.d.ts +82 -0
  344. package/dist/gwolves/index.d.ts.map +1 -0
  345. package/dist/gwolves/index.js +197 -0
  346. package/dist/gwolves/index.js.map +1 -0
  347. package/dist/hyperx/index.d.ts +181 -0
  348. package/dist/hyperx/index.d.ts.map +1 -0
  349. package/dist/hyperx/index.js +303 -0
  350. package/dist/hyperx/index.js.map +1 -0
  351. package/dist/incott/index.d.ts +1067 -0
  352. package/dist/incott/index.d.ts.map +1 -0
  353. package/dist/incott/index.js +1482 -0
  354. package/dist/incott/index.js.map +1 -0
  355. package/dist/index.d.ts +30 -0
  356. package/dist/index.d.ts.map +1 -0
  357. package/dist/index.js +30 -0
  358. package/dist/index.js.map +1 -0
  359. package/dist/keychron/index.d.ts +194 -0
  360. package/dist/keychron/index.d.ts.map +1 -0
  361. package/dist/keychron/index.js +341 -0
  362. package/dist/keychron/index.js.map +1 -0
  363. package/dist/ksnake/index.d.ts +157 -0
  364. package/dist/ksnake/index.d.ts.map +1 -0
  365. package/dist/ksnake/index.js +314 -0
  366. package/dist/ksnake/index.js.map +1 -0
  367. package/dist/lamzu/atlantis.d.ts +237 -0
  368. package/dist/lamzu/atlantis.d.ts.map +1 -0
  369. package/dist/lamzu/atlantis.js +263 -0
  370. package/dist/lamzu/atlantis.js.map +1 -0
  371. package/dist/lamzu/index.d.ts +60 -0
  372. package/dist/lamzu/index.d.ts.map +1 -0
  373. package/dist/lamzu/index.js +86 -0
  374. package/dist/lamzu/index.js.map +1 -0
  375. package/dist/logitech/controls.d.ts +138 -0
  376. package/dist/logitech/controls.d.ts.map +1 -0
  377. package/dist/logitech/controls.js +184 -0
  378. package/dist/logitech/controls.js.map +1 -0
  379. package/dist/logitech/friendly-name.d.ts +50 -0
  380. package/dist/logitech/friendly-name.d.ts.map +1 -0
  381. package/dist/logitech/friendly-name.js +74 -0
  382. package/dist/logitech/friendly-name.js.map +1 -0
  383. package/dist/logitech/haptics.d.ts +97 -0
  384. package/dist/logitech/haptics.d.ts.map +1 -0
  385. package/dist/logitech/haptics.js +116 -0
  386. package/dist/logitech/haptics.js.map +1 -0
  387. package/dist/logitech/hosts.d.ts +55 -0
  388. package/dist/logitech/hosts.d.ts.map +1 -0
  389. package/dist/logitech/hosts.js +80 -0
  390. package/dist/logitech/hosts.js.map +1 -0
  391. package/dist/logitech/index.d.ts +127 -0
  392. package/dist/logitech/index.d.ts.map +1 -0
  393. package/dist/logitech/index.js +233 -0
  394. package/dist/logitech/index.js.map +1 -0
  395. package/dist/logitech/wheel.d.ts +117 -0
  396. package/dist/logitech/wheel.d.ts.map +1 -0
  397. package/dist/logitech/wheel.js +133 -0
  398. package/dist/logitech/wheel.js.map +1 -0
  399. package/dist/mchose/a5-gen1.d.ts +38 -0
  400. package/dist/mchose/a5-gen1.d.ts.map +1 -0
  401. package/dist/mchose/a5-gen1.js +60 -0
  402. package/dist/mchose/a5-gen1.js.map +1 -0
  403. package/dist/mchose/buttons.d.ts +66 -0
  404. package/dist/mchose/buttons.d.ts.map +1 -0
  405. package/dist/mchose/buttons.js +184 -0
  406. package/dist/mchose/buttons.js.map +1 -0
  407. package/dist/mchose/dock.d.ts +77 -0
  408. package/dist/mchose/dock.d.ts.map +1 -0
  409. package/dist/mchose/dock.js +133 -0
  410. package/dist/mchose/dock.js.map +1 -0
  411. package/dist/mchose/index.d.ts +299 -0
  412. package/dist/mchose/index.d.ts.map +1 -0
  413. package/dist/mchose/index.js +429 -0
  414. package/dist/mchose/index.js.map +1 -0
  415. package/dist/mchose/v3-buttons.d.ts +64 -0
  416. package/dist/mchose/v3-buttons.d.ts.map +1 -0
  417. package/dist/mchose/v3-buttons.js +258 -0
  418. package/dist/mchose/v3-buttons.js.map +1 -0
  419. package/dist/mchose/v3.d.ts +380 -0
  420. package/dist/mchose/v3.d.ts.map +1 -0
  421. package/dist/mchose/v3.js +608 -0
  422. package/dist/mchose/v3.js.map +1 -0
  423. package/dist/microsoft/index.d.ts +19 -0
  424. package/dist/microsoft/index.d.ts.map +1 -0
  425. package/dist/microsoft/index.js +22 -0
  426. package/dist/microsoft/index.js.map +1 -0
  427. package/dist/moddo/index.d.ts +72 -0
  428. package/dist/moddo/index.d.ts.map +1 -0
  429. package/dist/moddo/index.js +147 -0
  430. package/dist/moddo/index.js.map +1 -0
  431. package/dist/ninjutso/index.d.ts +74 -0
  432. package/dist/ninjutso/index.d.ts.map +1 -0
  433. package/dist/ninjutso/index.js +133 -0
  434. package/dist/ninjutso/index.js.map +1 -0
  435. package/dist/orbital/index.d.ts +14 -0
  436. package/dist/orbital/index.d.ts.map +1 -0
  437. package/dist/orbital/index.js +19 -0
  438. package/dist/orbital/index.js.map +1 -0
  439. package/dist/pulsar/index.d.ts +81 -0
  440. package/dist/pulsar/index.d.ts.map +1 -0
  441. package/dist/pulsar/index.js +185 -0
  442. package/dist/pulsar/index.js.map +1 -0
  443. package/dist/rawm/index.d.ts +55 -0
  444. package/dist/rawm/index.d.ts.map +1 -0
  445. package/dist/rawm/index.js +229 -0
  446. package/dist/rawm/index.js.map +1 -0
  447. package/dist/razer/codec.d.ts +504 -0
  448. package/dist/razer/codec.d.ts.map +1 -0
  449. package/dist/razer/codec.js +648 -0
  450. package/dist/razer/codec.js.map +1 -0
  451. package/dist/razer/devices.d.ts +156 -0
  452. package/dist/razer/devices.d.ts.map +1 -0
  453. package/dist/razer/devices.js +540 -0
  454. package/dist/razer/devices.js.map +1 -0
  455. package/dist/razer/index.d.ts +2 -0
  456. package/dist/razer/index.d.ts.map +1 -0
  457. package/dist/razer/index.js +2 -0
  458. package/dist/razer/index.js.map +1 -0
  459. package/dist/razer/v4.d.ts +19 -0
  460. package/dist/razer/v4.d.ts.map +1 -0
  461. package/dist/razer/v4.js +51 -0
  462. package/dist/razer/v4.js.map +1 -0
  463. package/dist/steelseries/aerox3.d.ts +236 -0
  464. package/dist/steelseries/aerox3.d.ts.map +1 -0
  465. package/dist/steelseries/aerox3.js +311 -0
  466. package/dist/steelseries/aerox3.js.map +1 -0
  467. package/dist/steelseries/aerox5-wireless.d.ts +300 -0
  468. package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
  469. package/dist/steelseries/aerox5-wireless.js +389 -0
  470. package/dist/steelseries/aerox5-wireless.js.map +1 -0
  471. package/dist/steelseries/aerox5.d.ts +228 -0
  472. package/dist/steelseries/aerox5.d.ts.map +1 -0
  473. package/dist/steelseries/aerox5.js +294 -0
  474. package/dist/steelseries/aerox5.js.map +1 -0
  475. package/dist/steelseries/aerox9-wireless.d.ts +213 -0
  476. package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
  477. package/dist/steelseries/aerox9-wireless.js +305 -0
  478. package/dist/steelseries/aerox9-wireless.js.map +1 -0
  479. package/dist/steelseries/devices.d.ts +82 -0
  480. package/dist/steelseries/devices.d.ts.map +1 -0
  481. package/dist/steelseries/devices.js +310 -0
  482. package/dist/steelseries/devices.js.map +1 -0
  483. package/dist/steelseries/index.d.ts +13 -0
  484. package/dist/steelseries/index.d.ts.map +1 -0
  485. package/dist/steelseries/index.js +13 -0
  486. package/dist/steelseries/index.js.map +1 -0
  487. package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
  488. package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
  489. package/dist/steelseries/prime-mini-wireless.js +351 -0
  490. package/dist/steelseries/prime-mini-wireless.js.map +1 -0
  491. package/dist/steelseries/prime-plus.d.ts +179 -0
  492. package/dist/steelseries/prime-plus.d.ts.map +1 -0
  493. package/dist/steelseries/prime-plus.js +275 -0
  494. package/dist/steelseries/prime-plus.js.map +1 -0
  495. package/dist/steelseries/rival3-wireless.d.ts +222 -0
  496. package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
  497. package/dist/steelseries/rival3-wireless.js +308 -0
  498. package/dist/steelseries/rival3-wireless.js.map +1 -0
  499. package/dist/steelseries/rival3.d.ts +99 -0
  500. package/dist/steelseries/rival3.d.ts.map +1 -0
  501. package/dist/steelseries/rival3.js +147 -0
  502. package/dist/steelseries/rival3.js.map +1 -0
  503. package/dist/steelseries/rival310.d.ts +230 -0
  504. package/dist/steelseries/rival310.d.ts.map +1 -0
  505. package/dist/steelseries/rival310.js +322 -0
  506. package/dist/steelseries/rival310.js.map +1 -0
  507. package/dist/steelseries/rival650.d.ts +215 -0
  508. package/dist/steelseries/rival650.d.ts.map +1 -0
  509. package/dist/steelseries/rival650.js +284 -0
  510. package/dist/steelseries/rival650.js.map +1 -0
  511. package/dist/steelseries/sensei-ten.d.ts +283 -0
  512. package/dist/steelseries/sensei-ten.d.ts.map +1 -0
  513. package/dist/steelseries/sensei-ten.js +389 -0
  514. package/dist/steelseries/sensei-ten.js.map +1 -0
  515. package/dist/teevolution/index.d.ts +211 -0
  516. package/dist/teevolution/index.d.ts.map +1 -0
  517. package/dist/teevolution/index.js +458 -0
  518. package/dist/teevolution/index.js.map +1 -0
  519. package/dist/valkyrie/index.d.ts +19 -0
  520. package/dist/valkyrie/index.d.ts.map +1 -0
  521. package/dist/valkyrie/index.js +43 -0
  522. package/dist/valkyrie/index.js.map +1 -0
  523. package/dist/valkyrie/settings.d.ts +28 -0
  524. package/dist/valkyrie/settings.d.ts.map +1 -0
  525. package/dist/valkyrie/settings.js +84 -0
  526. package/dist/valkyrie/settings.js.map +1 -0
  527. package/dist/vgn/index.d.ts +59 -0
  528. package/dist/vgn/index.d.ts.map +1 -0
  529. package/dist/vgn/index.js +165 -0
  530. package/dist/vgn/index.js.map +1 -0
  531. package/dist/wallhack/index.d.ts +165 -0
  532. package/dist/wallhack/index.d.ts.map +1 -0
  533. package/dist/wallhack/index.js +226 -0
  534. package/dist/wallhack/index.js.map +1 -0
  535. package/dist/wlmouse/index.d.ts +4 -0
  536. package/dist/wlmouse/index.d.ts.map +1 -0
  537. package/dist/wlmouse/index.js +7 -0
  538. package/dist/wlmouse/index.js.map +1 -0
  539. package/dist/wooting/index.d.ts +225 -0
  540. package/dist/wooting/index.d.ts.map +1 -0
  541. package/dist/wooting/index.js +296 -0
  542. package/dist/wooting/index.js.map +1 -0
  543. package/dist/zaunkoenig/index.d.ts +49 -0
  544. package/dist/zaunkoenig/index.d.ts.map +1 -0
  545. package/dist/zaunkoenig/index.js +127 -0
  546. package/dist/zaunkoenig/index.js.map +1 -0
  547. package/package.json +193 -0
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Pure codecs for the "BITMOUSE" OEM protocol used by newer ATK and VXE mice
3
+ * (ATK ZERO, ATK A9 NK, VXE R1 S/R2 SE, …), unit-tested without WebHID.
4
+ *
5
+ * This is a different family from the 16-byte EEPROM protocol in atk/index.ts:
6
+ * frames are 63 bytes on report 0x08, carried on a vendor collection at usage
7
+ * page 0xff05 / usage 0x0001 rather than 0xff02 / 0x0002.
8
+ *
9
+ * Frame layout, request:
10
+ *
11
+ * [0] checksum sum of bytes 1..62, low byte
12
+ * [1] 0x72 constant command code
13
+ * [2] paramLen request length field (see the command table)
14
+ * [3] cmdSn sequence; replies observed to carry a constant 0x3a
15
+ * [4] target 0 = the device addressed directly, 1 = mouse behind a receiver
16
+ * [5] commandId
17
+ * [6] cmdLen expected reply payload length
18
+ * [7..] payload
19
+ *
20
+ * Replies arrive without the checksum byte, so every field sits one byte
21
+ * earlier: [0] 0x72, [1] status (0xff = error), [2] cmdSn, [3] target,
22
+ * [4] commandId, [5] payload length, [6..] payload.
23
+ *
24
+ * The device does not clear the tail of a reply, so bytes past the reported
25
+ * length are leftovers from the previous exchange and must be discarded —
26
+ * bitmouseDecodeReply trims to the reported length for this reason.
27
+ *
28
+ * Sources: the vendor's own WebHID configurator (ATK HUB v3.2.21, hub.atk.pro)
29
+ * for the framing, command ids and field offsets; the values were then read
30
+ * back from an ATK ZERO on both transports. Fields still unexplained are
31
+ * marked below rather than given a guessed meaning.
32
+ */
33
+ export const BITMOUSE_REPORT_ID = 0x08;
34
+ export const BITMOUSE_FRAME_LENGTH = 63;
35
+ export const BITMOUSE_COMMAND_CODE = 0x72;
36
+ export const BITMOUSE_PAYLOAD_OFFSET = 7;
37
+ /** Replies drop the checksum byte, so their payload starts one byte earlier. */
38
+ export const BITMOUSE_REPLY_PAYLOAD_OFFSET = 6;
39
+ export const BITMOUSE_ERROR_STATUS = 0xff;
40
+ /** Discovery: the config channel is the only 0xff05 collection on these mice. */
41
+ export const BITMOUSE_USAGE_PAGE = 0xff05;
42
+ export const BITMOUSE_USAGE = 0x0001;
43
+ /** Byte 4. A receiver relays to its mouse on target 1 and answers on target 0. */
44
+ export const BITMOUSE_TARGET = {
45
+ device: 0x00,
46
+ mouseBehindReceiver: 0x01,
47
+ };
48
+ export const BITMOUSE_COMMAND = {
49
+ setReportRate: 1,
50
+ setDpi: 2,
51
+ setSilentHeight: 3,
52
+ setFarDistance: 27,
53
+ setSensorModel: 31,
54
+ getBatteryLevel: 7,
55
+ getCurrentMouseConfig: 9,
56
+ setLinearCorrection: 11,
57
+ setRippleControl: 12,
58
+ setMotionSync: 13,
59
+ getBatteryChargingStatus: 15,
60
+ setSensorSleepTime: 21,
61
+ setStabilizationTime: 22,
62
+ getAddressData: 23,
63
+ getDeviceType: 26,
64
+ getDeviceVersion: 28,
65
+ mouseCidMid: 74,
66
+ getDongleConnectStatus: 129,
67
+ getDongleVersion: 136,
68
+ getMouseCidMidDongle: 137,
69
+ };
70
+ /**
71
+ * Request lengths the vendor software sends for each command, as
72
+ * [paramLen, cmdLen]. The firmware rejects a mismatched pair, so these are
73
+ * copied rather than derived.
74
+ */
75
+ export const BITMOUSE_LENGTHS = {
76
+ setReportRate: [3, 1],
77
+ setDpi: [12, 10],
78
+ setSilentHeight: [4, 2],
79
+ setFarDistance: [3, 1],
80
+ setSensorModel: [3, 1],
81
+ getBatteryLevel: [2, 1],
82
+ getCurrentMouseConfig: [19, 17],
83
+ setLinearCorrection: [3, 1],
84
+ setRippleControl: [3, 1],
85
+ setMotionSync: [3, 1],
86
+ getBatteryChargingStatus: [2, 1],
87
+ setSensorSleepTime: [5, 2],
88
+ setStabilizationTime: [3, 1],
89
+ getAddressData: [10, 13],
90
+ getDeviceType: [2, 1],
91
+ getDeviceVersion: [5, 3],
92
+ mouseCidMid: [8, 6],
93
+ getDongleConnectStatus: [3, 1],
94
+ getDongleVersion: [5, 3],
95
+ getMouseCidMidDongle: [8, 6],
96
+ };
97
+ export const BITMOUSE_POLLING_RATES = [
98
+ [0, 1000],
99
+ [1, 500],
100
+ [2, 250],
101
+ [3, 125],
102
+ [4, 8000],
103
+ [5, 4000],
104
+ [6, 2000],
105
+ ];
106
+ /** Reported by getDeviceType; names are the vendor's own. */
107
+ export const BITMOUSE_DEVICE_TYPES = [
108
+ [0, "dongle1K"],
109
+ [1, "dongle4K"],
110
+ [2, "wired1K"],
111
+ [3, "wired8K"],
112
+ [4, "dongle2K"],
113
+ [5, "dongle8K"],
114
+ [6, "wired2K"],
115
+ [7, "wired4K"],
116
+ ];
117
+ export function bitmouseChecksum(frame) {
118
+ let sum = 0;
119
+ for (let index = 1; index < frame.length; index += 1)
120
+ sum += frame[index] & 0xff;
121
+ return sum & 0xff;
122
+ }
123
+ export function bitmouseEncodeRequest(request) {
124
+ const frame = new Uint8Array(BITMOUSE_FRAME_LENGTH);
125
+ frame[1] = BITMOUSE_COMMAND_CODE;
126
+ frame[2] = request.paramLen & 0xff;
127
+ frame[3] = 0;
128
+ frame[4] = (request.target ?? BITMOUSE_TARGET.device) & 0xff;
129
+ frame[5] = request.commandId & 0xff;
130
+ frame[6] = request.cmdLen & 0xff;
131
+ const payload = request.payload ?? [];
132
+ const room = BITMOUSE_FRAME_LENGTH - BITMOUSE_PAYLOAD_OFFSET;
133
+ if (payload.length > room)
134
+ throw new Error(`A BITMOUSE payload holds at most ${room} bytes.`);
135
+ frame.set(payload.map((byte) => byte & 0xff), BITMOUSE_PAYLOAD_OFFSET);
136
+ frame[0] = bitmouseChecksum(frame);
137
+ return frame;
138
+ }
139
+ /** Returns null for anything that is not a well-formed reply frame. */
140
+ export function bitmouseDecodeReply(frame) {
141
+ if (frame.length < BITMOUSE_REPLY_PAYLOAD_OFFSET)
142
+ return null;
143
+ if (frame[0] !== BITMOUSE_COMMAND_CODE)
144
+ return null;
145
+ const reported = frame[5] ?? 0;
146
+ const available = frame.length - BITMOUSE_REPLY_PAYLOAD_OFFSET;
147
+ return {
148
+ commandId: frame[4],
149
+ target: frame[3],
150
+ status: frame[1],
151
+ cmdSn: frame[2],
152
+ isError: frame[1] === BITMOUSE_ERROR_STATUS,
153
+ // Trimmed: the tail of a reply still holds the previous exchange's bytes.
154
+ payload: frame.slice(BITMOUSE_REPLY_PAYLOAD_OFFSET, BITMOUSE_REPLY_PAYLOAD_OFFSET + Math.min(reported, available)),
155
+ };
156
+ }
157
+ export function bitmouseDecodePollingRate(code) {
158
+ return BITMOUSE_POLLING_RATES.find(([encoded]) => encoded === code)?.[1] ?? null;
159
+ }
160
+ export function bitmouseEncodePollingRate(hertz) {
161
+ return BITMOUSE_POLLING_RATES.find(([, rate]) => rate === hertz)?.[0] ?? null;
162
+ }
163
+ export function bitmouseDecodeDeviceType(code) {
164
+ return BITMOUSE_DEVICE_TYPES.find(([encoded]) => encoded === code)?.[1] ?? null;
165
+ }
166
+ /**
167
+ * Settings the config block does not carry. The vendor reads each with
168
+ * getAddressData at a fixed address, one byte at a time.
169
+ */
170
+ export const BITMOUSE_ADDRESS = {
171
+ sensorModel: 74,
172
+ farDistance: 75,
173
+ sensorAngle: 2692,
174
+ };
175
+ /**
176
+ * Sensor sampling modes. The vendor exposes three of the firmware's six codes,
177
+ * labelled Base / Athletics / Athletics Max; they are mapped onto the shared
178
+ * eco-to-ultra names here.
179
+ */
180
+ export const BITMOUSE_SENSOR_MODES = [
181
+ [0, "Eco"],
182
+ [4, "High"],
183
+ [5, "Ultra"],
184
+ ];
185
+ export function bitmouseDecodeSensorMode(code) {
186
+ return BITMOUSE_SENSOR_MODES.find(([encoded]) => encoded === code)?.[1] ?? null;
187
+ }
188
+ export function bitmouseEncodeSensorMode(name) {
189
+ return BITMOUSE_SENSOR_MODES.find(([, label]) => label === name)?.[0] ?? null;
190
+ }
191
+ /**
192
+ * Lift-off. The config block's own silentHeight byte reads zero and is not the
193
+ * height: the vendor reads the level as offsetCalibration + 1 and writes it as
194
+ * { height: 0, offsetCalibration: level - 1 }.
195
+ *
196
+ * The level uses the same register scale as the A9 family (see atk/index.ts):
197
+ * tenths of a millimetre offset by six, so code 1 is 0.7 mm and code 11 is
198
+ * 1.7 mm — the continuous range the vendor software presents as a slider.
199
+ */
200
+ export const BITMOUSE_LIFT_OFF_MIN_CODE = 1;
201
+ export const BITMOUSE_LIFT_OFF_MAX_CODE = 11;
202
+ export function bitmouseDecodeLiftOffLevel(offsetCalibration) {
203
+ return offsetCalibration + 1;
204
+ }
205
+ export function bitmouseLiftOffMillimetres(code) {
206
+ return code ? (code + 6) / 10 : null;
207
+ }
208
+ export function bitmouseLiftOffCode(millimetres) {
209
+ return Math.round(millimetres * 10) - 6;
210
+ }
211
+ export function bitmouseSetLiftOffRequest(code) {
212
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setSilentHeight;
213
+ if (!Number.isInteger(code)
214
+ || code < BITMOUSE_LIFT_OFF_MIN_CODE
215
+ || code > BITMOUSE_LIFT_OFF_MAX_CODE) {
216
+ throw new Error(`A lift-off code runs ${BITMOUSE_LIFT_OFF_MIN_CODE} to ${BITMOUSE_LIFT_OFF_MAX_CODE}.`);
217
+ }
218
+ return {
219
+ commandId: BITMOUSE_COMMAND.setSilentHeight,
220
+ paramLen,
221
+ cmdLen,
222
+ payload: [0, code - 1],
223
+ };
224
+ }
225
+ export function bitmouseSetFarDistanceRequest(enabled) {
226
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setFarDistance;
227
+ return { commandId: BITMOUSE_COMMAND.setFarDistance, paramLen, cmdLen, payload: [enabled ? 1 : 0] };
228
+ }
229
+ export function bitmouseSetSensorModeRequest(code) {
230
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setSensorModel;
231
+ return { commandId: BITMOUSE_COMMAND.setSensorModel, paramLen, cmdLen, payload: [code & 0xff] };
232
+ }
233
+ /**
234
+ * getCurrentMouseConfig payload. The vendor's own accessors overlap at offsets
235
+ * 3-4 (a 16-bit DPI value and an 8-bit lift-off byte claim the same ground) and
236
+ * an ATK ZERO reports zero there on both transports, so neither field is
237
+ * decoded as DPI here — DPI comes from the address block below instead.
238
+ */
239
+ export function bitmouseDecodeConfig(payload) {
240
+ if (payload.length < 12)
241
+ return null;
242
+ return {
243
+ profile: payload[0],
244
+ configVersion: payload[1],
245
+ pollingRateHz: bitmouseDecodePollingRate(payload[2]),
246
+ silentHeight: payload[4],
247
+ offsetCalibration: payload[5],
248
+ motionSync: payload[6] === 1,
249
+ linearCorrection: payload[7] === 1,
250
+ rippleControl: payload[8] === 1,
251
+ sleepSeconds: payload[9] | (payload[10] << 8),
252
+ debounceMs: payload[11],
253
+ };
254
+ }
255
+ /** The DPI table is read with getAddressData in 10-byte chunks from address 1. */
256
+ export const BITMOUSE_DPI_BLOCK_ADDRESS = 1;
257
+ export const BITMOUSE_DPI_BLOCK_CHUNK = 10;
258
+ export const BITMOUSE_DPI_BLOCK_CHUNKS = 7;
259
+ export const BITMOUSE_DPI_STAGE_COUNT = 8;
260
+ export const BITMOUSE_DPI_STAGE_LENGTH = 8;
261
+ /** getAddressData echoes the address and length before the bytes it read. */
262
+ export const BITMOUSE_ADDRESS_DATA_OFFSET = 3;
263
+ export function bitmouseAddressDataRequest(address, length) {
264
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.getAddressData;
265
+ return {
266
+ commandId: BITMOUSE_COMMAND.getAddressData,
267
+ paramLen,
268
+ cmdLen,
269
+ payload: [address & 0xff, (address >> 8) & 0xff, length & 0xff],
270
+ };
271
+ }
272
+ /** The addresses the vendor sweeps to assemble the DPI table. */
273
+ export function bitmouseDpiBlockAddresses() {
274
+ return Array.from({ length: BITMOUSE_DPI_BLOCK_CHUNKS }, (_unused, index) => BITMOUSE_DPI_BLOCK_ADDRESS + index * BITMOUSE_DPI_BLOCK_CHUNK);
275
+ }
276
+ export function bitmouseDecodeDpiBlock(bytes) {
277
+ const needed = 2 + BITMOUSE_DPI_STAGE_COUNT * BITMOUSE_DPI_STAGE_LENGTH;
278
+ if (bytes.length < needed)
279
+ return null;
280
+ const stages = [];
281
+ for (let index = 0; index < BITMOUSE_DPI_STAGE_COUNT; index += 1) {
282
+ const at = 2 + index * BITMOUSE_DPI_STAGE_LENGTH;
283
+ stages.push({
284
+ x: bytes[at] | (bytes[at + 1] << 8),
285
+ y: bytes[at + 2] | (bytes[at + 3] << 8),
286
+ blue: bytes[at + 4],
287
+ green: bytes[at + 5],
288
+ red: bytes[at + 6],
289
+ reserved: bytes[at + 7],
290
+ });
291
+ }
292
+ return { currentIndex: bytes[0], stageCount: bytes[1], stages };
293
+ }
294
+ /**
295
+ * Products confirmed on hardware. The vendor software drives many more models
296
+ * over this protocol; each one needs its own hardware check before it is added.
297
+ */
298
+ export const BITMOUSE_PRODUCTS = new Map([
299
+ [0x1154, { name: "ATK ZERO", receiver: false, sensor: "PAW3950Ultra", cidMid: "1,1" }],
300
+ [0x1155, { name: "ATK ZERO", receiver: true, sensor: "PAW3950Ultra", cidMid: "1,1" }],
301
+ ]);
302
+ export const BITMOUSE_PRODUCT_IDS = [...BITMOUSE_PRODUCTS.keys()];
303
+ /** Sensor DPI ranges, as the vendor configurator states them. */
304
+ export const BITMOUSE_DPI_RANGES = {
305
+ PAW3950Ultra: {
306
+ min: 10,
307
+ max: 42000,
308
+ segments: [{ until: 10000, step: 10 }, { until: 30000, step: 50 }, { until: 42001, step: 100 }],
309
+ },
310
+ };
311
+ export function bitmouseDpiOptions(range) {
312
+ const options = [];
313
+ let dpi = range.min;
314
+ for (const segment of range.segments) {
315
+ const ceiling = Math.min(segment.until, range.max + 1);
316
+ for (; dpi < ceiling; dpi += segment.step)
317
+ options.push(dpi);
318
+ }
319
+ if (options[options.length - 1] !== range.max)
320
+ options.push(range.max);
321
+ return options;
322
+ }
323
+ /**
324
+ * The stages that actually hold a DPI value.
325
+ *
326
+ * Byte 1 of the block reads 8 on an ATK ZERO carrying only two configured
327
+ * stages, so it is the size of the table rather than a count of enabled
328
+ * entries. Unconfigured slots read 0 DPI (keeping stale colour bytes), so the
329
+ * usable list is the leading run of non-zero stages.
330
+ */
331
+ export function bitmouseEnabledStages(block) {
332
+ const limit = Math.min(block.stageCount || block.stages.length, block.stages.length);
333
+ const usable = [];
334
+ for (let index = 0; index < limit; index += 1) {
335
+ const stage = block.stages[index];
336
+ if (stage.x === 0)
337
+ break;
338
+ usable.push(stage);
339
+ }
340
+ return usable;
341
+ }
342
+ export function bitmouseSetDpiRequest(stage) {
343
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setDpi;
344
+ return {
345
+ commandId: BITMOUSE_COMMAND.setDpi,
346
+ paramLen,
347
+ cmdLen,
348
+ payload: [
349
+ stage.index,
350
+ stage.x & 0xff, (stage.x >> 8) & 0xff,
351
+ stage.y & 0xff, (stage.y >> 8) & 0xff,
352
+ stage.blue, stage.green, stage.red,
353
+ 0,
354
+ stage.enable ? 1 : 0,
355
+ ],
356
+ };
357
+ }
358
+ /** Sleep is a little-endian second count in the sensor-sleep command. */
359
+ export function bitmouseSetSleepRequest(seconds) {
360
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setSensorSleepTime;
361
+ return {
362
+ commandId: BITMOUSE_COMMAND.setSensorSleepTime,
363
+ paramLen,
364
+ cmdLen,
365
+ payload: [seconds & 0xff, (seconds >> 8) & 0xff],
366
+ };
367
+ }
368
+ /** Lift-off and its calibration byte share one command. */
369
+ export function bitmouseSetSilentHeightRequest(height, offsetCalibration) {
370
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.setSilentHeight;
371
+ return {
372
+ commandId: BITMOUSE_COMMAND.setSilentHeight,
373
+ paramLen,
374
+ cmdLen,
375
+ payload: [height & 0xff, offsetCalibration & 0xff],
376
+ };
377
+ }
378
+ /** A single-byte flag write: motion sync, ripple control, linear correction. */
379
+ export function bitmouseSetFlagRequest(commandId, lengths, value) {
380
+ return { commandId, paramLen: lengths[0], cmdLen: lengths[1], payload: [value & 0xff] };
381
+ }
382
+ /** Identifies the model: an ATK ZERO answers cid 1, mid 1. */
383
+ export function bitmouseDecodeCidMid(payload) {
384
+ if (payload.length < 6)
385
+ return null;
386
+ return {
387
+ cid: payload[1],
388
+ mid: payload[2] | (payload[3] << 8) | (payload[4] << 16) | (payload[5] << 24),
389
+ };
390
+ }
391
+ export function bitmouseDecodeVersion(payload) {
392
+ if (payload.length < 3)
393
+ return null;
394
+ return `${payload[0]}.${payload[1]}.${payload[2]}`;
395
+ }
396
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bitmouse/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /** Shared page-command framing used by WLMouse and Lamzu receivers. */
2
+ export declare const COMPX_REPORT_ID = 0;
3
+ export declare const COMPX_PACKET_LENGTH = 64;
4
+ export declare const COMPX_HEADER_LENGTH = 6;
5
+ export declare const COMPX_STATUS: {
6
+ readonly request: 0;
7
+ readonly pending: 160;
8
+ readonly ok: 161;
9
+ readonly unsupported: 162;
10
+ readonly busy: 163;
11
+ };
12
+ export type CompaxLiftOffDistance = "Low" | "Medium" | "High";
13
+ export interface CompaxDpiStage {
14
+ x: number;
15
+ y: number;
16
+ }
17
+ export interface CompaxRequest {
18
+ target: number;
19
+ length: number;
20
+ page: number;
21
+ command: number;
22
+ args: readonly number[];
23
+ attempts?: number;
24
+ }
25
+ export declare function compaxEncodeRequest(spec: CompaxRequest): Uint8Array<ArrayBuffer>;
26
+ export declare function compaxDecodeDpiStages(payload: Uint8Array): CompaxDpiStage[];
27
+ export declare function compaxDecodePollingRate(table: ReadonlyArray<readonly [number, number]>, value: number): number;
28
+ export declare function compaxDecodeLiftOff(value: number): CompaxLiftOffDistance | null;
29
+ export declare function compaxDecodeSleep(payload: Uint8Array | null, disabledMinimum?: number): number | null;
30
+ export declare function compaxDecodeFirmware(label: string, payload: Uint8Array | null): string;
31
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/compx/codec.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,YAAY;;;;;;CAAqF,CAAC;AAC/G,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC9D,MAAM,WAAW,cAAc;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AACxD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAC9D,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,CAShF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,EAAE,CAW3E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI9G;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAI/E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,eAAe,SAAS,GAAG,MAAM,GAAG,IAAI,CAIrG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,CAEtF"}
@@ -0,0 +1,50 @@
1
+ /** Shared page-command framing used by WLMouse and Lamzu receivers. */
2
+ export const COMPX_REPORT_ID = 0;
3
+ export const COMPX_PACKET_LENGTH = 64;
4
+ export const COMPX_HEADER_LENGTH = 6;
5
+ export const COMPX_STATUS = { request: 0x00, pending: 0xa0, ok: 0xa1, unsupported: 0xa2, busy: 0xa3 };
6
+ export function compaxEncodeRequest(spec) {
7
+ const packet = new Uint8Array(COMPX_PACKET_LENGTH);
8
+ packet[0] = COMPX_STATUS.request;
9
+ packet[2] = spec.target;
10
+ packet[3] = spec.length;
11
+ packet[4] = spec.page;
12
+ packet[5] = spec.command;
13
+ packet.set(spec.args.slice(0, COMPX_PACKET_LENGTH - COMPX_HEADER_LENGTH), COMPX_HEADER_LENGTH);
14
+ return packet;
15
+ }
16
+ export function compaxDecodeDpiStages(payload) {
17
+ const stages = [];
18
+ for (let index = 0; index < (payload[1] ?? 0); index += 1) {
19
+ const offset = 2 + index * 4;
20
+ if (offset + 3 >= payload.length)
21
+ break;
22
+ stages.push({
23
+ x: ((payload[offset] ?? 0) << 8) | (payload[offset + 1] ?? 0),
24
+ y: ((payload[offset + 2] ?? 0) << 8) | (payload[offset + 3] ?? 0),
25
+ });
26
+ }
27
+ return stages;
28
+ }
29
+ export function compaxDecodePollingRate(table, value) {
30
+ const rate = table.find(([encoded]) => encoded === value)?.[1];
31
+ if (!rate)
32
+ throw new Error(`The mouse reported an unknown polling-rate value 0x${value.toString(16)}.`);
33
+ return rate;
34
+ }
35
+ export function compaxDecodeLiftOff(value) {
36
+ if (!value)
37
+ return null;
38
+ const millimetres = (value & 0x80) !== 0 ? (value & 0x7f) / 10 : value;
39
+ return millimetres < 1 ? "Low" : millimetres < 2 ? "Medium" : "High";
40
+ }
41
+ export function compaxDecodeSleep(payload, disabledMinimum = 0xff00) {
42
+ if (!payload || payload.length < 3)
43
+ return null;
44
+ const seconds = ((payload[1] ?? 0) << 8) | (payload[2] ?? 0);
45
+ return seconds === 0 || seconds >= disabledMinimum ? null : seconds;
46
+ }
47
+ export function compaxDecodeFirmware(label, payload) {
48
+ return !payload || payload.length < 4 ? `${label} firmware unavailable` : `${label} ${payload[2]}.${payload[3]}`;
49
+ }
50
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/compx/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Corsair NXP-family configuration protocol as spoken by the NIGHTSWORD RGB
3
+ * (firmware 3.41), reconstructed from ckb-next's `nxp_proto.h` / `dpi.c` and
4
+ * corrected against real hardware. The full trace lives in
5
+ * `captures/corsair-nightsword/PROTOCOL.md`.
6
+ *
7
+ * Transport: 64-byte feature reports on report id 0 over the interface whose
8
+ * collection is usage page 0xffc2, usage 4. A GET is `sendFeatureReport` then
9
+ * `receiveFeatureReport`; the reply echoes request bytes 0–3. A SET produces
10
+ * no reply at all — the driver confirms it with the matching GET.
11
+ *
12
+ * Byte order is asymmetric on this firmware: DPI X/Y arrive big-endian in GET
13
+ * replies but must be sent little-endian in SET payloads. Identity fields are
14
+ * little-endian. Nothing here transports bytes; the WebHID client lives in
15
+ * `src/drivers/corsair/hid.ts`.
16
+ */
17
+ export declare const CORSAIR_VENDOR_ID = 6940;
18
+ export declare const CORSAIR_USAGE_PAGE = 65474;
19
+ /** Usage of the config collection. MI_00 also carries an 0xffc2 collection with usage 3 that never answers. */
20
+ export declare const CORSAIR_CONFIG_USAGE = 4;
21
+ export declare const CORSAIR_REPORT_ID = 0;
22
+ export declare const CORSAIR_PACKET_SIZE = 64;
23
+ export declare const CORSAIR_NIGHTSWORD_PRODUCT_ID = 7004;
24
+ export interface CorsairDeviceDefinition {
25
+ name: string;
26
+ dpiMax: number;
27
+ dpiStep: number;
28
+ /** Number of `MOUSE_DPIPROF` slots (d0–d5 on the NIGHTSWORD). */
29
+ stages: number;
30
+ /** Firmware the protocol was exercised on. */
31
+ verifiedFirmware: string;
32
+ }
33
+ export declare const CORSAIR_PRODUCTS: ReadonlyMap<number, CorsairDeviceDefinition>;
34
+ export declare const CORSAIR_PRODUCT_IDS: readonly number[];
35
+ export declare const CORSAIR_COMMAND: {
36
+ readonly get: 14;
37
+ readonly set: 7;
38
+ };
39
+ export declare const CORSAIR_FIELD: {
40
+ readonly ident: 1;
41
+ readonly pollRate: 10;
42
+ readonly mouse: 19;
43
+ readonly profileId: 21;
44
+ readonly profileName: 22;
45
+ };
46
+ /** `FIELD_MOUSE` subcommands (packet byte 2). */
47
+ export declare const CORSAIR_MOUSE: {
48
+ readonly dpi: 2;
49
+ readonly lift: 3;
50
+ readonly snap: 4;
51
+ readonly dpiMask: 5;
52
+ /** OR'd with the stage index: d0–d5. */
53
+ readonly dpiProfile: 208;
54
+ };
55
+ /**
56
+ * Packet byte 3. Zero addresses the live/software settings; 1 would address the
57
+ * stored hardware profile, which returns zeros on the NIGHTSWORD. Live writes
58
+ * do not survive a power cycle.
59
+ */
60
+ export declare const CORSAIR_LIVE_PROFILE = 0;
61
+ export declare const CORSAIR_STAGE_COUNT = 6;
62
+ /**
63
+ * Slot d0 is iCUE's "Sniper" stage (held-button DPI, yellow indicator); iCUE's
64
+ * numbered stages 1–5 are slots d1–d5. `MOUSE_DPI` reports the slot index, so
65
+ * a current stage of 2 means iCUE's Stage 2. Confirmed against the iCUE DPI
66
+ * panel on fw 3.41.
67
+ */
68
+ export declare const CORSAIR_SNIPER_STAGE = 0;
69
+ export declare const CORSAIR_POLL_INTERVALS_MS: readonly [1, 2, 4, 8];
70
+ export type CorsairPollIntervalMs = (typeof CORSAIR_POLL_INTERVALS_MS)[number];
71
+ export type CorsairRgb = readonly [number, number, number];
72
+ export interface CorsairIdent {
73
+ firmware: number;
74
+ bootloader: number;
75
+ vendorId: number;
76
+ productId: number;
77
+ /** USB polling interval in milliseconds: 1 = 1000 Hz, 8 = 125 Hz. */
78
+ pollIntervalMs: number;
79
+ pollingRateHz: number;
80
+ }
81
+ export interface CorsairDpiStage {
82
+ x: number;
83
+ y: number;
84
+ rgb: CorsairRgb;
85
+ }
86
+ export interface CorsairCurrentDpi {
87
+ stage: number;
88
+ x: number;
89
+ y: number;
90
+ }
91
+ export declare function corsairDevice(productId: number): CorsairDeviceDefinition;
92
+ /** A zero-padded 64-byte packet with `bytes` at the front. */
93
+ export declare function corsairPacket(...bytes: number[]): Uint8Array;
94
+ /** `0x0341` → "3.41", matching how iCUE and ckb-next print the version. */
95
+ export declare function corsairFormatVersion(word: number): string;
96
+ /** Slot indices whose bit is set in the `MOUSE_DPIMASK` byte. */
97
+ export declare function corsairEnabledStages(mask: number, stages?: number): number[];
98
+ export declare const corsairEncode: {
99
+ readonly ident: () => Uint8Array;
100
+ readonly dpiMask: () => Uint8Array;
101
+ readonly dpiStage: () => Uint8Array;
102
+ readonly lift: () => Uint8Array;
103
+ readonly snap: () => Uint8Array;
104
+ readonly stage: (stage: number) => Uint8Array;
105
+ readonly setStage: (stage: number) => Uint8Array;
106
+ readonly setDpiMask: (mask: number) => Uint8Array;
107
+ /**
108
+ * SET payloads carry DPI little-endian. RGB is mandatory: a stage write
109
+ * without bytes 9–11 clears the stage colour, so a caller must read the stage
110
+ * first and pass its colour back.
111
+ */
112
+ readonly setStageDpi: (stage: number, x: number, y: number, rgb: CorsairRgb) => Uint8Array;
113
+ readonly setLift: (height: number) => Uint8Array;
114
+ /** Trailing 0x05 mirrors ckb-next; hardware accepts the write with or without it. */
115
+ readonly setSnap: (enabled: boolean) => Uint8Array;
116
+ /** The device re-enumerates after this; the WebHID handle closes. */
117
+ readonly setPollMs: (intervalMs: CorsairPollIntervalMs) => Uint8Array;
118
+ };
119
+ /** True when a GET reply echoes the request's command, field, subcommand, and profile bytes. */
120
+ export declare function corsairIsEcho(request: Uint8Array, reply: Uint8Array): boolean;
121
+ export declare const corsairDecode: {
122
+ readonly ident: (reply: Uint8Array) => CorsairIdent;
123
+ readonly byte4: (reply: Uint8Array) => number;
124
+ readonly dpiMask: (reply: Uint8Array) => number;
125
+ readonly lift: (reply: Uint8Array) => number;
126
+ readonly snap: (reply: Uint8Array) => boolean;
127
+ /** GET replies carry DPI big-endian. */
128
+ readonly dpiStage: (reply: Uint8Array) => CorsairCurrentDpi;
129
+ readonly stage: (reply: Uint8Array) => CorsairDpiStage;
130
+ };
131
+ export declare function corsairRgbHex(rgb: CorsairRgb): string;
132
+ /** "#rrggbb" (case-insensitive, hash optional) → [r, g, b]. */
133
+ export declare function corsairParseRgbHex(color: string): CorsairRgb;
134
+ /**
135
+ * Lift-off height is a raw 1–5 byte (every value accepted on fw 3.41). iCUE
136
+ * offers no manual lift-off control for this mouse — only its spiral surface
137
+ * calibration — so there are no vendor labels to match; the 1–5 scale is the
138
+ * one ckb-next exposes as a slider. The three-stop names are this driver's own
139
+ * mapping onto it: Low = 1, Medium = 3, High = 5 on write; 1–2 → Low,
140
+ * 3 → Medium, 4–5 → High on read.
141
+ */
142
+ export declare const CORSAIR_LIFT_MIN = 1;
143
+ export declare const CORSAIR_LIFT_MAX = 5;
144
+ export type CorsairLiftName = "Low" | "Medium" | "High";
145
+ export declare const CORSAIR_LIFT_LEVELS: Readonly<Record<CorsairLiftName, number>>;
146
+ export declare function corsairLiftName(raw: number): CorsairLiftName | null;
147
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/corsair/index.ts"],"names":[],"mappings":"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"}