@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,84 @@
1
+ function readRequest(command) {
2
+ const payload = new Uint8Array(32);
3
+ payload[0] = command;
4
+ return payload;
5
+ }
6
+ export function valkyrieEncodePollingRequest() {
7
+ return readRequest(0x12);
8
+ }
9
+ export function valkyrieEncodeDpiRequest() {
10
+ return readRequest(0x13);
11
+ }
12
+ function replyView(payload, command, dataLength) {
13
+ if (payload.length !== 32)
14
+ return undefined;
15
+ if (payload[0] !== command || payload[1] !== 0 || payload[2] !== 1 || payload[3] !== dataLength) {
16
+ return undefined;
17
+ }
18
+ const checksum = payload.subarray(4, 31).reduce((sum, byte) => sum + byte, 0) & 0xff;
19
+ if (payload[31] !== checksum)
20
+ return undefined;
21
+ return new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
22
+ }
23
+ /** Returns uninterpreted wire values and an independent copy of the complete reply. */
24
+ export function valkyrieDecodePollingReply(payload) {
25
+ const view = replyView(payload, 0x12, 1);
26
+ if (!view)
27
+ return undefined;
28
+ return { pollingCodeRaw: view.getUint8(4), rawReply: payload.slice() };
29
+ }
30
+ /** The stage nibbles and six coordinate pairs remain raw; no DPI scale or index base is assumed. */
31
+ export function valkyrieDecodeDpiReply(payload) {
32
+ const view = replyView(payload, 0x13, 0x19);
33
+ if (!view)
34
+ return undefined;
35
+ const stageByte = view.getUint8(4);
36
+ return {
37
+ activeCountRaw: stageByte & 0x0f,
38
+ activeIndexRaw: stageByte >>> 4,
39
+ stagesRaw: Array.from({ length: 6 }, (_, index) => ({
40
+ x: view.getUint16(5 + index * 4, true),
41
+ y: view.getUint16(7 + index * 4, true),
42
+ })),
43
+ rawReply: payload.slice(),
44
+ };
45
+ }
46
+ /** Codes 1/2/4/8 (1000/500/250/125 Hz); requires a complete validated polling read reply. */
47
+ export function valkyrieEncodePollingWrite(rawReply, code) {
48
+ const settings = valkyrieDecodePollingReply(rawReply);
49
+ if (!settings)
50
+ throw new RangeError("Invalid Valkyrie polling reply");
51
+ if (code !== 1 && code !== 2 && code !== 4 && code !== 8) {
52
+ throw new RangeError("Valkyrie polling code must be 1, 2, 4, or 8");
53
+ }
54
+ const payload = settings.rawReply;
55
+ payload[0] = 0x02;
56
+ payload[4] = code;
57
+ payload[31] = payload.subarray(4, 31).reduce((sum, byte) => sum + byte, 0) & 0xff;
58
+ return payload;
59
+ }
60
+ /**
61
+ * Sensor-0x11 raw range only (1..232), with equal X/Y values. The caller must
62
+ * establish the sensor separately and restrict writes to active stages.
63
+ * Returns the verified 32-byte write payload, excluding transport report ID zero.
64
+ */
65
+ export function valkyrieEncodeDpiStageWrite(rawReply, stage, rawValue) {
66
+ const settings = valkyrieDecodeDpiReply(rawReply);
67
+ if (!settings)
68
+ throw new RangeError("Invalid Valkyrie DPI reply");
69
+ if (!Number.isInteger(stage) || stage < 0 || stage > 5) {
70
+ throw new RangeError("Valkyrie DPI stage must be an integer from 0 through 5");
71
+ }
72
+ if (!Number.isInteger(rawValue) || rawValue < 1 || rawValue > 232) {
73
+ throw new RangeError("Valkyrie sensor-0x11 raw DPI must be an integer from 1 through 232");
74
+ }
75
+ const payload = settings.rawReply;
76
+ payload[0] = 0x03;
77
+ payload[3] = 0x25;
78
+ const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
79
+ view.setUint16(5 + stage * 4, rawValue, true);
80
+ view.setUint16(7 + stage * 4, rawValue, true);
81
+ payload[31] = payload.subarray(4, 31).reduce((sum, byte) => sum + byte, 0) & 0xff;
82
+ return payload;
83
+ }
84
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/valkyrie/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export declare const VGN_REPORT_ID = 8;
2
+ export declare const VGN_PAYLOAD_LENGTH = 16;
3
+ export declare const VGN_MAX_CHUNK = 10;
4
+ export declare const VGN_COMMAND: {
5
+ readonly handshake: 1;
6
+ readonly online: 3;
7
+ readonly battery: 4;
8
+ readonly write: 7;
9
+ readonly read: 8;
10
+ readonly profile: 14;
11
+ readonly firmware: 18;
12
+ readonly dongleFirmware: 29;
13
+ };
14
+ export declare const VGN_ADDRESS: {
15
+ readonly pollingRate: 0;
16
+ readonly dpiStageCount: 2;
17
+ readonly activeDpiStage: 4;
18
+ readonly lod: 10;
19
+ readonly dpiStages: 12;
20
+ readonly debounce: 169;
21
+ readonly motionSync: 171;
22
+ readonly sleep: 173;
23
+ readonly angleSnapping: 175;
24
+ readonly rippleControl: 177;
25
+ readonly performanceMode: 181;
26
+ };
27
+ export interface VgnBattery {
28
+ percent: number;
29
+ charging: boolean;
30
+ voltageMv: number;
31
+ }
32
+ export interface VgnProfile {
33
+ dpi: number;
34
+ dpiStageCount: number;
35
+ activeDpiStage: number;
36
+ pollingRateHz: number;
37
+ liftOffDistance: "Low" | "Medium" | "High" | null;
38
+ debounceMs: number | null;
39
+ sleepTimeout: number | null;
40
+ motionSync: boolean | null;
41
+ angleSnapping: boolean | null;
42
+ rippleControl: boolean | null;
43
+ performanceMode: boolean | null;
44
+ }
45
+ export declare function vgnReportChecksum(data15: Iterable<number>): number;
46
+ export declare function vgnReportChecksumIsValid(payload: Uint8Array | readonly number[]): boolean;
47
+ export declare function vgnBuildSimplePayload(command: number): Uint8Array;
48
+ export declare function vgnBuildReadPayload(address: number, length: number): Uint8Array;
49
+ export declare function vgnBuildWritePayload(address: number, data: readonly number[]): Uint8Array;
50
+ export declare function vgnBuildWriteScalarPayload(address: number, value: number): Uint8Array;
51
+ export declare function vgnParseReadResponse(response: Uint8Array, address: number, length: number): Uint8Array | null;
52
+ export declare function vgnParseBattery(response: Uint8Array): VgnBattery | null;
53
+ export declare function vgnEncodePollingRate(rate: number): number;
54
+ export declare function vgnDecodePollingRate(raw: number): number | null;
55
+ export declare function vgnEncodeDpi(dpi: number): Uint8Array;
56
+ export declare function vgnDecodeDpi(stage: Uint8Array | readonly number[]): number | null;
57
+ export declare function vgnUnpackScalar(value: number, parity: number): number | null;
58
+ export declare function vgnDecodeProfile(profile: Uint8Array): VgnProfile;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vgn/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,IAAO,CAAC;AAClC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;;;;CAYd,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAIlE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,OAAO,CAGzF;AAOD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAQ/E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CASzF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAGrF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAM7G;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CASvE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CASpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAQjF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CA4BhE"}
@@ -0,0 +1,165 @@
1
+ export const VGN_REPORT_ID = 0x08;
2
+ export const VGN_PAYLOAD_LENGTH = 16;
3
+ export const VGN_MAX_CHUNK = 10;
4
+ export const VGN_COMMAND = {
5
+ handshake: 0x01,
6
+ online: 0x03,
7
+ battery: 0x04,
8
+ write: 0x07,
9
+ read: 0x08,
10
+ profile: 0x0e,
11
+ firmware: 0x12,
12
+ dongleFirmware: 0x1d,
13
+ };
14
+ export const VGN_ADDRESS = {
15
+ pollingRate: 0x00,
16
+ dpiStageCount: 0x02,
17
+ activeDpiStage: 0x04,
18
+ lod: 0x0a,
19
+ dpiStages: 0x0c,
20
+ debounce: 0xa9,
21
+ motionSync: 0xab,
22
+ sleep: 0xad,
23
+ angleSnapping: 0xaf,
24
+ rippleControl: 0xb1,
25
+ performanceMode: 0xb5,
26
+ };
27
+ function assertByte(value, label) {
28
+ if (!Number.isInteger(value) || value < 0 || value > 0xff) {
29
+ throw new Error(`${label} must be one byte.`);
30
+ }
31
+ }
32
+ export function vgnReportChecksum(data15) {
33
+ let sum = VGN_REPORT_ID;
34
+ for (const byte of data15)
35
+ sum += byte & 0xff;
36
+ return (0x55 - (sum & 0xff)) & 0xff;
37
+ }
38
+ export function vgnReportChecksumIsValid(payload) {
39
+ if (payload.length !== VGN_PAYLOAD_LENGTH)
40
+ return false;
41
+ return ((VGN_REPORT_ID + [...payload].reduce((sum, byte) => sum + (byte & 0xff), 0)) & 0xff) === 0x55;
42
+ }
43
+ function finalize(payload) {
44
+ payload[15] = vgnReportChecksum(payload.subarray(0, 15));
45
+ return payload;
46
+ }
47
+ export function vgnBuildSimplePayload(command) {
48
+ assertByte(command, "VGN command");
49
+ const payload = new Uint8Array(VGN_PAYLOAD_LENGTH);
50
+ payload[0] = command;
51
+ return finalize(payload);
52
+ }
53
+ export function vgnBuildReadPayload(address, length) {
54
+ if (!Number.isInteger(address) || address < 0 || address > 0xffff)
55
+ throw new Error("VGN address is out of range.");
56
+ if (!Number.isInteger(length) || length < 1 || length > VGN_MAX_CHUNK)
57
+ throw new Error("VGN read length must be 1–10 bytes.");
58
+ const payload = vgnBuildSimplePayload(VGN_COMMAND.read);
59
+ payload[2] = address >> 8;
60
+ payload[3] = address & 0xff;
61
+ payload[4] = length;
62
+ return finalize(payload);
63
+ }
64
+ export function vgnBuildWritePayload(address, data) {
65
+ if (!Number.isInteger(address) || address < 0 || address > 0xffff)
66
+ throw new Error("VGN address is out of range.");
67
+ if (data.length < 1 || data.length > VGN_MAX_CHUNK)
68
+ throw new Error("VGN write length must be 1–10 bytes.");
69
+ const payload = vgnBuildSimplePayload(VGN_COMMAND.write);
70
+ payload[2] = address >> 8;
71
+ payload[3] = address & 0xff;
72
+ payload[4] = data.length;
73
+ payload.set(data.map((byte) => byte & 0xff), 5);
74
+ return finalize(payload);
75
+ }
76
+ export function vgnBuildWriteScalarPayload(address, value) {
77
+ assertByte(value, "VGN scalar");
78
+ return vgnBuildWritePayload(address, [value, (0x55 - value) & 0xff]);
79
+ }
80
+ export function vgnParseReadResponse(response, address, length) {
81
+ if (!vgnReportChecksumIsValid(response))
82
+ return null;
83
+ if (response[0] !== VGN_COMMAND.read || response[1] !== 0)
84
+ return null;
85
+ if (response[2] !== ((address >> 8) & 0xff) || response[3] !== (address & 0xff))
86
+ return null;
87
+ if (response[4] !== length || response.length < 5 + length)
88
+ return null;
89
+ return response.slice(5, 5 + length);
90
+ }
91
+ export function vgnParseBattery(response) {
92
+ if (!vgnReportChecksumIsValid(response) || response[0] !== VGN_COMMAND.battery || response[1] !== 0)
93
+ return null;
94
+ const percent = response[5];
95
+ if (percent === undefined || percent > 100)
96
+ return null;
97
+ return {
98
+ percent,
99
+ charging: response[6] === 1,
100
+ voltageMv: ((response[7] ?? 0) << 8) | (response[8] ?? 0),
101
+ };
102
+ }
103
+ export function vgnEncodePollingRate(rate) {
104
+ const raw = { 125: 8, 250: 4, 500: 2, 1000: 1, 2000: 16, 4000: 32, 8000: 64 };
105
+ const value = raw[rate];
106
+ if (value === undefined)
107
+ throw new Error("VGN polling rate must be 125, 250, 500, 1000, 2000, 4000, or 8000 Hz.");
108
+ return value;
109
+ }
110
+ export function vgnDecodePollingRate(raw) {
111
+ return { 8: 125, 4: 250, 2: 500, 1: 1000, 16: 2000, 32: 4000, 64: 8000 }[raw] ?? null;
112
+ }
113
+ export function vgnEncodeDpi(dpi) {
114
+ if (!Number.isInteger(dpi) || dpi < 50 || dpi > 26000 || dpi % 50 !== 0) {
115
+ throw new Error("VGN DPI must be 50–26,000 in 50 DPI steps.");
116
+ }
117
+ const encoded = dpi / 50 - 1;
118
+ const low = encoded & 0xff;
119
+ const high = (encoded >> 8) & 0x03;
120
+ const flags = (high << 2) | (high << 6);
121
+ return new Uint8Array([low, low, flags, (0x55 - low - low - flags) & 0xff]);
122
+ }
123
+ export function vgnDecodeDpi(stage) {
124
+ if (stage.length < 4)
125
+ return null;
126
+ const low = stage[0] & 0xff;
127
+ const duplicate = stage[1] & 0xff;
128
+ const flags = stage[2] & 0xff;
129
+ const checksum = stage[3] & 0xff;
130
+ if (low !== duplicate || ((low + duplicate + flags + checksum) & 0xff) !== 0x55)
131
+ return null;
132
+ return ((((flags >> 2) & 0x03) << 8) + low + 1) * 50;
133
+ }
134
+ export function vgnUnpackScalar(value, parity) {
135
+ return ((value + parity) & 0xff) === 0x55 ? value : null;
136
+ }
137
+ export function vgnDecodeProfile(profile) {
138
+ const scalar = (address) => profile.length > address + 1
139
+ ? vgnUnpackScalar(profile[address], profile[address + 1])
140
+ : null;
141
+ const stageCount = Math.min(Math.max(scalar(VGN_ADDRESS.dpiStageCount) ?? 1, 1), 8);
142
+ const activeStage = Math.min(Math.max(scalar(VGN_ADDRESS.activeDpiStage) ?? 0, 0), stageCount - 1);
143
+ const stageOffset = VGN_ADDRESS.dpiStages + activeStage * 4;
144
+ const dpi = vgnDecodeDpi(profile.subarray(stageOffset, stageOffset + 4)) ?? 800;
145
+ const lodRaw = scalar(VGN_ADDRESS.lod);
146
+ const pollingRaw = scalar(VGN_ADDRESS.pollingRate);
147
+ const boolean = (address) => {
148
+ const value = scalar(address);
149
+ return value === null ? null : value !== 0;
150
+ };
151
+ return {
152
+ dpi,
153
+ dpiStageCount: stageCount,
154
+ activeDpiStage: activeStage,
155
+ pollingRateHz: pollingRaw === null ? 1000 : (vgnDecodePollingRate(pollingRaw) ?? 1000),
156
+ liftOffDistance: lodRaw === 3 ? "Low" : lodRaw === 1 ? "Medium" : lodRaw === 2 ? "High" : null,
157
+ debounceMs: scalar(VGN_ADDRESS.debounce),
158
+ sleepTimeout: (scalar(VGN_ADDRESS.sleep) ?? 0) * 10 || null,
159
+ motionSync: boolean(VGN_ADDRESS.motionSync),
160
+ angleSnapping: boolean(VGN_ADDRESS.angleSnapping),
161
+ rippleControl: boolean(VGN_ADDRESS.rippleControl),
162
+ performanceMode: boolean(VGN_ADDRESS.performanceMode),
163
+ };
164
+ }
165
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vgn/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * WALLHACK device codec — wire format for the WALLHACK M-001 mouse and K-001
3
+ * keyboard, reverse-engineered from the WALLHACK Terminal WebHID app
4
+ * (terminal.wallhack.com). Pure functions only: packet builders and response
5
+ * decoders, no I/O. The WebHID drivers live in ../drivers/wallhack.
6
+ *
7
+ * Transport (shared): output on **report id 4**, fixed **63-byte** reports,
8
+ * zero-padded. Responses arrive as input reports with the command code echoed at
9
+ * byte 2 and, for function-area reads, the 16-bit little-endian address echoed at
10
+ * bytes 4-5 and the payload from byte 7.
11
+ *
12
+ * The two devices are told apart by their command interface's HID usage page:
13
+ * the mouse answers on 0xFF1C, the keyboard on 0xFFA0.
14
+ */
15
+ export declare const WALLHACK_VENDOR_ID = 14457;
16
+ /** A second vendor id some K-001 units enumerate under (the switch-matrix MCU). */
17
+ export declare const WALLHACK_KEYBOARD_ALT_VENDOR_ID = 7338;
18
+ /** M-001 mouse: real config PID and the in-app demo PID. */
19
+ export declare const WALLHACK_MOUSE_PRODUCT_IDS: Set<number>;
20
+ /** K-001 keyboard PID (shared across both keyboard vendor ids). */
21
+ export declare const WALLHACK_KEYBOARD_PRODUCT_IDS: Set<number>;
22
+ /** Command-interface usage pages, from the app's `CS` map. */
23
+ export declare const WALLHACK_MOUSE_USAGE_PAGE = 65308;
24
+ export declare const WALLHACK_MOUSE_USAGE = 146;
25
+ export declare const WALLHACK_KEYBOARD_USAGE_PAGE = 65440;
26
+ export declare const WALLHACK_KEYBOARD_USAGE = 1;
27
+ /** Every report is sent under this report id and is this many bytes long. */
28
+ export declare const WALLHACK_REPORT_ID = 4;
29
+ export declare const WALLHACK_REPORT_LENGTH = 63;
30
+ /**
31
+ * Mouse command codes (`Pt`). The function-area pair reads/writes the config
32
+ * map (`WALLHACK_FLASH`); the rest are direct queries and actions.
33
+ */
34
+ export declare const WALLHACK_COMMAND: {
35
+ readonly checkConn: 160;
36
+ readonly fastBegin: 161;
37
+ readonly fastEnd: 162;
38
+ readonly getBasicInfo: 163;
39
+ readonly readFunctionArea: 164;
40
+ readonly writeFunctionArea: 165;
41
+ readonly getDefaultKeys: 166;
42
+ readonly getKeys: 167;
43
+ readonly setKeys: 168;
44
+ readonly getLighting: 169;
45
+ readonly setLighting: 170;
46
+ readonly factoryReset: 171;
47
+ readonly getMacro: 172;
48
+ readonly setMacro: 173;
49
+ readonly pair: 174;
50
+ readonly clearPairing: 175;
51
+ readonly testColor: 176;
52
+ readonly readMouseChipId: 184;
53
+ readonly readDongleChipId: 185;
54
+ readonly battery: 186;
55
+ readonly readVersion: 188;
56
+ };
57
+ /**
58
+ * Byte offsets into the mouse config "function area" (`We`). Each named field is
59
+ * a single byte unless noted. `dpi8Block` is the base of the per-stage DPI
60
+ * records.
61
+ */
62
+ export declare const WALLHACK_FLASH: {
63
+ readonly profileIndex: 0;
64
+ readonly ledMode: 1;
65
+ readonly ledLight: 2;
66
+ readonly reportEsb: 10;
67
+ readonly reportUsb: 11;
68
+ readonly dpiRank: 12;
69
+ readonly dpi8Block: 77;
70
+ readonly reportUser: 104;
71
+ readonly sleepTime: 105;
72
+ readonly deepSleepTime: 107;
73
+ readonly keyDebounceTime: 109;
74
+ readonly silentHeight: 110;
75
+ readonly angleSnapEnable: 111;
76
+ readonly rippleControlEnable: 112;
77
+ readonly motionSyncEnable: 113;
78
+ readonly turnOffAutomaticSleep: 114;
79
+ readonly angleTuneValue: 115;
80
+ readonly gameMode: 116;
81
+ };
82
+ /** Polling-rate rank → Hz (`Z1`). Same table for wired and wireless. */
83
+ export declare const WALLHACK_POLLING_BY_RANK: Record<number, number>;
84
+ /** Full list of selectable polling rates, in Hz (`jm`). */
85
+ export declare const WALLHACK_POLLING_RATES: readonly number[];
86
+ /** Lift-off-distance code → millimetres (`s6`). */
87
+ export declare const WALLHACK_LOD_MM_BY_CODE: Record<number, number>;
88
+ export declare function wallhackPollingRankToHz(rank: number): number | null;
89
+ export declare function wallhackPollingHzToRank(hz: number): number | null;
90
+ /**
91
+ * Lift-off code (0/1/2) → OpenMouse's three-stop LOD. The device's three heights
92
+ * (0.7 / 1 / 2 mm) map onto Low / Medium / High in order.
93
+ */
94
+ export declare function wallhackLodFromCode(code: number): "Low" | "Medium" | "High" | null;
95
+ export declare function wallhackLodToCode(lod: "Low" | "Medium" | "High"): number;
96
+ /** Human-facing product name for a device by product id. */
97
+ export declare function wallhackMouseName(_productId: number): string;
98
+ export declare function wallhackKeyboardName(_productId: number): string;
99
+ /** Pack `bytes` into a fresh zero-padded 63-byte report body (`as`). */
100
+ export declare function wallhackReport(bytes: Iterable<number>): Uint8Array;
101
+ /**
102
+ * Build a simple (non-function-area) command: `[0, 0, command, ...args]` padded
103
+ * to the report length. Matches the app's `as(new Uint8Array([0, 0, cmd, …]))`.
104
+ */
105
+ export declare function wallhackBuildSimple(command: number, args?: readonly number[]): Uint8Array;
106
+ /**
107
+ * Build a function-area read/write packet (`Ht`):
108
+ * `[0, 0, cmd, n, addrLo, addrHi, 0, ...payload]`, where `cmd` is
109
+ * READ/WRITE_FUNCTION_AREA, `n` is the payload length (write) or byte count
110
+ * (read), and `addr` is the 16-bit little-endian offset.
111
+ */
112
+ export declare function wallhackBuildFunctionArea(write: boolean, address: number, n: number, payload?: readonly number[]): Uint8Array;
113
+ /** Read `count` bytes from the config map at `address`. */
114
+ export declare function wallhackBuildRead(address: number, count?: number): Uint8Array;
115
+ /** Write `payload` bytes to the config map at `address`. */
116
+ export declare function wallhackBuildWrite(address: number, payload: readonly number[]): Uint8Array;
117
+ /** A DPI value as the two little-endian bytes the DPI-stage record stores. */
118
+ export declare function wallhackDpiBytes(dpi: number): [number, number];
119
+ /**
120
+ * One DPI-stage record as written by the app (`sJ`):
121
+ * `[enabled, 0, dpiLo, dpiHi, 0x90, 1, colorHi, colorLo, 0]`. The trailing bytes
122
+ * are the stage's LED colour; the app writes 0x90/0xFFFF as defaults.
123
+ */
124
+ export declare function wallhackBuildSetDpiStage(dpi: number): Uint8Array;
125
+ /**
126
+ * A response is a valid reply for `command` when it echoes that command code at
127
+ * byte 2. (Bytes 0-1 are report framing / status.)
128
+ */
129
+ export declare function wallhackIsReplyFor(response: Uint8Array, command: number): boolean;
130
+ /** The function-area address a read/write response echoes back (bytes 4-5, LE). */
131
+ export declare function wallhackResponseAddress(response: Uint8Array): number | null;
132
+ /**
133
+ * The single config byte a function-area read returns. The payload begins at
134
+ * byte 7 (`gJ`, `fJ`, `mJ` all read `t[7]`).
135
+ */
136
+ export declare function wallhackReadByte(response: Uint8Array): number | null;
137
+ /**
138
+ * The active DPI stage's value from a `dpi8Block` read. The stage record's DPI
139
+ * lives at payload bytes 2-3, i.e. response bytes 9-10, little-endian (`lJ`).
140
+ */
141
+ export declare function wallhackReadDpi(response: Uint8Array): number | null;
142
+ export interface WallhackVersions {
143
+ /** Mouse Nordic firmware, e.g. "1.4". */
144
+ mouse: string;
145
+ /** Receiver/dongle Nordic firmware. */
146
+ dongle: string;
147
+ /** Receiver NXP (nxp5516) firmware. */
148
+ nxp: string;
149
+ }
150
+ /**
151
+ * Decode a READ_VERSION reply (`rJ`): three big-endian 16-bit versions at bytes
152
+ * 7-8 (mouse), 9-10 (dongle), 11-12 (NXP), each rendered `major.minor`.
153
+ */
154
+ export declare function wallhackDecodeVersions(response: Uint8Array): WallhackVersions | null;
155
+ export interface WallhackBattery {
156
+ percent: number | null;
157
+ charging: boolean;
158
+ }
159
+ /**
160
+ * Decode a BATTERY reply: percentage at byte 7, charging flag at byte 8. The
161
+ * exact byte positions are best-effort from the obfuscated bundle and want
162
+ * hardware confirmation; a percent outside 0-100 is treated as unknown.
163
+ */
164
+ export declare function wallhackDecodeBattery(response: Uint8Array): WallhackBattery | null;
165
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallhack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,OAAS,CAAC;AAEtD,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,aAAoC,CAAC;AAC5E,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,aAA4B,CAAC;AAEvE,8DAA8D;AAC9D,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,oBAAoB,MAAO,CAAC;AACzC,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,eAAO,MAAM,uBAAuB,IAAO,CAAC;AAE5C,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CAsBnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;CAmBjB,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI3D,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAEjG,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA0B,CAAC;AAEtF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKjE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAOlF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAExE;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,CAIlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,GAAG,UAAU,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,CAAC,EAAE,MAAM,EACT,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B,UAAU,CAIZ;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,UAAU,CAExE;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAE1F;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAGhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAQpF;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CAKlF"}