@omujs/omu 0.9.49 → 0.10.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 (295) hide show
  1. package/dist/address.js +1 -0
  2. package/dist/address.js.map +7 -0
  3. package/dist/api/asset/extension.js +2 -0
  4. package/dist/api/asset/extension.js.map +7 -0
  5. package/dist/api/asset/index.js +2 -0
  6. package/dist/api/asset/index.js.map +7 -0
  7. package/dist/{dts/api → api}/dashboard/extension.d.ts +9 -5
  8. package/dist/api/dashboard/extension.js +2 -0
  9. package/dist/api/dashboard/extension.js.map +7 -0
  10. package/dist/{dts/api → api}/dashboard/handler.d.ts +3 -3
  11. package/dist/api/dashboard/handler.js +1 -0
  12. package/dist/api/dashboard/handler.js.map +7 -0
  13. package/dist/api/dashboard/index.d.ts +3 -0
  14. package/dist/api/dashboard/index.js +2 -0
  15. package/dist/api/dashboard/index.js.map +7 -0
  16. package/dist/{dts/api → api}/dashboard/packets.d.ts +2 -12
  17. package/dist/api/dashboard/packets.js +2 -0
  18. package/dist/api/dashboard/packets.js.map +7 -0
  19. package/dist/{dts/api → api}/endpoint/endpoint.d.ts +2 -2
  20. package/dist/api/endpoint/endpoint.js +2 -0
  21. package/dist/api/endpoint/endpoint.js.map +7 -0
  22. package/dist/api/endpoint/extension.js +2 -0
  23. package/dist/api/endpoint/extension.js.map +7 -0
  24. package/dist/api/endpoint/index.js +2 -0
  25. package/dist/api/endpoint/index.js.map +7 -0
  26. package/dist/api/endpoint/packets.js +2 -0
  27. package/dist/api/endpoint/packets.js.map +7 -0
  28. package/dist/api/extension-registry.js +2 -0
  29. package/dist/api/extension-registry.js.map +7 -0
  30. package/dist/api/extension.js +2 -0
  31. package/dist/api/extension.js.map +7 -0
  32. package/dist/api/http/extension.js +2 -0
  33. package/dist/api/http/extension.js.map +7 -0
  34. package/dist/api/http/http.js +2 -0
  35. package/dist/api/http/http.js.map +7 -0
  36. package/dist/api/http/index.js +2 -0
  37. package/dist/api/http/index.js.map +7 -0
  38. package/dist/api/http/websocket.js +2 -0
  39. package/dist/api/http/websocket.js.map +7 -0
  40. package/dist/api/i18n/extension.js +2 -0
  41. package/dist/api/i18n/extension.js.map +7 -0
  42. package/dist/api/i18n/index.js +2 -0
  43. package/dist/api/i18n/index.js.map +7 -0
  44. package/dist/api/index.d.ts +2 -0
  45. package/dist/api/index.js +2 -0
  46. package/dist/api/index.js.map +7 -0
  47. package/dist/api/logger/extension.js +2 -0
  48. package/dist/api/logger/extension.js.map +7 -0
  49. package/dist/api/logger/index.js +2 -0
  50. package/dist/api/logger/index.js.map +7 -0
  51. package/dist/api/logger/packets.js +2 -0
  52. package/dist/api/logger/packets.js.map +7 -0
  53. package/dist/api/permission/extension.js +2 -0
  54. package/dist/api/permission/extension.js.map +7 -0
  55. package/dist/api/permission/index.js +2 -0
  56. package/dist/api/permission/index.js.map +7 -0
  57. package/dist/{dts/api → api}/permission/permission.d.ts +1 -1
  58. package/dist/api/permission/permission.js +2 -0
  59. package/dist/api/permission/permission.js.map +7 -0
  60. package/dist/api/plugin/extension.js +2 -0
  61. package/dist/api/plugin/extension.js.map +7 -0
  62. package/dist/api/plugin/index.js +2 -0
  63. package/dist/api/plugin/index.js.map +7 -0
  64. package/dist/api/plugin/package-info.js +1 -0
  65. package/dist/api/plugin/package-info.js.map +7 -0
  66. package/dist/{dts/api → api}/registry/extension.d.ts +1 -1
  67. package/dist/api/registry/extension.js +2 -0
  68. package/dist/api/registry/extension.js.map +7 -0
  69. package/dist/api/registry/index.js +2 -0
  70. package/dist/api/registry/index.js.map +7 -0
  71. package/dist/api/registry/packets.js +2 -0
  72. package/dist/api/registry/packets.js.map +7 -0
  73. package/dist/{dts/api → api}/registry/registry.d.ts +2 -2
  74. package/dist/api/registry/registry.js +2 -0
  75. package/dist/api/registry/registry.js.map +7 -0
  76. package/dist/api/server/extension.js +2 -0
  77. package/dist/api/server/extension.js.map +7 -0
  78. package/dist/api/server/index.js +2 -0
  79. package/dist/api/server/index.js.map +7 -0
  80. package/dist/api/session/extension.js +2 -0
  81. package/dist/api/session/extension.js.map +7 -0
  82. package/dist/api/session/index.js +2 -0
  83. package/dist/api/session/index.js.map +7 -0
  84. package/dist/api/signal/extension.js +2 -0
  85. package/dist/api/signal/extension.js.map +7 -0
  86. package/dist/api/signal/index.d.ts +1 -0
  87. package/dist/api/signal/index.js +2 -0
  88. package/dist/api/signal/index.js.map +7 -0
  89. package/dist/api/signal/packets.js +2 -0
  90. package/dist/api/signal/packets.js.map +7 -0
  91. package/dist/{dts/api → api}/signal/signal.d.ts +2 -2
  92. package/dist/api/signal/signal.js +2 -0
  93. package/dist/api/signal/signal.js.map +7 -0
  94. package/dist/api/table/extension.js +2 -0
  95. package/dist/api/table/extension.js.map +7 -0
  96. package/dist/api/table/index.js +2 -0
  97. package/dist/api/table/index.js.map +7 -0
  98. package/dist/api/table/packets.js +2 -0
  99. package/dist/api/table/packets.js.map +7 -0
  100. package/dist/{dts/api → api}/table/table.d.ts +3 -3
  101. package/dist/api/table/table.js +2 -0
  102. package/dist/api/table/table.js.map +7 -0
  103. package/dist/app.js +2 -0
  104. package/dist/app.js.map +7 -0
  105. package/dist/const.js +2 -0
  106. package/dist/const.js.map +7 -0
  107. package/dist/errors.js +2 -0
  108. package/dist/errors.js.map +7 -0
  109. package/dist/event/index.js +2 -0
  110. package/dist/event/index.js.map +7 -0
  111. package/dist/helper.js +2 -0
  112. package/dist/helper.js.map +7 -0
  113. package/dist/identifier.js +2 -0
  114. package/dist/identifier.js.map +7 -0
  115. package/dist/{dts/index.d.ts → index.d.ts} +3 -3
  116. package/dist/index.js +2 -0
  117. package/dist/index.js.map +7 -0
  118. package/dist/localization/index.js +2 -0
  119. package/dist/localization/index.js.map +7 -0
  120. package/dist/localization/locale.js +2 -0
  121. package/dist/localization/locale.js.map +7 -0
  122. package/dist/localization/localization.js +1 -0
  123. package/dist/localization/localization.js.map +7 -0
  124. package/dist/lock.js +2 -0
  125. package/dist/lock.js.map +7 -0
  126. package/dist/network/connection.js +2 -0
  127. package/dist/network/connection.js.map +7 -0
  128. package/dist/network/encryption.js +2 -0
  129. package/dist/network/encryption.js.map +7 -0
  130. package/dist/network/frame-transport.js +2 -0
  131. package/dist/network/frame-transport.js.map +7 -0
  132. package/dist/network/index.js +2 -0
  133. package/dist/network/index.js.map +7 -0
  134. package/dist/network/network.js +2 -0
  135. package/dist/network/network.js.map +7 -0
  136. package/dist/network/packet/index.js +2 -0
  137. package/dist/network/packet/index.js.map +7 -0
  138. package/dist/network/packet/packet-types.js +2 -0
  139. package/dist/network/packet/packet-types.js.map +7 -0
  140. package/dist/{dts/network → network}/packet/packet.d.ts +2 -2
  141. package/dist/network/packet/packet.js +2 -0
  142. package/dist/network/packet/packet.js.map +7 -0
  143. package/dist/network/websocket-transport.js +2 -0
  144. package/dist/network/websocket-transport.js.map +7 -0
  145. package/dist/omu.js +2 -0
  146. package/dist/omu.js.map +7 -0
  147. package/dist/result.js +2 -0
  148. package/dist/result.js.map +7 -0
  149. package/dist/{dts/serialize → serialize}/bytebuffer.d.ts +1 -1
  150. package/dist/serialize/bytebuffer.js +2 -0
  151. package/dist/serialize/bytebuffer.js.map +7 -0
  152. package/dist/serialize/index.d.ts +2 -0
  153. package/dist/serialize/index.js +2 -0
  154. package/dist/serialize/index.js.map +7 -0
  155. package/dist/serialize/serializer.js +2 -0
  156. package/dist/serialize/serializer.js.map +7 -0
  157. package/dist/token.js +2 -0
  158. package/dist/token.js.map +7 -0
  159. package/dist/version.d.ts +2 -0
  160. package/dist/version.js +2 -0
  161. package/dist/version.js.map +7 -0
  162. package/package.json +9 -9
  163. package/dist/dts/api/dashboard/index.d.ts +0 -3
  164. package/dist/dts/api/index.d.ts +0 -2
  165. package/dist/dts/api/signal/index.d.ts +0 -1
  166. package/dist/dts/serialize/index.d.ts +0 -2
  167. package/dist/dts/version.d.ts +0 -2
  168. package/dist/esm/address.js +0 -4
  169. package/dist/esm/api/asset/extension.js +0 -911
  170. package/dist/esm/api/asset/index.js +0 -909
  171. package/dist/esm/api/dashboard/extension.js +0 -1362
  172. package/dist/esm/api/dashboard/handler.js +0 -4
  173. package/dist/esm/api/dashboard/index.js +0 -1361
  174. package/dist/esm/api/dashboard/packets.js +0 -419
  175. package/dist/esm/api/endpoint/endpoint.js +0 -383
  176. package/dist/esm/api/endpoint/extension.js +0 -1096
  177. package/dist/esm/api/endpoint/index.js +0 -383
  178. package/dist/esm/api/endpoint/packets.js +0 -799
  179. package/dist/esm/api/extension-registry.js +0 -23
  180. package/dist/esm/api/extension.js +0 -278
  181. package/dist/esm/api/http/extension.js +0 -1420
  182. package/dist/esm/api/http/http.js +0 -448
  183. package/dist/esm/api/http/index.js +0 -1419
  184. package/dist/esm/api/http/websocket.js +0 -220
  185. package/dist/esm/api/i18n/extension.js +0 -1339
  186. package/dist/esm/api/i18n/index.js +0 -1337
  187. package/dist/esm/api/index.js +0 -295
  188. package/dist/esm/api/logger/extension.js +0 -856
  189. package/dist/esm/api/logger/index.js +0 -852
  190. package/dist/esm/api/logger/packets.js +0 -673
  191. package/dist/esm/api/permission/extension.js +0 -535
  192. package/dist/esm/api/permission/index.js +0 -294
  193. package/dist/esm/api/permission/permission.js +0 -294
  194. package/dist/esm/api/plugin/extension.js +0 -531
  195. package/dist/esm/api/plugin/index.js +0 -529
  196. package/dist/esm/api/plugin/package-info.js +0 -4
  197. package/dist/esm/api/registry/extension.js +0 -1286
  198. package/dist/esm/api/registry/index.js +0 -1285
  199. package/dist/esm/api/registry/packets.js +0 -694
  200. package/dist/esm/api/registry/registry.js +0 -383
  201. package/dist/esm/api/server/extension.js +0 -2140
  202. package/dist/esm/api/server/index.js +0 -2118
  203. package/dist/esm/api/session/extension.js +0 -2235
  204. package/dist/esm/api/session/index.js +0 -2235
  205. package/dist/esm/api/signal/extension.js +0 -1031
  206. package/dist/esm/api/signal/index.js +0 -379
  207. package/dist/esm/api/signal/packets.js +0 -690
  208. package/dist/esm/api/signal/signal.js +0 -379
  209. package/dist/esm/api/table/extension.js +0 -1553
  210. package/dist/esm/api/table/index.js +0 -1552
  211. package/dist/esm/api/table/packets.js +0 -904
  212. package/dist/esm/api/table/table.js +0 -383
  213. package/dist/esm/app.js +0 -264
  214. package/dist/esm/const.js +0 -11
  215. package/dist/esm/errors.js +0 -548
  216. package/dist/esm/event/index.js +0 -22
  217. package/dist/esm/helper.js +0 -15
  218. package/dist/esm/identifier.js +0 -266
  219. package/dist/esm/index.js +0 -5186
  220. package/dist/esm/localization/index.js +0 -742
  221. package/dist/esm/localization/locale.js +0 -742
  222. package/dist/esm/localization/localization.js +0 -4
  223. package/dist/esm/lock.js +0 -46
  224. package/dist/esm/network/connection.js +0 -293
  225. package/dist/esm/network/encryption.js +0 -986
  226. package/dist/esm/network/frame-transport.js +0 -531
  227. package/dist/esm/network/index.js +0 -1627
  228. package/dist/esm/network/network.js +0 -1368
  229. package/dist/esm/network/packet/index.js +0 -485
  230. package/dist/esm/network/packet/packet-types.js +0 -486
  231. package/dist/esm/network/packet/packet.js +0 -126
  232. package/dist/esm/network/websocket-transport.js +0 -493
  233. package/dist/esm/omu.js +0 -4945
  234. package/dist/esm/result.js +0 -68
  235. package/dist/esm/serialize/bytebuffer.js +0 -384
  236. package/dist/esm/serialize/index.js +0 -471
  237. package/dist/esm/serialize/serializer.js +0 -97
  238. package/dist/esm/token.js +0 -42
  239. package/dist/esm/version.js +0 -11
  240. package/dist/tsconfig.tsbuildinfo +0 -1
  241. /package/dist/{dts/address.d.ts → address.d.ts} +0 -0
  242. /package/dist/{dts/api → api}/asset/extension.d.ts +0 -0
  243. /package/dist/{dts/api → api}/asset/index.d.ts +0 -0
  244. /package/dist/{dts/api → api}/endpoint/extension.d.ts +0 -0
  245. /package/dist/{dts/api → api}/endpoint/index.d.ts +0 -0
  246. /package/dist/{dts/api → api}/endpoint/packets.d.ts +0 -0
  247. /package/dist/{dts/api → api}/extension-registry.d.ts +0 -0
  248. /package/dist/{dts/api → api}/extension.d.ts +0 -0
  249. /package/dist/{dts/api → api}/http/extension.d.ts +0 -0
  250. /package/dist/{dts/api → api}/http/http.d.ts +0 -0
  251. /package/dist/{dts/api → api}/http/index.d.ts +0 -0
  252. /package/dist/{dts/api → api}/http/websocket.d.ts +0 -0
  253. /package/dist/{dts/api → api}/i18n/extension.d.ts +0 -0
  254. /package/dist/{dts/api → api}/i18n/index.d.ts +0 -0
  255. /package/dist/{dts/api → api}/logger/extension.d.ts +0 -0
  256. /package/dist/{dts/api → api}/logger/index.d.ts +0 -0
  257. /package/dist/{dts/api → api}/logger/packets.d.ts +0 -0
  258. /package/dist/{dts/api → api}/permission/extension.d.ts +0 -0
  259. /package/dist/{dts/api → api}/permission/index.d.ts +0 -0
  260. /package/dist/{dts/api → api}/plugin/extension.d.ts +0 -0
  261. /package/dist/{dts/api → api}/plugin/index.d.ts +0 -0
  262. /package/dist/{dts/api → api}/plugin/package-info.d.ts +0 -0
  263. /package/dist/{dts/api → api}/registry/index.d.ts +0 -0
  264. /package/dist/{dts/api → api}/registry/packets.d.ts +0 -0
  265. /package/dist/{dts/api → api}/server/extension.d.ts +0 -0
  266. /package/dist/{dts/api → api}/server/index.d.ts +0 -0
  267. /package/dist/{dts/api → api}/session/extension.d.ts +0 -0
  268. /package/dist/{dts/api → api}/session/index.d.ts +0 -0
  269. /package/dist/{dts/api → api}/signal/extension.d.ts +0 -0
  270. /package/dist/{dts/api → api}/signal/packets.d.ts +0 -0
  271. /package/dist/{dts/api → api}/table/extension.d.ts +0 -0
  272. /package/dist/{dts/api → api}/table/index.d.ts +0 -0
  273. /package/dist/{dts/api → api}/table/packets.d.ts +0 -0
  274. /package/dist/{dts/app.d.ts → app.d.ts} +0 -0
  275. /package/dist/{dts/const.d.ts → const.d.ts} +0 -0
  276. /package/dist/{dts/errors.d.ts → errors.d.ts} +0 -0
  277. /package/dist/{dts/event → event}/index.d.ts +0 -0
  278. /package/dist/{dts/helper.d.ts → helper.d.ts} +0 -0
  279. /package/dist/{dts/identifier.d.ts → identifier.d.ts} +0 -0
  280. /package/dist/{dts/localization → localization}/index.d.ts +0 -0
  281. /package/dist/{dts/localization → localization}/locale.d.ts +0 -0
  282. /package/dist/{dts/localization → localization}/localization.d.ts +0 -0
  283. /package/dist/{dts/lock.d.ts → lock.d.ts} +0 -0
  284. /package/dist/{dts/network → network}/connection.d.ts +0 -0
  285. /package/dist/{dts/network → network}/encryption.d.ts +0 -0
  286. /package/dist/{dts/network → network}/frame-transport.d.ts +0 -0
  287. /package/dist/{dts/network → network}/index.d.ts +0 -0
  288. /package/dist/{dts/network → network}/network.d.ts +0 -0
  289. /package/dist/{dts/network → network}/packet/index.d.ts +0 -0
  290. /package/dist/{dts/network → network}/packet/packet-types.d.ts +0 -0
  291. /package/dist/{dts/network → network}/websocket-transport.d.ts +0 -0
  292. /package/dist/{dts/omu.d.ts → omu.d.ts} +0 -0
  293. /package/dist/{dts/result.d.ts → result.d.ts} +0 -0
  294. /package/dist/{dts/serialize → serialize}/serializer.d.ts +0 -0
  295. /package/dist/{dts/token.d.ts → token.d.ts} +0 -0
