@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,458 @@
1
+ export const TEEVOLUTION_REPORT_ID = 0x08;
2
+ export const TEEVOLUTION_PACKET_LENGTH = 16;
3
+ /** RapidSync 8K LCD clock — separate HID collection from Compx report 8. */
4
+ export const TEEVOLUTION_LCD_REPORT_ID = 0x0a;
5
+ export const TEEVOLUTION_LCD_PACKET_LENGTH = 40;
6
+ export const TEEVOLUTION_LCD_USAGE_PAGE = 0xff08;
7
+ export const TEEVOLUTION_LCD_USAGE = 0x02;
8
+ export const TEEVOLUTION_LCD_SET_TIME = 0x0010;
9
+ export const TEEVOLUTION_MAX_CHUNK = 10;
10
+ export const TEEVOLUTION_DPI_MAX = 42000;
11
+ export const TEEVOLUTION_PRODUCT_IDS = new Set([0xf520, 0xf523, 0xf5bb, 0xf522]);
12
+ export const TEEVOLUTION_POLLING_RATES = [125, 250, 500, 1000, 2000, 4000, 8000];
13
+ export const TEEVOLUTION_SLEEP_OPTIONS = [1, 3, 6, 12, 30, 60, 180];
14
+ /** Teevolink "Highest performance" duration codes (flash 0xB7). */
15
+ export const TEEVOLUTION_PERFORMANCE_TIME_OPTIONS = [1, 3, 6, 12, 30, 60, 90];
16
+ export const TEEVOLUTION_PERFORMANCE_TIME_LABELS = [
17
+ [1, "10 seconds"], [3, "30 seconds"], [6, "1 minute"], [12, "2 minutes"],
18
+ [30, "5 minutes"], [60, "10 minutes"], [90, "15 minutes"],
19
+ ];
20
+ export const TEEVOLUTION_DPI_LIGHT_MODES = [0, 1, 2];
21
+ export const TEEVOLUTION_DEVICE_PROFILES = new Map([
22
+ [14, {
23
+ cid: 14,
24
+ name: "Terra Pro",
25
+ protocol: "compX-terra-v1",
26
+ dpiStageCount: 4,
27
+ dpi: {
28
+ min: 50,
29
+ standardMax: 30_000,
30
+ max: TEEVOLUTION_DPI_MAX,
31
+ standardStep: 50,
32
+ highStep: 100,
33
+ },
34
+ pollingRates: TEEVOLUTION_POLLING_RATES,
35
+ liftOffDistances: ["Low", "Medium", "High"],
36
+ debounce: { min: 0, max: 20 },
37
+ sleepOptions: TEEVOLUTION_SLEEP_OPTIONS,
38
+ performanceTimeOptions: TEEVOLUTION_PERFORMANCE_TIME_OPTIONS,
39
+ sensorModes: ["Eco", "High"],
40
+ dpiLighting: {
41
+ modes: TEEVOLUTION_DPI_LIGHT_MODES,
42
+ brightness: { min: 1, max: 10 },
43
+ speed: { min: 1, max: 5 },
44
+ },
45
+ }],
46
+ ]);
47
+ export function teevolutionProfileForCid(cid) {
48
+ return TEEVOLUTION_DEVICE_PROFILES.get(cid) ?? null;
49
+ }
50
+ export const TEEVOLUTION_COMMAND = {
51
+ encryptionData: 0x01,
52
+ deviceOnline: 0x03,
53
+ batteryLevel: 0x04,
54
+ writeFlashData: 0x07,
55
+ readFlashData: 0x08,
56
+ getCurrentConfig: 0x0e,
57
+ setCurrentConfig: 0x0f,
58
+ readVersionId: 0x12,
59
+ getDongleVersion: 0x1d,
60
+ getRssi: 0x2b,
61
+ };
62
+ /** Flash offsets used by Teevolink / Compx HUB for Terra Pro. */
63
+ export const TEEVOLUTION_FLASH = {
64
+ reportRate: 0,
65
+ /** Number of enabled DPI stages (1…dpiStageCount). */
66
+ maxDpiStage: 2,
67
+ /** Active DPI stage index (0-based). */
68
+ currentDpi: 4,
69
+ liftOffDistance: 10,
70
+ /** Base of 4-byte DPI stage records. */
71
+ dpiValues: 12,
72
+ dpiLightMode: 76,
73
+ dpiLightBrightness: 78,
74
+ dpiLightSpeed: 80,
75
+ dpiLightState: 82,
76
+ /** Base of 4-byte key-function records (one per physical button). */
77
+ keyFunction: 96,
78
+ debounceTime: 169,
79
+ motionSync: 171,
80
+ sleepTime: 173,
81
+ angleSnapping: 175,
82
+ rippleControl: 177,
83
+ performanceState: 181,
84
+ performanceTime: 183,
85
+ sensorMode: 185,
86
+ };
87
+ /** Teevolink MouseKeyFunction class byte stored at flash 0x60 + 4×index. */
88
+ export const TEEVOLUTION_KEY_CLASS = {
89
+ disable: 0,
90
+ mouse: 1,
91
+ dpi: 2,
92
+ tilt: 3,
93
+ };
94
+ export const TEEVOLUTION_BUTTONS = [
95
+ { name: "Left", index: 0 },
96
+ { name: "Right", index: 1 },
97
+ { name: "Middle", index: 2 },
98
+ { name: "Back", index: 3 },
99
+ { name: "Forward", index: 4 },
100
+ { name: "DPI", index: 5 },
101
+ ];
102
+ /** Simple assignments the generic remap dropdown can write. */
103
+ export const TEEVOLUTION_BUTTON_ACTIONS = [
104
+ { label: "Left Click", cls: TEEVOLUTION_KEY_CLASS.mouse, param: 0x0100 },
105
+ { label: "Right Click", cls: TEEVOLUTION_KEY_CLASS.mouse, param: 0x0200 },
106
+ { label: "Middle Click", cls: TEEVOLUTION_KEY_CLASS.mouse, param: 0x0400 },
107
+ { label: "Backward", cls: TEEVOLUTION_KEY_CLASS.mouse, param: 0x0800 },
108
+ { label: "Forward", cls: TEEVOLUTION_KEY_CLASS.mouse, param: 0x1000 },
109
+ { label: "DPI Loop", cls: TEEVOLUTION_KEY_CLASS.dpi, param: 0x0100 },
110
+ { label: "DPI+", cls: TEEVOLUTION_KEY_CLASS.dpi, param: 0x0200 },
111
+ { label: "DPI-", cls: TEEVOLUTION_KEY_CLASS.dpi, param: 0x0300 },
112
+ { label: "Scroll Left", cls: TEEVOLUTION_KEY_CLASS.tilt, param: 0x0100 },
113
+ { label: "Scroll Right", cls: TEEVOLUTION_KEY_CLASS.tilt, param: 0x0200 },
114
+ { label: "Disable", cls: TEEVOLUTION_KEY_CLASS.disable, param: 0x0000 },
115
+ ];
116
+ export const TEEVOLUTION_BUTTON_OPTIONS = TEEVOLUTION_BUTTON_ACTIONS.map((action) => action.label);
117
+ export const TEEVOLUTION_KEY_RECORD_LENGTH = 4;
118
+ export const TEEVOLUTION_KEY_TABLE_LENGTH = TEEVOLUTION_BUTTONS.length * TEEVOLUTION_KEY_RECORD_LENGTH;
119
+ /** TeevoLink ProfileOptions: four firmware-managed flash banks. */
120
+ export const TEEVOLUTION_PROFILE_COUNT = 4;
121
+ export function teevolutionKeyFunctionAddress(index) {
122
+ if (!Number.isInteger(index) || index < 0 || index >= TEEVOLUTION_BUTTONS.length) {
123
+ throw new Error("Teevolution button index is out of range.");
124
+ }
125
+ return TEEVOLUTION_FLASH.keyFunction + index * TEEVOLUTION_KEY_RECORD_LENGTH;
126
+ }
127
+ export function teevolutionEncodeKeyFunction(cls, param) {
128
+ if (!Number.isInteger(cls) || cls < 0 || cls > 0xff) {
129
+ throw new Error("Teevolution key class must be one byte.");
130
+ }
131
+ if (!Number.isInteger(param) || param < 0 || param > 0xffff) {
132
+ throw new Error("Teevolution key parameter must be a 16-bit value.");
133
+ }
134
+ const bytes = [cls, (param >> 8) & 0xff, param & 0xff];
135
+ return new Uint8Array([...bytes, teevolutionDataChecksum(bytes)]);
136
+ }
137
+ export function teevolutionDecodeKeyFunction(data) {
138
+ const cls = data[0] ?? 0;
139
+ const param = ((data[1] ?? 0) << 8) | (data[2] ?? 0);
140
+ const checksumValid = data.length >= 4
141
+ && (data[3] ?? 0) === teevolutionDataChecksum([cls, (param >> 8) & 0xff, param & 0xff]);
142
+ return { cls, param, checksumValid };
143
+ }
144
+ export function teevolutionFindButtonAction(label) {
145
+ return TEEVOLUTION_BUTTON_ACTIONS.find((action) => action.label === label) ?? null;
146
+ }
147
+ export function teevolutionFindButton(name) {
148
+ return TEEVOLUTION_BUTTONS.find((button) => button.name === name) ?? null;
149
+ }
150
+ export function teevolutionKeyFunctionLabel(data) {
151
+ const { cls, param } = teevolutionDecodeKeyFunction(data);
152
+ return TEEVOLUTION_BUTTON_ACTIONS.find((action) => action.cls === cls && action.param === param)?.label
153
+ ?? "Custom";
154
+ }
155
+ export function teevolutionIsLeftClick(cls, param) {
156
+ return cls === TEEVOLUTION_KEY_CLASS.mouse && param === 0x0100;
157
+ }
158
+ export function teevolutionKeyTableHasLeftClick(table) {
159
+ for (let index = 0; index < TEEVOLUTION_BUTTONS.length; index += 1) {
160
+ const offset = index * TEEVOLUTION_KEY_RECORD_LENGTH;
161
+ const { cls, param } = teevolutionDecodeKeyFunction(table.slice(offset, offset + TEEVOLUTION_KEY_RECORD_LENGTH));
162
+ if (teevolutionIsLeftClick(cls, param))
163
+ return true;
164
+ }
165
+ return false;
166
+ }
167
+ export function teevolutionDecodeButtonMappings(flash) {
168
+ const mappings = {};
169
+ for (const { name, index } of TEEVOLUTION_BUTTONS) {
170
+ const offset = teevolutionKeyFunctionAddress(index);
171
+ mappings[name] = flash.length >= offset + TEEVOLUTION_KEY_RECORD_LENGTH
172
+ ? teevolutionKeyFunctionLabel(flash.slice(offset, offset + TEEVOLUTION_KEY_RECORD_LENGTH))
173
+ : "Custom";
174
+ }
175
+ return mappings;
176
+ }
177
+ export const TEEVOLUTION_TYPE_MAX_POLL = {
178
+ 0: 1000,
179
+ 1: 4000,
180
+ 2: 1000,
181
+ 3: 8000,
182
+ 4: 2000,
183
+ 5: 8000,
184
+ };
185
+ function assertByte(value, label) {
186
+ if (!Number.isInteger(value) || value < 0 || value > 0xff) {
187
+ throw new Error(`${label} must be one byte.`);
188
+ }
189
+ }
190
+ export function teevolutionPacketChecksum(packet) {
191
+ let sum = 0;
192
+ const limit = Math.min(packet.length, TEEVOLUTION_PACKET_LENGTH - 1);
193
+ for (let index = 0; index < limit; index += 1)
194
+ sum += packet[index] & 0xff;
195
+ return (0x55 - (sum & 0xff) - TEEVOLUTION_REPORT_ID) & 0xff;
196
+ }
197
+ export function teevolutionPacketChecksumIsValid(payload) {
198
+ if (payload.length !== TEEVOLUTION_PACKET_LENGTH)
199
+ return false;
200
+ return teevolutionPacketChecksum(payload) === (payload[15] & 0xff);
201
+ }
202
+ export function teevolutionDataChecksum(data) {
203
+ let sum = 0;
204
+ for (const value of data)
205
+ sum += value & 0xff;
206
+ return (0x55 - (sum & 0xff)) & 0xff;
207
+ }
208
+ function finalize(payload) {
209
+ payload[15] = teevolutionPacketChecksum(payload);
210
+ return payload;
211
+ }
212
+ export function teevolutionBuildSimplePayload(command) {
213
+ assertByte(command, "Teevolution command");
214
+ const payload = new Uint8Array(TEEVOLUTION_PACKET_LENGTH);
215
+ payload[0] = command;
216
+ return finalize(payload);
217
+ }
218
+ export function teevolutionBuildReadPayload(address, length) {
219
+ if (!Number.isInteger(address) || address < 0 || address > 0xffff) {
220
+ throw new Error("Teevolution address is out of range.");
221
+ }
222
+ if (!Number.isInteger(length) || length < 1 || length > TEEVOLUTION_MAX_CHUNK) {
223
+ throw new Error("Teevolution read length must be 1–10 bytes.");
224
+ }
225
+ const payload = teevolutionBuildSimplePayload(TEEVOLUTION_COMMAND.readFlashData);
226
+ payload[2] = address >> 8;
227
+ payload[3] = address & 0xff;
228
+ payload[4] = length;
229
+ return finalize(payload);
230
+ }
231
+ export function teevolutionBuildWritePayload(address, data) {
232
+ if (!Number.isInteger(address) || address < 0 || address > 0xffff) {
233
+ throw new Error("Teevolution address is out of range.");
234
+ }
235
+ if (data.length < 1 || data.length > TEEVOLUTION_MAX_CHUNK) {
236
+ throw new Error("Teevolution write length must be 1–10 bytes.");
237
+ }
238
+ const payload = teevolutionBuildSimplePayload(TEEVOLUTION_COMMAND.writeFlashData);
239
+ payload[2] = address >> 8;
240
+ payload[3] = address & 0xff;
241
+ payload[4] = data.length;
242
+ payload.set(data.map((byte) => byte & 0xff), 5);
243
+ return finalize(payload);
244
+ }
245
+ export function teevolutionBuildWriteScalarPayload(address, value) {
246
+ assertByte(value, "Teevolution scalar");
247
+ return teevolutionBuildWritePayload(address, [value, (0x55 - value) & 0xff]);
248
+ }
249
+ export function teevolutionBuildOnlinePayload(enabled) {
250
+ const payload = teevolutionBuildSimplePayload(TEEVOLUTION_COMMAND.deviceOnline);
251
+ payload[5] = enabled ? 1 : 0;
252
+ return finalize(payload);
253
+ }
254
+ /** Build SetCurrentConfig with TeevoLink's length byte and zero-based bank. */
255
+ export function teevolutionBuildSetCurrentProfile(profile) {
256
+ if (!Number.isInteger(profile) || profile < 0 || profile >= TEEVOLUTION_PROFILE_COUNT) {
257
+ throw new Error(`Teevolution profile must be between 0 and ${TEEVOLUTION_PROFILE_COUNT - 1}.`);
258
+ }
259
+ const payload = teevolutionBuildSimplePayload(TEEVOLUTION_COMMAND.setCurrentConfig);
260
+ payload[4] = 1;
261
+ payload[5] = profile;
262
+ return finalize(payload);
263
+ }
264
+ /**
265
+ * Decode GetCurrentConfig. TeevoLink treats status 1 as “no profile switch”
266
+ * (`supportChangeProfile = false`); only a 0–3 bank in byte 5 is usable.
267
+ */
268
+ export function teevolutionDecodeCurrentProfile(response) {
269
+ if (!teevolutionPacketChecksumIsValid(response))
270
+ return null;
271
+ if (response[0] !== TEEVOLUTION_COMMAND.getCurrentConfig || response[1] !== 0)
272
+ return null;
273
+ const profile = response[5] ?? 0;
274
+ return profile < TEEVOLUTION_PROFILE_COUNT ? profile : null;
275
+ }
276
+ export function teevolutionParseReadResponse(response, address, length) {
277
+ if (!teevolutionPacketChecksumIsValid(response))
278
+ return null;
279
+ if (response[0] !== TEEVOLUTION_COMMAND.readFlashData || response[1] !== 0)
280
+ return null;
281
+ if (response[2] !== ((address >> 8) & 0xff) || response[3] !== (address & 0xff))
282
+ return null;
283
+ if (response[4] !== length || response.length < 5 + length)
284
+ return null;
285
+ return response.slice(5, 5 + length);
286
+ }
287
+ export function teevolutionParseBattery(response) {
288
+ if (!teevolutionPacketChecksumIsValid(response))
289
+ return null;
290
+ if (response[0] !== TEEVOLUTION_COMMAND.batteryLevel || response[1] !== 0)
291
+ return null;
292
+ const raw = response[5] ?? 0xff;
293
+ return {
294
+ percent: raw <= 100 ? raw : null,
295
+ charging: response[6] === 1,
296
+ };
297
+ }
298
+ export function teevolutionEncodePollingRate(rate) {
299
+ if (!TEEVOLUTION_POLLING_RATES.includes(rate)) {
300
+ throw new Error("Unsupported Teevolution polling rate.");
301
+ }
302
+ const encoded = rate <= 1000 ? 1000 / rate : rate / 2000 * 16;
303
+ if (!Number.isInteger(encoded))
304
+ throw new Error("Unsupported Teevolution polling rate.");
305
+ return encoded;
306
+ }
307
+ export function teevolutionDecodePollingRate(encoded) {
308
+ return encoded >= 16 ? encoded / 16 * 2000 : 1000 / encoded;
309
+ }
310
+ /**
311
+ * PAW3950 Compx packing used by Teevolink: 50 DPI steps below 30,100, then
312
+ * 100 DPI steps to 42,000 via dpiEx 0x11 (halve before packing).
313
+ */
314
+ export function teevolutionEncodeDpi(dpi) {
315
+ let dpiEx = 0;
316
+ let scaled = dpi;
317
+ if (dpi >= 30100) {
318
+ dpiEx = 0x11;
319
+ scaled = dpi / 2;
320
+ }
321
+ const raw = scaled / 50 - 1;
322
+ if (!Number.isInteger(raw) || raw < 0) {
323
+ throw new Error(`${dpi} DPI cannot be encoded for the Terra Pro.`);
324
+ }
325
+ const high = raw >> 8;
326
+ const flags = (high << 2) | (high << 6) | dpiEx | (dpiEx << 4);
327
+ const low = raw & 0xff;
328
+ return new Uint8Array([low, low, flags & 0xff, teevolutionDataChecksum([low, low, flags & 0xff])]);
329
+ }
330
+ export function teevolutionDecodeDpi(data) {
331
+ const flags = data[2] ?? 0;
332
+ const raw = (data[0] ?? 0) + (((flags & 0x0c) >> 2) << 8);
333
+ const dpiEx = flags & 0x03;
334
+ let dpi = (raw + 1) * 50;
335
+ if ((dpiEx & 0x01) !== 0)
336
+ dpi *= 2;
337
+ if ((dpiEx & 0x02) !== 0)
338
+ dpi *= 2;
339
+ return dpi;
340
+ }
341
+ export function teevolutionDecodeLiftOff(value) {
342
+ return value === 3 ? "Low" : value === 1 ? "Medium" : value === 2 ? "High" : null;
343
+ }
344
+ export function teevolutionEncodeLiftOff(liftOffDistance) {
345
+ return { Low: 3, Medium: 1, High: 2 }[liftOffDistance];
346
+ }
347
+ export function teevolutionDecodeFirmwareVersion(label, response) {
348
+ return `${label} v${response[5] ?? 0}.${(response[6] ?? 0).toString(16).padStart(2, "0")}`;
349
+ }
350
+ export function teevolutionDpiOptions(profile) {
351
+ const options = [];
352
+ for (let dpi = profile.dpi.min; dpi <= profile.dpi.standardMax; dpi += profile.dpi.standardStep) {
353
+ options.push(dpi);
354
+ }
355
+ for (let dpi = profile.dpi.standardMax + profile.dpi.highStep; dpi <= profile.dpi.max; dpi += profile.dpi.highStep) {
356
+ options.push(dpi);
357
+ }
358
+ return options;
359
+ }
360
+ /** Converts Teevolink's 1–10 brightness slider to the byte stored in flash 0x4E. */
361
+ export function teevolutionEncodeDpiLightBrightness(level) {
362
+ if (!Number.isInteger(level) || level < 1 || level > 10) {
363
+ throw new Error("Teevolution DPI light brightness must be from 1 to 10.");
364
+ }
365
+ if (level === 1)
366
+ return 0x10;
367
+ if ([2, 3, 4, 6, 7, 8].includes(level))
368
+ return 0x1e * (level - 1);
369
+ if (level === 5)
370
+ return 0x80;
371
+ if (level === 9)
372
+ return 0xe6;
373
+ return 0xff;
374
+ }
375
+ /** Mirrors Teevolink's fallback to level 5 for an unrecognised stored byte. */
376
+ export function teevolutionDecodeDpiLightBrightness(value) {
377
+ if (value !== 0 && value % 0x1e === 0) {
378
+ const level = value / 0x1e + 1;
379
+ if (Number.isInteger(level) && level >= 2 && level <= 8)
380
+ return level;
381
+ }
382
+ if (value === 0x10)
383
+ return 1;
384
+ if (value === 0x80)
385
+ return 5;
386
+ if (value === 0xe6)
387
+ return 9;
388
+ if (value === 0xff)
389
+ return 10;
390
+ return 5;
391
+ }
392
+ export function teevolutionDecodeDpiLightMode(mode, state) {
393
+ if (state !== 1)
394
+ return 0;
395
+ return mode === 2 ? 2 : 1;
396
+ }
397
+ export function teevolutionEncodeSensorMode(mode) {
398
+ if (mode === "High")
399
+ return 1;
400
+ if (mode === "Eco")
401
+ return 0;
402
+ throw new Error("Ultra sensor mode is enforced by the link and cannot be written.");
403
+ }
404
+ export function teevolutionDecodeSensorModeStored(value) {
405
+ return value === 1 ? "High" : "Eco";
406
+ }
407
+ /**
408
+ * Mirrors Teevolink Update_MS_SensorModeDisplay for PAW3950 Terra Pro links.
409
+ * Ultra (256) is display-only when high poll rates force corded tracking.
410
+ */
411
+ export function teevolutionSensorModeUi(options) {
412
+ const storedValue = options.storedMode === 1 ? 1 : 0;
413
+ if (options.connection === "Wired" || options.fps20k) {
414
+ return { mode: "Ultra", editable: false, storedValue };
415
+ }
416
+ if (options.pollingRateHz < 2000) {
417
+ return { mode: storedValue === 1 ? "High" : "Eco", editable: true, storedValue };
418
+ }
419
+ if (options.pollingRateHz === 8000) {
420
+ return { mode: "Ultra", editable: false, storedValue };
421
+ }
422
+ // 2000/4000 Hz wireless on PAW3950 uses corded/Ultra tracking.
423
+ return { mode: "Ultra", editable: false, storedValue };
424
+ }
425
+ /**
426
+ * Teevolink Generate_CRC for RapidSync LCD writes: last byte is
427
+ * `(0x55 - sum(packet[0..len-2])) & 0xff`, including the report-id byte.
428
+ */
429
+ export function teevolutionLcdChecksum(packet) {
430
+ if (packet.length < 2)
431
+ throw new Error("Teevolution LCD packets need a checksum byte.");
432
+ let sum = 0;
433
+ for (let index = 0; index < packet.length - 1; index += 1)
434
+ sum += packet[index] & 0xff;
435
+ return (0x55 - (sum & 0xff)) & 0xff;
436
+ }
437
+ /**
438
+ * 40-byte RapidSync set-time write, including report id 0x0A as byte 0.
439
+ * DateTime layout matches Teevolink GetCurrentTimer_Tick (year big-endian,
440
+ * Sunday = 0). WebHID sendReport uses bytes 1…39.
441
+ */
442
+ export function teevolutionBuildLcdTimePacket(now) {
443
+ const packet = new Uint8Array(TEEVOLUTION_LCD_PACKET_LENGTH);
444
+ packet[0] = TEEVOLUTION_LCD_REPORT_ID;
445
+ packet[1] = TEEVOLUTION_LCD_SET_TIME >> 8;
446
+ packet[2] = TEEVOLUTION_LCD_SET_TIME & 0xff;
447
+ packet[3] = (now.getFullYear() >> 8) & 0xff;
448
+ packet[4] = now.getFullYear() & 0xff;
449
+ packet[5] = now.getMonth() + 1;
450
+ packet[6] = now.getDate();
451
+ packet[7] = now.getHours();
452
+ packet[8] = now.getMinutes();
453
+ packet[9] = now.getSeconds();
454
+ packet[10] = now.getDay();
455
+ packet[TEEVOLUTION_LCD_PACKET_LENGTH - 1] = teevolutionLcdChecksum(packet);
456
+ return packet;
457
+ }
458
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/teevolution/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Transport report ID; it is not part of the 32-byte codec payload. */
2
+ export declare const valkyrieOutputReportId = 0;
3
+ export type ValkyrieIdentity = {
4
+ readonly modelCode: string;
5
+ readonly firmwareVersionRaw: number;
6
+ readonly sensorCode: number;
7
+ readonly sensorVariantRaw: number;
8
+ readonly batteryStatusRaw: number;
9
+ readonly batteryPercent: number;
10
+ readonly connectionStatusRaw: number;
11
+ };
12
+ /** Encodes only the observed read-only identity request (command 0x10). */
13
+ export declare function valkyrieEncodeIdentityRequest(): Uint8Array;
14
+ /** Parses a 32-byte input payload without a report ID; malformed replies return undefined. */
15
+ export declare function valkyrieDecodeIdentityReply(payload: Uint8Array): ValkyrieIdentity | undefined;
16
+ /** Vendor model labels only; a matching code is not a claim of driver support. */
17
+ export declare function valkyrieModelName(modelCode: string): "VK M3 Lite" | "VK M3" | undefined;
18
+ export * from "./settings.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/valkyrie/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,6BAA6B,IAAI,UAAU,CAK1D;AAED,8FAA8F;AAC9F,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAmB7F;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAMvF;AACD,cAAc,eAAe,CAAC"}
@@ -0,0 +1,43 @@
1
+ /** Transport report ID; it is not part of the 32-byte codec payload. */
2
+ export const valkyrieOutputReportId = 0;
3
+ /** Encodes only the observed read-only identity request (command 0x10). */
4
+ export function valkyrieEncodeIdentityRequest() {
5
+ const payload = new Uint8Array(32);
6
+ payload[0] = 0x10;
7
+ // Bytes 4 through 30 are zero, so their additive checksum is also zero.
8
+ return payload;
9
+ }
10
+ /** Parses a 32-byte input payload without a report ID; malformed replies return undefined. */
11
+ export function valkyrieDecodeIdentityReply(payload) {
12
+ if (payload.length !== 32)
13
+ return undefined;
14
+ if (payload[0] !== 0x10 || payload[1] !== 0 || payload[2] !== 1 || payload[3] !== 0x0b) {
15
+ return undefined;
16
+ }
17
+ const checksum = payload.subarray(4, 31).reduce((sum, byte) => sum + byte, 0) & 0xff;
18
+ if (payload[31] !== checksum || payload[13] > 100)
19
+ return undefined;
20
+ const modelBytes = payload.subarray(4, 8);
21
+ if (modelBytes.some((byte) => byte < 0x20 || byte > 0x7e))
22
+ return undefined;
23
+ const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
24
+ return {
25
+ modelCode: String.fromCharCode(...modelBytes),
26
+ firmwareVersionRaw: view.getUint16(8, true),
27
+ sensorCode: view.getUint8(10),
28
+ sensorVariantRaw: view.getUint8(11),
29
+ batteryStatusRaw: view.getUint8(12),
30
+ batteryPercent: view.getUint8(13),
31
+ connectionStatusRaw: view.getUint8(14),
32
+ };
33
+ }
34
+ /** Vendor model labels only; a matching code is not a claim of driver support. */
35
+ export function valkyrieModelName(modelCode) {
36
+ switch (modelCode) {
37
+ case "M220": return "VK M3 Lite";
38
+ case "E023": return "VK M3";
39
+ default: return undefined;
40
+ }
41
+ }
42
+ export * from "./settings.js";
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/valkyrie/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAYxC,2EAA2E;AAC3E,MAAM,UAAU,6BAA6B;IAC3C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAClB,wEAAwE;IACxE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,2BAA2B,CAAC,OAAmB;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACvF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACrF,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClF,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;QAC7C,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QAC3C,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;QACjC,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC;QAC5B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC;AACD,cAAc,eAAe,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type ValkyriePollingSettings = {
2
+ readonly pollingCodeRaw: number;
3
+ readonly rawReply: Uint8Array;
4
+ };
5
+ export type ValkyrieDpiSettings = {
6
+ readonly activeCountRaw: number;
7
+ readonly activeIndexRaw: number;
8
+ readonly stagesRaw: readonly {
9
+ readonly x: number;
10
+ readonly y: number;
11
+ }[];
12
+ readonly rawReply: Uint8Array;
13
+ };
14
+ export declare function valkyrieEncodePollingRequest(): Uint8Array;
15
+ export declare function valkyrieEncodeDpiRequest(): Uint8Array;
16
+ /** Returns uninterpreted wire values and an independent copy of the complete reply. */
17
+ export declare function valkyrieDecodePollingReply(payload: Uint8Array): ValkyriePollingSettings | undefined;
18
+ /** The stage nibbles and six coordinate pairs remain raw; no DPI scale or index base is assumed. */
19
+ export declare function valkyrieDecodeDpiReply(payload: Uint8Array): ValkyrieDpiSettings | undefined;
20
+ /** Codes 1/2/4/8 (1000/500/250/125 Hz); requires a complete validated polling read reply. */
21
+ export declare function valkyrieEncodePollingWrite(rawReply: Uint8Array, code: number): Uint8Array;
22
+ /**
23
+ * Sensor-0x11 raw range only (1..232), with equal X/Y values. The caller must
24
+ * establish the sensor separately and restrict writes to active stages.
25
+ * Returns the verified 32-byte write payload, excluding transport report ID zero.
26
+ */
27
+ export declare function valkyrieEncodeDpiStageWrite(rawReply: Uint8Array, stage: number, rawValue: number): Uint8Array;
28
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/valkyrie/settings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1E,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,CAAC;AAQF,wBAAgB,4BAA4B,IAAI,UAAU,CAEzD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAErD;AAYD,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,uBAAuB,GAAG,SAAS,CAInG;AAED,oGAAoG;AACpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,mBAAmB,GAAG,SAAS,CAa3F;AAED,6FAA6F;AAC7F,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAWzF;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAiB7G"}