@@ -1,68 +0,0 @@
1
- // @bun
2
- // src/result.ts
3
- async function tryCatch(promise) {
4
- try {
5
- const data = await promise;
6
- return { data, error: null };
7
- } catch (error) {
8
- return { data: null, error };
9
- }
10
- }
11
- function success(data) {
12
- return { data, error: null };
13
- }
14
- function failure(error) {
15
- return { data: null, error };
16
- }
17
-
18
- class PromiseResult {
19
- promise;
20
- constructor(promise) {
21
- this.promise = promise;
22
- }
23
- static create() {
24
- let resolve = () => {};
25
- let reject = () => {};
26
- const promise = new Promise((res, rej) => {
27
- resolve = res;
28
- reject = rej;
29
- });
30
- return {
31
- promise: new PromiseResult(promise),
32
- resolve,
33
- reject
34
- };
35
- }
36
- then(onfulfilled, onrejected) {
37
- return this.promise.then(onfulfilled, onrejected);
38
- }
39
- catch(onrejected) {
40
- return this.promise.catch(onrejected);
41
- }
42
- finally(onfinally) {
43
- return this.promise.finally(onfinally);
44
- }
45
- [Symbol.toStringTag] = "ResultPromise";
46
- async toResult() {
47
- try {
48
- return {
49
- data: await this.promise,
50
- error: null
51
- };
52
- } catch (err) {
53
- return {
54
- data: null,
55
- error: err
56
- };
57
- }
58
- }
59
- }
60
- export {
61
- tryCatch,
62
- success,
63
- failure,
64
- PromiseResult
65
- };
66
-
67
- //# debugId=5468463432485D3964756E2164756E21
68
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3Jlc3VsdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgdHlwZSBTdWNjZXNzPFQ+ID0ge1xuICAgIGRhdGE6IFQ7XG4gICAgZXJyb3I6IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGYWlsdXJlPEU+ID0ge1xuICAgIGRhdGE6IG51bGw7XG4gICAgZXJyb3I6IEU7XG59O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRSA9IEVycm9yPiA9IFN1Y2Nlc3M8VD4gfCBGYWlsdXJlPEU+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5Q2F0Y2g8VCwgRSA9IEVycm9yPihcbiAgICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTxSZXN1bHQ8VCwgRT4+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogZXJyb3IgYXMgRSB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VD4oZGF0YTogVCk6IFJlc3VsdDxUPiB7XG4gICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmU8RT4oZXJyb3I6IEUpOiBSZXN1bHQ8bnVsbCwgRT4ge1xuICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9taXNlUmVzdWx0PFQsIEUgPSBFcnJvcj4gaW1wbGVtZW50cyBQcm9taXNlPFQ+IHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb21pc2U6IFByb21pc2U8VD4sXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8VCwgRSA9IEVycm9yPigpOiB7IHByb21pc2U6IFByb21pc2VSZXN1bHQ8VCwgRT47IHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZDsgcmVqZWN0OiAoZXJyb3I6IEUpID0+IHZvaWQgfSB7XG4gICAgICAgIGxldCByZXNvbHZlOiAodmFsdWU6IFQpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICAgICAgbGV0IHJlamVjdDogKGVycm9yOiBFKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvbWlzZTogbmV3IFByb21pc2VSZXN1bHQ8VCwgRT4ocHJvbWlzZSksXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwgfCB1bmRlZmluZWQsIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogRSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4ob25yZWplY3RlZD86ICgocmVhc29uOiBFKSA9PiBUUmVzdWx0IHwgUHJvbWlzZUxpa2U8VFJlc3VsdD4pIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IFRSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS5jYXRjaChvbnJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS5maW5hbGx5KG9uZmluYWxseSk7XG4gICAgfVxuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9ICdSZXN1bHRQcm9taXNlJztcblxuICAgIGFzeW5jIHRvUmVzdWx0KCk6IFByb21pc2U8UmVzdWx0PFQsIEU+PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGF3YWl0IHRoaXMucHJvbWlzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgYXMgRSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOztBQVlBLGVBQXNCLFFBQXNCLENBQ3hDLFNBQ3FCO0FBQUEsRUFDckIsSUFBSTtBQUFBLElBQ0EsTUFBTSxPQUFPLE1BQU07QUFBQSxJQUNuQixPQUFPLEVBQUUsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUM3QixPQUFPLE9BQU87QUFBQSxJQUNaLE9BQU8sRUFBRSxNQUFNLE1BQU0sTUFBa0I7QUFBQTtBQUFBO0FBSXhDLFNBQVMsT0FBVSxDQUFDLE1BQW9CO0FBQUEsRUFDM0MsT0FBTyxFQUFFLE1BQU0sT0FBTyxLQUFLO0FBQUE7QUFHeEIsU0FBUyxPQUFVLENBQUMsT0FBMkI7QUFBQSxFQUNsRCxPQUFPLEVBQUUsTUFBTSxNQUFNLE1BQU07QUFBQTtBQUFBO0FBR3hCLE1BQU0sY0FBa0Q7QUFBQSxFQUV0QztBQUFBLEVBRGIsV0FBVyxDQUNFLFNBQ25CO0FBQUEsSUFEbUI7QUFBQTtBQUFBLFNBR1AsTUFBb0IsR0FBOEY7QUFBQSxJQUM1SCxJQUFJLFVBQThCLE1BQU07QUFBQSxJQUN4QyxJQUFJLFNBQTZCLE1BQU07QUFBQSxJQUN2QyxNQUFNLFVBQVUsSUFBSSxRQUFXLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDekMsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLEtBQ1o7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNILFNBQVMsSUFBSSxjQUFvQixPQUFPO0FBQUEsTUFDeEM7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBO0FBQUEsRUFHSixJQUFvQyxDQUFDLGFBQW1GLFlBQWlIO0FBQUEsSUFDck8sT0FBTyxLQUFLLFFBQVEsS0FBSyxhQUFhLFVBQVU7QUFBQTtBQUFBLEVBR3BELEtBQXNCLENBQUMsWUFBdUc7QUFBQSxJQUMxSCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVU7QUFBQTtBQUFBLEVBR3hDLE9BQU8sQ0FBQyxXQUF5RDtBQUFBLElBQzdELE9BQU8sS0FBSyxRQUFRLFFBQVEsU0FBUztBQUFBO0FBQUEsR0FHeEMsT0FBTyxlQUF1QjtBQUFBLE9BRXpCLFNBQVEsR0FBMEI7QUFBQSxJQUNwQyxJQUFJO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDSCxNQUFNLE1BQU0sS0FBSztBQUFBLFFBQ2pCLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDRixPQUFPLEtBQUs7QUFBQSxNQUNWLE9BQU87QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxNQUNYO0FBQUE7QUFBQTtBQUdaOyIsCiAgImRlYnVnSWQiOiAiNTQ2ODQ2MzQzMjQ4NUQzOTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
@@ -1,384 +0,0 @@
1
- // @bun
2
- // src/const.ts
3
- var textEncoder = new TextEncoder;
4
- var textDecoder = new TextDecoder;
5
-
6
- // src/serialize/bytebuffer.ts
7
- class Flags {
8
- value;
9
- length;
10
- constructor(options) {
11
- this.value = options.value ?? 0;
12
- this.length = options.length ?? 32;
13
- }
14
- has(position) {
15
- return (this.value & 1 << position) !== 0;
16
- }
17
- get(position) {
18
- return (this.value & 1 << position) !== 0;
19
- }
20
- ifSet(position, callback) {
21
- if (this.has(position)) {
22
- return callback();
23
- }
24
- return;
25
- }
26
- set(position, value) {
27
- if (value) {
28
- this.value |= 1 << position;
29
- } else {
30
- this.value &= ~(1 << position);
31
- }
32
- }
33
- write(writer) {
34
- const bits = new Uint8Array((this.length + 7) / 8);
35
- for (let i = 0;i < bits.length; i++) {
36
- bits[i] = this.value >> i * 8 & 255;
37
- }
38
- writer.write(bits);
39
- }
40
- static read(reader, length) {
41
- let value = 0;
42
- for (let i = 0;i < (length + 7) / 8; i++) {
43
- value |= reader.readUint8() << i * 8;
44
- }
45
- return new Flags({ value, length });
46
- }
47
- }
48
- function readFloat16(dataView, offset) {
49
- const sign = dataView.getUint16(offset) & 32768 ? -1 : 1;
50
- const exponent = (dataView.getUint16(offset) & 31744) >> 10;
51
- const mantissa = dataView.getUint16(offset) & 1023;
52
- if (exponent === 0 && mantissa === 0) {
53
- return 0;
54
- } else if (exponent === 31) {
55
- return mantissa === 0 ? Infinity * sign : NaN;
56
- } else {
57
- const normalizedExponent = exponent - 15;
58
- const normalizedMantissa = mantissa / 1024;
59
- return sign * Math.pow(2, normalizedExponent) * (1 + normalizedMantissa);
60
- }
61
- }
62
- function writeFloat16(dataView, offset, value) {
63
- if (value === 0) {
64
- dataView.setUint16(offset, 0);
65
- return;
66
- }
67
- const sign = value < 0 ? 1 : 0;
68
- value = Math.abs(value);
69
- if (!isFinite(value)) {
70
- dataView.setUint16(offset, 31744 | sign << 15);
71
- return;
72
- }
73
- const exponent = Math.floor(Math.log2(value));
74
- const mantissa = value / Math.pow(2, exponent) - 1;
75
- const normalizedExponent = exponent + 15;
76
- const normalizedMantissa = Math.round(mantissa * 1024);
77
- if (normalizedExponent <= 0) {
78
- dataView.setUint16(offset, sign << 15);
79
- } else if (normalizedExponent >= 31) {
80
- dataView.setUint16(offset, 31744 | sign << 15);
81
- } else {
82
- dataView.setUint16(offset, sign << 15 | normalizedExponent << 10 | normalizedMantissa);
83
- }
84
- }
85
-
86
- class ByteWriter {
87
- dataView;
88
- buffer;
89
- offset = 0;
90
- finished = false;
91
- constructor(init, offset) {
92
- this.offset = offset ?? 0;
93
- this.buffer = init ?? new ArrayBuffer(1024);
94
- this.dataView = new DataView(this.buffer);
95
- }
96
- static fromUint8Array(buffer) {
97
- const arrayBuffer = new ArrayBuffer(buffer.byteLength);
98
- const uint8Array = new Uint8Array(arrayBuffer);
99
- uint8Array.set(new Uint8Array(buffer));
100
- return new ByteWriter(arrayBuffer, buffer.byteLength);
101
- }
102
- allocate(length) {
103
- if (this.offset + length > this.buffer.byteLength) {
104
- const newByteLength = Math.max(this.buffer.byteLength * 2, this.offset + length);
105
- const newBuffer = new ArrayBuffer(newByteLength);
106
- new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));
107
- this.buffer = newBuffer;
108
- this.dataView = new DataView(this.buffer);
109
- }
110
- }
111
- write(data) {
112
- if (this.finished) {
113
- throw new Error("Buffer already finished");
114
- }
115
- this.allocate(data.length);
116
- new Uint8Array(this.buffer).set(data, this.offset);
117
- this.offset += data.length;
118
- return this;
119
- }
120
- writeBoolean(value) {
121
- this.allocate(1);
122
- this.dataView.setInt8(this.offset, value ? 1 : 0);
123
- this.offset += 1;
124
- return this;
125
- }
126
- writeInt8(value) {
127
- this.allocate(1);
128
- this.dataView.setInt8(this.offset, value);
129
- this.offset += 1;
130
- return this;
131
- }
132
- writeUint8(value) {
133
- this.allocate(1);
134
- this.dataView.setUint8(this.offset, value);
135
- this.offset += 1;
136
- return this;
137
- }
138
- writeInt16(value) {
139
- this.allocate(2);
140
- this.dataView.setInt16(this.offset, value);
141
- this.offset += 2;
142
- return this;
143
- }
144
- writeUint16(value) {
145
- this.allocate(2);
146
- this.dataView.setUint16(this.offset, value);
147
- this.offset += 2;
148
- return this;
149
- }
150
- writeInt32(value) {
151
- this.allocate(4);
152
- this.dataView.setInt32(this.offset, value);
153
- this.offset += 4;
154
- return this;
155
- }
156
- writeUint32(value) {
157
- this.allocate(4);
158
- this.dataView.setUint32(this.offset, value);
159
- this.offset += 4;
160
- return this;
161
- }
162
- writeInt64(value) {
163
- this.allocate(8);
164
- this.dataView.setBigInt64(this.offset, value);
165
- this.offset += 8;
166
- return this;
167
- }
168
- writeUint64(value) {
169
- this.allocate(8);
170
- this.dataView.setBigUint64(this.offset, value);
171
- this.offset += 8;
172
- return this;
173
- }
174
- writeULEB128(value) {
175
- if (value < 0) {
176
- throw new Error("Value must be non-negative");
177
- }
178
- while (value > 127) {
179
- this.allocate(1);
180
- this.dataView.setUint8(this.offset, value & 127 | 128);
181
- this.offset += 1;
182
- value >>= 7;
183
- }
184
- this.allocate(1);
185
- this.dataView.setUint8(this.offset, value & 127);
186
- this.offset += 1;
187
- return this;
188
- }
189
- writeFloat16(value) {
190
- this.allocate(2);
191
- writeFloat16(this.dataView, this.offset, value);
192
- this.offset += 2;
193
- return this;
194
- }
195
- writeFloat32(value) {
196
- this.allocate(4);
197
- this.dataView.setFloat32(this.offset, value);
198
- this.offset += 4;
199
- return this;
200
- }
201
- writeFloat64(value) {
202
- this.allocate(4);
203
- this.dataView.setFloat64(this.offset, value);
204
- this.offset += 4;
205
- return this;
206
- }
207
- writeUint8Array(value) {
208
- this.writeULEB128(value.byteLength);
209
- this.write(value);
210
- return this;
211
- }
212
- writeString(value) {
213
- this.writeUint8Array(textEncoder.encode(value));
214
- return this;
215
- }
216
- writeJSON(value) {
217
- this.writeString(JSON.stringify(value));
218
- return this;
219
- }
220
- writeFlags(flags) {
221
- flags.write(this);
222
- return this;
223
- }
224
- finish() {
225
- if (this.finished) {
226
- throw new Error("Buffer already finished");
227
- }
228
- this.finished = true;
229
- return new Uint8Array(this.buffer, 0, this.offset);
230
- }
231
- toUint8Array() {
232
- return new Uint8Array(this.buffer, 0, this.offset);
233
- }
234
- toArrayBuffer() {
235
- return this.buffer.slice(0, this.offset);
236
- }
237
- }
238
-
239
- class ByteReader {
240
- dataView;
241
- offset;
242
- finished;
243
- constructor(data) {
244
- this.dataView = data;
245
- this.offset = 0;
246
- this.finished = false;
247
- }
248
- static fromUint8Array(buffer) {
249
- const arrayBuffer = new ArrayBuffer(buffer.byteLength);
250
- const uint8Array = new Uint8Array(arrayBuffer);
251
- uint8Array.set(new Uint8Array(buffer));
252
- const dataView = new DataView(arrayBuffer);
253
- return new ByteReader(dataView);
254
- }
255
- static fromArrayBuffer(buffer) {
256
- const dataView = new DataView(buffer);
257
- return new ByteReader(dataView);
258
- }
259
- static async fromBlob(blob) {
260
- const arrayBuffer = await blob.arrayBuffer();
261
- const dataView = new DataView(arrayBuffer);
262
- return new ByteReader(dataView);
263
- }
264
- read(size) {
265
- if (this.finished) {
266
- throw new Error("Buffer already finished");
267
- }
268
- if (size < 0) {
269
- throw new Error("Size must be positive");
270
- }
271
- if (this.offset + size > this.dataView.byteLength) {
272
- throw new Error("Buffer not fully read");
273
- }
274
- const value = new Uint8Array(this.dataView.buffer, this.offset, size);
275
- this.offset += size;
276
- return value;
277
- }
278
- readBoolean() {
279
- const value = this.dataView.getInt8(this.offset);
280
- this.offset += 1;
281
- return value !== 0;
282
- }
283
- readInt8() {
284
- const value = this.dataView.getInt8(this.offset);
285
- this.offset += 1;
286
- return value;
287
- }
288
- readUint8() {
289
- const value = this.dataView.getUint8(this.offset);
290
- this.offset += 1;
291
- return value;
292
- }
293
- readInt16() {
294
- const value = this.dataView.getInt16(this.offset);
295
- this.offset += 2;
296
- return value;
297
- }
298
- readUint16() {
299
- const value = this.dataView.getUint16(this.offset);
300
- this.offset += 2;
301
- return value;
302
- }
303
- readInt32() {
304
- const value = this.dataView.getInt32(this.offset);
305
- this.offset += 4;
306
- return value;
307
- }
308
- readUint32() {
309
- const value = this.dataView.getUint32(this.offset);
310
- this.offset += 4;
311
- return value;
312
- }
313
- readInt64() {
314
- const value = this.dataView.getBigInt64(this.offset);
315
- this.offset += 8;
316
- return value;
317
- }
318
- readUint64() {
319
- const value = this.dataView.getBigUint64(this.offset);
320
- this.offset += 8;
321
- return value;
322
- }
323
- readULEB128() {
324
- let value = 0;
325
- let shift = 0;
326
- let byte;
327
- do {
328
- if (this.offset >= this.dataView.byteLength) {
329
- throw new Error("Buffer not fully read");
330
- }
331
- byte = this.dataView.getUint8(this.offset);
332
- this.offset += 1;
333
- value |= (byte & 127) << shift;
334
- shift += 7;
335
- } while ((byte & 128) !== 0);
336
- return value;
337
- }
338
- readFloat16() {
339
- const value = readFloat16(this.dataView, this.offset);
340
- this.offset += 2;
341
- return value;
342
- }
343
- readFloat32() {
344
- const value = this.dataView.getFloat32(this.offset);
345
- this.offset += 4;
346
- return value;
347
- }
348
- readFloat64() {
349
- const value = this.dataView.getFloat64(this.offset);
350
- this.offset += 8;
351
- return value;
352
- }
353
- readUint8Array() {
354
- const length = this.readULEB128();
355
- return this.read(length);
356
- }
357
- readString() {
358
- const byteArray = this.readUint8Array();
359
- return textDecoder.decode(byteArray);
360
- }
361
- readJSON() {
362
- return JSON.parse(this.readString());
363
- }
364
- readFlags(length) {
365
- return Flags.read(this, length);
366
- }
367
- finish() {
368
- if (this.finished) {
369
- throw new Error("Buffer already finished");
370
- }
371
- this.finished = true;
372
- if (this.offset !== this.dataView.byteLength) {
373
- throw new Error("Buffer not fully read");
374
- }
375
- }
376
- }
377
- export {
378
- Flags,
379
- ByteWriter,
380
- ByteReader
381
- };
382
-
383
- //# debugId=0BD8A874C2DEF5BC64756E2164756E21
384
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnN0LnRzIiwgIi4uLy4uL3NyYy9zZXJpYWxpemUvYnl0ZWJ1ZmZlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgY29uc3QgdGV4dEVuY29kZXI6IFRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5leHBvcnQgY29uc3QgdGV4dERlY29kZXI6IFRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4iLAogICAgImltcG9ydCB7IHRleHREZWNvZGVyLCB0ZXh0RW5jb2RlciB9IGZyb20gJy4uL2NvbnN0LmpzJztcbmltcG9ydCB7IEpzb25UeXBlIH0gZnJvbSAnLi9zZXJpYWxpemVyLmpzJztcblxuZXhwb3J0IGNsYXNzIEZsYWdzIHtcbiAgICBwcml2YXRlIHZhbHVlOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBsZW5ndGg6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgdmFsdWU/OiBudW1iZXI7IGxlbmd0aD86IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlID8/IDA7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggPz8gMzI7XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhwb3NpdGlvbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSAmICgxIDw8IHBvc2l0aW9uKSkgIT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwb3NpdGlvbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSAmICgxIDw8IHBvc2l0aW9uKSkgIT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGlmU2V0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLmhhcyhwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwb3NpdGlvbjogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgfD0gMSA8PCBwb3NpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJj0gfigxIDw8IHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZSh3cml0ZXI6IEJ5dGVXcml0ZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYml0cyA9IG5ldyBVaW50OEFycmF5KCh0aGlzLmxlbmd0aCArIDcpIC8gOCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYml0c1tpXSA9ICh0aGlzLnZhbHVlID4+IChpICogOCkpICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIud3JpdGUoYml0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkKHJlYWRlcjogQnl0ZVJlYWRlciwgbGVuZ3RoOiBudW1iZXIpOiBGbGFncyB7XG4gICAgICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGxlbmd0aCArIDcpIC8gODsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZSB8PSByZWFkZXIucmVhZFVpbnQ4KCkgPDwgKGkgKiA4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEZsYWdzKHsgdmFsdWUsIGxlbmd0aCB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdDE2KGRhdGFWaWV3OiBEYXRhVmlldywgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHNpZ24gPSAoZGF0YVZpZXcuZ2V0VWludDE2KG9mZnNldCkgJiAweDgwMDApID8gLTEgOiAxO1xuICAgIGNvbnN0IGV4cG9uZW50ID0gKGRhdGFWaWV3LmdldFVpbnQxNihvZmZzZXQpICYgMHg3YzAwKSA+PiAxMDtcbiAgICBjb25zdCBtYW50aXNzYSA9IChkYXRhVmlldy5nZXRVaW50MTYob2Zmc2V0KSAmIDB4MDNmZik7XG4gICAgaWYgKGV4cG9uZW50ID09PSAwICYmIG1hbnRpc3NhID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPT09IDB4MWYpIHtcbiAgICAgICAgcmV0dXJuIG1hbnRpc3NhID09PSAwID8gSW5maW5pdHkgKiBzaWduIDogTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHBvbmVudCA9IGV4cG9uZW50IC0gMTU7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNYW50aXNzYSA9IG1hbnRpc3NhIC8gMTAyNDtcbiAgICAgICAgcmV0dXJuIHNpZ24gKiBNYXRoLnBvdygyLCBub3JtYWxpemVkRXhwb25lbnQpICogKDEgKyBub3JtYWxpemVkTWFudGlzc2EpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdDE2KGRhdGFWaWV3OiBEYXRhVmlldywgb2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KG9mZnNldCwgMCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2lnbiA9IHZhbHVlIDwgMCA/IDEgOiAwO1xuICAgIHZhbHVlID0gTWF0aC5hYnModmFsdWUpO1xuICAgIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihvZmZzZXQsIDB4N2MwMCB8IChzaWduIDw8IDE1KSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nMih2YWx1ZSkpO1xuICAgIGNvbnN0IG1hbnRpc3NhID0gdmFsdWUgLyBNYXRoLnBvdygyLCBleHBvbmVudCkgLSAxO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHBvbmVudCA9IGV4cG9uZW50ICsgMTU7XG4gICAgY29uc3Qgbm9ybWFsaXplZE1hbnRpc3NhID0gTWF0aC5yb3VuZChtYW50aXNzYSAqIDEwMjQpO1xuICAgIGlmIChub3JtYWxpemVkRXhwb25lbnQgPD0gMCkge1xuICAgICAgICBkYXRhVmlldy5zZXRVaW50MTYob2Zmc2V0LCBzaWduIDw8IDE1KTtcbiAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRFeHBvbmVudCA+PSAweDFmKSB7XG4gICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihvZmZzZXQsIDB4N2MwMCB8IChzaWduIDw8IDE1KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KG9mZnNldCwgKHNpZ24gPDwgMTUpIHwgKG5vcm1hbGl6ZWRFeHBvbmVudCA8PCAxMCkgfCBub3JtYWxpemVkTWFudGlzc2EpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ5dGVXcml0ZXIge1xuICAgIHByaXZhdGUgZGF0YVZpZXc6IERhdGFWaWV3O1xuICAgIHByaXZhdGUgYnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICBwcml2YXRlIG9mZnNldCA9IDA7XG4gICAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoaW5pdD86IEFycmF5QnVmZmVyLCBvZmZzZXQ/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQgPz8gMDtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBpbml0ID8/IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tVWludDhBcnJheShidWZmZXI6IFVpbnQ4QXJyYXkpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICB1aW50OEFycmF5LnNldChuZXcgVWludDhBcnJheShidWZmZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCeXRlV3JpdGVyKGFycmF5QnVmZmVyLCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGxvY2F0ZShsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vZmZzZXQgKyBsZW5ndGggPiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdCeXRlTGVuZ3RoID0gTWF0aC5tYXgodGhpcy5idWZmZXIuYnl0ZUxlbmd0aCAqIDIsIHRoaXMub2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihuZXdCeXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KG5ld0J1ZmZlcikuc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyKSk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ld0J1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlKGRhdGE6IFVpbnQ4QXJyYXkpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnVmZmVyIGFscmVhZHkgZmluaXNoZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFsbG9jYXRlKGRhdGEubGVuZ3RoKTtcbiAgICAgICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIpLnNldChkYXRhLCB0aGlzLm9mZnNldCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVCb29sZWFuKHZhbHVlOiBib29sZWFuKTogQnl0ZVdyaXRlciB7XG4gICAgICAgIHRoaXMuYWxsb2NhdGUoMSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50OCh0aGlzLm9mZnNldCwgdmFsdWUgPyAxIDogMCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUludDgodmFsdWU6IG51bWJlcik6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLmFsbG9jYXRlKDEpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDgodGhpcy5vZmZzZXQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVWludDgodmFsdWU6IG51bWJlcik6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLmFsbG9jYXRlKDEpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQ4KHRoaXMub2Zmc2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUludDE2KHZhbHVlOiBudW1iZXIpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgdGhpcy5hbGxvY2F0ZSgyKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQxNih0aGlzLm9mZnNldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVVaW50MTYodmFsdWU6IG51bWJlcik6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLmFsbG9jYXRlKDIpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLm9mZnNldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVJbnQzMih2YWx1ZTogbnVtYmVyKTogQnl0ZVdyaXRlciB7XG4gICAgICAgIHRoaXMuYWxsb2NhdGUoNCk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5vZmZzZXQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVWludDMyKHZhbHVlOiBudW1iZXIpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgdGhpcy5hbGxvY2F0ZSg0KTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50MzIodGhpcy5vZmZzZXQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlSW50NjQodmFsdWU6IGJpZ2ludCk6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLmFsbG9jYXRlKDgpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LnNldEJpZ0ludDY0KHRoaXMub2Zmc2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVVpbnQ2NCh2YWx1ZTogYmlnaW50KTogQnl0ZVdyaXRlciB7XG4gICAgICAgIHRoaXMuYWxsb2NhdGUoOCk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0QmlnVWludDY0KHRoaXMub2Zmc2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVVMRUIxMjgodmFsdWU6IG51bWJlcik6IEJ5dGVXcml0ZXIge1xuICAgICAgICAvLyBVbnNpZ25lZCBMRUIxMjhcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh2YWx1ZSA+IDB4N2YpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb2NhdGUoMSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQ4KHRoaXMub2Zmc2V0LCAodmFsdWUgJiAweDdmKSB8IDB4ODApO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXQgKz0gMTtcbiAgICAgICAgICAgIHZhbHVlID4+PSA3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb2NhdGUoMSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDgodGhpcy5vZmZzZXQsIHZhbHVlICYgMHg3Zik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZUZsb2F0MTYodmFsdWU6IG51bWJlcik6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLmFsbG9jYXRlKDIpO1xuICAgICAgICB3cml0ZUZsb2F0MTYodGhpcy5kYXRhVmlldywgdGhpcy5vZmZzZXQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlRmxvYXQzMih2YWx1ZTogbnVtYmVyKTogQnl0ZVdyaXRlciB7XG4gICAgICAgIHRoaXMuYWxsb2NhdGUoNCk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMih0aGlzLm9mZnNldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVGbG9hdDY0KHZhbHVlOiBudW1iZXIpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgdGhpcy5hbGxvY2F0ZSg0KTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0KHRoaXMub2Zmc2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVVpbnQ4QXJyYXkodmFsdWU6IFVpbnQ4QXJyYXkpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgdGhpcy53cml0ZVVMRUIxMjgodmFsdWUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMud3JpdGUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IEJ5dGVXcml0ZXIge1xuICAgICAgICB0aGlzLndyaXRlVWludDhBcnJheSh0ZXh0RW5jb2Rlci5lbmNvZGUodmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlSlNPTih2YWx1ZTogSnNvblR5cGUpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgdGhpcy53cml0ZVN0cmluZyhKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVGbGFncyhmbGFnczogRmxhZ3MpOiBCeXRlV3JpdGVyIHtcbiAgICAgICAgZmxhZ3Mud3JpdGUodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5pc2goKTogVWludDhBcnJheSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1ZmZlciBhbHJlYWR5IGZpbmlzaGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgMCwgdGhpcy5vZmZzZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1VpbnQ4QXJyYXkoKTogVWludDhBcnJheSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgMCwgdGhpcy5vZmZzZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0FycmF5QnVmZmVyKCk6IEFycmF5QnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnNsaWNlKDAsIHRoaXMub2Zmc2V0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCeXRlUmVhZGVyIHtcbiAgICBwcml2YXRlIGRhdGFWaWV3OiBEYXRhVmlldztcbiAgICBwcml2YXRlIG9mZnNldDogbnVtYmVyO1xuICAgIHByaXZhdGUgZmluaXNoZWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGRhdGE6IERhdGFWaWV3KSB7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBkYXRhO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21VaW50OEFycmF5KGJ1ZmZlcjogVWludDhBcnJheSk6IEJ5dGVSZWFkZXIge1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICAgIHVpbnQ4QXJyYXkuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBuZXcgQnl0ZVJlYWRlcihkYXRhVmlldyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQXJyYXlCdWZmZXIoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IEJ5dGVSZWFkZXIge1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xuICAgICAgICByZXR1cm4gbmV3IEJ5dGVSZWFkZXIoZGF0YVZpZXcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgZnJvbUJsb2IoYmxvYjogQmxvYik6IFByb21pc2U8Qnl0ZVJlYWRlcj4ge1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgICAgICByZXR1cm4gbmV3IEJ5dGVSZWFkZXIoZGF0YVZpZXcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkKHNpemU6IG51bWJlcik6IFVpbnQ4QXJyYXkge1xuICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIgYWxyZWFkeSBmaW5pc2hlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXplIG11c3QgYmUgcG9zaXRpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vZmZzZXQgKyBzaXplID4gdGhpcy5kYXRhVmlldy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1ZmZlciBub3QgZnVsbHkgcmVhZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhVmlldy5idWZmZXIsIHRoaXMub2Zmc2V0LCBzaXplKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkQm9vbGVhbigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGFWaWV3LmdldEludDgodGhpcy5vZmZzZXQpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAxO1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRJbnQ4KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhVmlldy5nZXRJbnQ4KHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkVWludDgoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkSW50MTYoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGFWaWV3LmdldEludDE2KHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMjtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkVWludDE2KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MTYodGhpcy5vZmZzZXQpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRJbnQzMigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5vZmZzZXQpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRVaW50MzIoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMih0aGlzLm9mZnNldCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZEludDY0KCk6IGJpZ2ludCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhVmlldy5nZXRCaWdJbnQ2NCh0aGlzLm9mZnNldCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZFVpbnQ2NCgpOiBiaWdpbnQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YVZpZXcuZ2V0QmlnVWludDY0KHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkVUxFQjEyOCgpOiBudW1iZXIge1xuICAgICAgICAvLyBVbnNpZ25lZCBMRUIxMjhcbiAgICAgICAgbGV0IHZhbHVlID0gMDtcbiAgICAgICAgbGV0IHNoaWZ0ID0gMDtcbiAgICAgICAgbGV0IGJ5dGU6IG51bWJlcjtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0ID49IHRoaXMuZGF0YVZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnVmZmVyIG5vdCBmdWxseSByZWFkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBieXRlID0gdGhpcy5kYXRhVmlldy5nZXRVaW50OCh0aGlzLm9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSAxO1xuICAgICAgICAgICAgdmFsdWUgfD0gKGJ5dGUgJiAwYjAxMTExMTExKSA8PCBzaGlmdDtcbiAgICAgICAgICAgIHNoaWZ0ICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKChieXRlICYgMGIxMDAwMDAwMCkgIT09IDApO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRGbG9hdDE2KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVhZEZsb2F0MTYodGhpcy5kYXRhVmlldywgdGhpcy5vZmZzZXQpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRGbG9hdDMyKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhVmlldy5nZXRGbG9hdDMyKHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkRmxvYXQ2NCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQ2NCh0aGlzLm9mZnNldCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZFVpbnQ4QXJyYXkoKTogVWludDhBcnJheSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucmVhZFVMRUIxMjgoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZChsZW5ndGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IHRoaXMucmVhZFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVyLmRlY29kZShieXRlQXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkSlNPTjxUIGV4dGVuZHMgSnNvblR5cGU+KCk6IFQge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLnJlYWRTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRGbGFncyhsZW5ndGg6IG51bWJlcik6IEZsYWdzIHtcbiAgICAgICAgcmV0dXJuIEZsYWdzLnJlYWQodGhpcywgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIgYWxyZWFkeSBmaW5pc2hlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5vZmZzZXQgIT09IHRoaXMuZGF0YVZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIgbm90IGZ1bGx5IHJlYWQnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBQU8sSUFBTSxjQUEyQixJQUFJO0FBQ3JDLElBQU0sY0FBMkIsSUFBSTs7O0FDRXJDLE1BQU0sTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQUEsRUFFUixXQUFXLENBQUMsU0FBOEM7QUFBQSxJQUN0RCxLQUFLLFFBQVEsUUFBUSxTQUFTO0FBQUEsSUFDOUIsS0FBSyxTQUFTLFFBQVEsVUFBVTtBQUFBO0FBQUEsRUFHN0IsR0FBRyxDQUFDLFVBQTJCO0FBQUEsSUFDbEMsUUFBUSxLQUFLLFFBQVMsS0FBSyxjQUFlO0FBQUE7QUFBQSxFQUd2QyxHQUFHLENBQUMs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QUdKLFVBQVUsR0FBVztBQUFBLElBQ3hCLE1BQU0sUUFBUSxLQUFLLFNBQVMsYUFBYSxLQUFLLE1BQU07QUFBQSxJQUNwRCxLQUFLLFVBQVU7QUFBQSxJQUNmLE9BQU87QUFBQTtBQUFBLEVBR0osV0FBVyxHQUFXO0FBQUEsSUFFekIsSUFBSSxRQUFRO0FBQUEsSUFDWixJQUFJLFFBQVE7QUFBQSxJQUNaLElBQUk7QUFBQSxJQUNKLEdBQUc7QUFBQSxNQUNDLElBQUksS0FBSyxVQUFVLEtBQUssU0FBUyxZQUFZO0FBQUEsUUFDekMsTUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsTUFDM0M7QUFBQSxNQUNBLE9BQU8sS0FBSyxTQUFTLFNBQVMsS0FBSyxNQUFNO0FBQUEsTUFDekMsS0FBSyxVQUFVO0FBQUEsTUFDZixVQUFVLE9BQU8sUUFBZTtBQUFBLE1BQ2hDLFNBQVM7QUFBQSxJQUNiLFVBQ1EsT0FBTyxTQUFnQjtBQUFBLElBQy9CLE9BQU87QUFBQTtBQUFBLEVBR0osV0FBVyxHQUFXO0FBQUEsSUFDekIsTUFBTSxRQUFRLFlBQVksS0FBSyxVQUFVLEtBQUssTUFBTTtBQUFBLElBQ3BELEtBQUssVUFBVTtBQUFBLElBQ2YsT0FBTztBQUFBO0FBQUEsRUFHSixXQUFXLEdBQVc7QUFBQSxJQUN6QixNQUFNLFFBQVEsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNO0FBQUEsSUFDbEQsS0FBSyxVQUFVO0FBQUEsSUFDZixPQUFPO0FBQUE7QUFBQSxFQUdKLFdBQVcsR0FBVztBQUFBLElBQ3pCLE1BQU0sUUFBUSxLQUFLLFNBQVMsV0FBVyxLQUFLLE1BQU07QUFBQSxJQUNsRCxLQUFLLFVBQVU7QUFBQSxJQUNmLE9BQU87QUFBQTtBQUFBLEVBR0osY0FBYyxHQUFlO0FBQUEsSUFDaEMsTUFBTSxTQUFTLEtBQUssWUFBWTtBQUFBLElBQ2hDLE9BQU8sS0FBSyxLQUFLLE1BQU07QUFBQTtBQUFBLEVBR3BCLFVBQVUsR0FBVztBQUFBLElBQ3hCLE1BQU0sWUFBWSxLQUFLLGVBQWU7QUFBQSxJQUN0QyxPQUFPLFlBQVksT0FBTyxTQUFTO0FBQUE7QUFBQSxFQUdoQyxRQUE0QixHQUFNO0FBQUEsSUFDckMsT0FBTyxLQUFLLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQTtBQUFBLEVBR2hDLFNBQVMsQ0FBQyxRQUF1QjtBQUFBLElBQ3BDLE9BQU8sTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUFBO0FBQUEsRUFHM0IsTUFBTSxHQUFTO0FBQUEsSUFDbEIsSUFBSSxLQUFLLFVBQVU7QUFBQSxNQUNmLE1BQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLElBQzdDO0FBQUEsSUFDQSxLQUFLLFdBQVc7QUFBQSxJQUNoQixJQUFJLEtBQUssV0FBVyxLQUFLLFNBQVMsWUFBWTtBQUFBLE1BQzFDLE1BQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLElBQzNDO0FBQUE7QUFFUjsiLAogICJkZWJ1Z0lkIjogIjBCRDhBODc0QzJERUY1QkM2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9