@sagl/server 0.0.0-stage → 0.1.0-next.49

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/dist/actions.d.ts +46 -0
  4. package/dist/actions.js +80 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/animations.d.ts +32 -0
  7. package/dist/animations.js +95 -0
  8. package/dist/animations.js.map +1 -0
  9. package/dist/audio.d.ts +180 -0
  10. package/dist/audio.js +353 -0
  11. package/dist/audio.js.map +1 -0
  12. package/dist/audio_effects.d.ts +219 -0
  13. package/dist/audio_effects.js +84 -0
  14. package/dist/audio_effects.js.map +1 -0
  15. package/dist/camera.d.ts +188 -0
  16. package/dist/camera.js +247 -0
  17. package/dist/camera.js.map +1 -0
  18. package/dist/claims.d.ts +27 -0
  19. package/dist/claims.js +48 -0
  20. package/dist/claims.js.map +1 -0
  21. package/dist/commands.d.ts +135 -0
  22. package/dist/commands.js +373 -0
  23. package/dist/commands.js.map +1 -0
  24. package/dist/console.d.ts +21 -0
  25. package/dist/console.js +100 -0
  26. package/dist/console.js.map +1 -0
  27. package/dist/constants.d.ts +654 -0
  28. package/dist/constants.js +657 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/cutscene.d.ts +47 -0
  31. package/dist/cutscene.js +190 -0
  32. package/dist/cutscene.js.map +1 -0
  33. package/dist/draw.d.ts +106 -0
  34. package/dist/draw.js +132 -0
  35. package/dist/draw.js.map +1 -0
  36. package/dist/effects.d.ts +91 -0
  37. package/dist/effects.js +116 -0
  38. package/dist/effects.js.map +1 -0
  39. package/dist/gangzones.d.ts +47 -0
  40. package/dist/gangzones.js +122 -0
  41. package/dist/gangzones.js.map +1 -0
  42. package/dist/geo.d.ts +11 -0
  43. package/dist/geo.js +25 -0
  44. package/dist/geo.js.map +1 -0
  45. package/dist/hud.d.ts +159 -0
  46. package/dist/hud.js +247 -0
  47. package/dist/hud.js.map +1 -0
  48. package/dist/index.d.ts +40 -0
  49. package/dist/index.js +43 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interaction.d.ts +81 -0
  52. package/dist/interaction.js +143 -0
  53. package/dist/interaction.js.map +1 -0
  54. package/dist/junctions.d.ts +1 -0
  55. package/dist/junctions.js +330 -0
  56. package/dist/junctions.js.map +1 -0
  57. package/dist/map.d.ts +55 -0
  58. package/dist/map.js +71 -0
  59. package/dist/map.js.map +1 -0
  60. package/dist/menu.d.ts +96 -0
  61. package/dist/menu.js +129 -0
  62. package/dist/menu.js.map +1 -0
  63. package/dist/mission.d.ts +482 -0
  64. package/dist/mission.js +1258 -0
  65. package/dist/mission.js.map +1 -0
  66. package/dist/models.d.ts +56 -0
  67. package/dist/models.js +71 -0
  68. package/dist/models.js.map +1 -0
  69. package/dist/modshop.d.ts +229 -0
  70. package/dist/modshop.js +904 -0
  71. package/dist/modshop.js.map +1 -0
  72. package/dist/modshop_data.d.ts +44 -0
  73. package/dist/modshop_data.js +287 -0
  74. package/dist/modshop_data.js.map +1 -0
  75. package/dist/native.d.ts +809 -0
  76. package/dist/native.js +27 -0
  77. package/dist/native.js.map +1 -0
  78. package/dist/objects.d.ts +249 -0
  79. package/dist/objects.js +455 -0
  80. package/dist/objects.js.map +1 -0
  81. package/dist/paint.d.ts +124 -0
  82. package/dist/paint.js +84 -0
  83. package/dist/paint.js.map +1 -0
  84. package/dist/paynspray.d.ts +44 -0
  85. package/dist/paynspray.js +177 -0
  86. package/dist/paynspray.js.map +1 -0
  87. package/dist/ped.d.ts +335 -0
  88. package/dist/ped.js +536 -0
  89. package/dist/ped.js.map +1 -0
  90. package/dist/player.d.ts +685 -0
  91. package/dist/player.js +1163 -0
  92. package/dist/player.js.map +1 -0
  93. package/dist/screeneffects.d.ts +99 -0
  94. package/dist/screeneffects.js +257 -0
  95. package/dist/screeneffects.js.map +1 -0
  96. package/dist/scripts.d.ts +69 -0
  97. package/dist/scripts.js +125 -0
  98. package/dist/scripts.js.map +1 -0
  99. package/dist/server.d.ts +713 -0
  100. package/dist/server.js +1080 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/shopblips.d.ts +9 -0
  103. package/dist/shopblips.js +30 -0
  104. package/dist/shopblips.js.map +1 -0
  105. package/dist/special.d.ts +33 -0
  106. package/dist/special.js +26 -0
  107. package/dist/special.js.map +1 -0
  108. package/dist/splash.d.ts +42 -0
  109. package/dist/splash.js +55 -0
  110. package/dist/splash.js.map +1 -0
  111. package/dist/text.d.ts +19 -0
  112. package/dist/text.js +25 -0
  113. package/dist/text.js.map +1 -0
  114. package/dist/ui.d.ts +141 -0
  115. package/dist/ui.js +243 -0
  116. package/dist/ui.js.map +1 -0
  117. package/dist/vehicle.d.ts +306 -0
  118. package/dist/vehicle.js +612 -0
  119. package/dist/vehicle.js.map +1 -0
  120. package/dist/vehiclecolors.d.ts +26 -0
  121. package/dist/vehiclecolors.js +49 -0
  122. package/dist/vehiclecolors.js.map +1 -0
  123. package/dist/world.d.ts +222 -0
  124. package/dist/world.js +227 -0
  125. package/dist/world.js.map +1 -0
  126. package/dist/zone.d.ts +89 -0
  127. package/dist/zone.js +140 -0
  128. package/dist/zone.js.map +1 -0
  129. package/package.json +33 -4
@@ -0,0 +1,330 @@
1
+ // Generated from the game's map (its traffic lights' placements, grouped by
2
+ // junction): each junction with lights, its middle (x, y, z). Every city.
3
+ export const JUNCTIONS = [
4
+ [-2563.7, 2331.4, 7.3],
5
+ [-2774.9, 2360.3, 78.4],
6
+ [-2729.3, 2354.5, 74.2],
7
+ [-2466.1, 2331.1, 7.2],
8
+ [-2504.2, 2421.5, 19.0],
9
+ [-2563.7, 161.1, 3.3],
10
+ [-2648.6, 221.1, 3.3],
11
+ [-2578.3, 225.9, 8.5],
12
+ [-2645.0, 284.9, 3.3],
13
+ [-2604.6, 341.4, 3.3],
14
+ [-2542.9, 338.9, 18.8],
15
+ [-2790.6, -483.1, 9.3],
16
+ [-2602.4, 154.3, 3.3],
17
+ [-1904.4, -580.0, 26.7],
18
+ [-1874.0, -575.3, 26.7],
19
+ [-1818.7, -579.9, 18.6],
20
+ [-2004.2, 320.3, 37.2],
21
+ [-1750.4, 309.3, 9.3],
22
+ [-1853.0, 414.6, 19.2],
23
+ [-1819.7, 375.8, 19.2],
24
+ [-1797.8, 353.9, 19.2],
25
+ [-2225.2, 565.8, 37.2],
26
+ [-2142.9, 565.7, 37.2],
27
+ [-2142.9, 503.9, 37.2],
28
+ [-2085.9, 566.2, 37.2],
29
+ [-2008.2, 566.9, 37.2],
30
+ [-2004.2, 504.8, 37.2],
31
+ [-2256.0, -190.3, 37.4],
32
+ [-1934.7, -584.5, 26.7],
33
+ [-2019.6, -295.2, 37.6],
34
+ [-2256.0, -70.3, 37.4],
35
+ [-2142.6, 731.6, 71.6],
36
+ [-2088.2, 727.2, 71.6],
37
+ [-1899.3, 605.9, 37.2],
38
+ [-2004.1, 731.1, 47.5],
39
+ [-1899.3, 731.6, 47.5],
40
+ [-2142.4, 808.2, 71.5],
41
+ [-2142.9, 918.5, 82.1],
42
+ [-2006.2, 808.9, 47.5],
43
+ [-1900.8, 848.3, 37.3],
44
+ [-1999.5, 858.2, 47.6],
45
+ [-1999.4, 938.5, 47.6],
46
+ [-2000.8, 903.8, 47.5],
47
+ [-1901.1, 928.9, 37.3],
48
+ [-1715.4, 733.7, 26.8],
49
+ [-1792.3, 853.6, 27.0],
50
+ [-1794.0, 924.7, 26.9],
51
+ [-1714.2, 847.5, 27.0],
52
+ [-1714.3, 921.5, 27.0],
53
+ [-1572.4, 852.6, 9.4],
54
+ [-1572.3, 918.0, 9.3],
55
+ [-2147.9, 1019.1, 82.1],
56
+ [-2148.0, 1091.3, 82.0],
57
+ [-2007.7, 1043.0, 57.8],
58
+ [-2147.4, 1165.2, 57.8],
59
+ [-1888.3, 1044.0, 47.5],
60
+ [-1970.3, 1089.3, 57.8],
61
+ [-1882.7, 1103.5, 47.5],
62
+ [-1794.4, 1103.2, 47.4],
63
+ [-1966.2, 1169.1, 47.5],
64
+ [-1884.6, 1177.0, 47.4],
65
+ [-1793.5, 1182.4, 27.2],
66
+ [-1721.2, 1103.0, 47.5],
67
+ [-1715.8, 1183.2, 27.2],
68
+ [-1728.6, 1294.3, 9.3],
69
+ [-1631.6, 1191.7, 9.3],
70
+ [-2748.1, 1003.6, 56.5],
71
+ [-2606.9, 1004.3, 80.3],
72
+ [-2722.6, 1092.5, 48.5],
73
+ [-2529.8, 1005.7, 80.2],
74
+ [-2465.6, 1210.6, 37.3],
75
+ [-2365.0, 1180.9, 43.2],
76
+ [-2451.3, 1363.2, 9.2],
77
+ [-2362.7, 1363.2, 9.3],
78
+ [-2750.9, 810.1, 55.1],
79
+ [-2748.1, 883.3, 68.4],
80
+ [-2607.3, 809.0, 52.0],
81
+ [-2607.1, 908.4, 67.0],
82
+ [-2527.1, 808.3, 52.1],
83
+ [-2526.8, 908.4, 67.0],
84
+ [-2386.7, 808.0, 37.3],
85
+ [-2255.3, 808.1, 51.6],
86
+ [-2255.3, 918.3, 68.7],
87
+ [-2255.3, 957.8, 68.8],
88
+ [-2849.9, 465.4, 6.4],
89
+ [-2706.4, 468.2, 6.3],
90
+ [-2606.9, 468.2, 16.6],
91
+ [-2748.1, 564.5, 16.6],
92
+ [-2606.8, 565.8, 16.6],
93
+ [-2747.1, 708.5, 43.6],
94
+ [-2605.6, 711.4, 30.0],
95
+ [-2527.3, 565.7, 16.6],
96
+ [-2386.6, 565.9, 26.9],
97
+ [-2255.3, 578.6, 37.3],
98
+ [-2382.9, 667.1, 37.2],
99
+ [-2261.8, 667.5, 51.5],
100
+ [-2526.9, 708.3, 30.0],
101
+ [-2389.0, 709.8, 37.2],
102
+ [-2255.3, 731.1, 51.6],
103
+ [2360.2, 2001.5, 12.8],
104
+ [2338.2, 2031.7, 13.0],
105
+ [2361.9, 2129.8, 12.8],
106
+ [2338.6, 2157.7, 12.8],
107
+ [1777.0, 829.0, 12.8],
108
+ [1811.7, 822.9, 12.9],
109
+ [1783.5, 863.4, 12.9],
110
+ [1817.5, 857.7, 13.0],
111
+ [2040.2, 1283.1, 13.0],
112
+ [2040.2, 1463.1, 13.0],
113
+ [2050.2, 1723.1, 12.9],
114
+ [2074.6, 1423.4, 13.0],
115
+ [2074.6, 1363.4, 13.0],
116
+ [2074.6, 1523.4, 13.0],
117
+ [2101.5, 1763.6, 13.0],
118
+ [2042.5, 831.0, 9.0],
119
+ [2082.3, 860.5, 9.1],
120
+ [2040.2, 983.7, 13.0],
121
+ [2040.2, 1103.7, 13.0],
122
+ [2074.6, 963.4, 13.0],
123
+ [2074.6, 1183.4, 13.0],
124
+ [2154.8, 1883.2, 13.0],
125
+ [2119.8, 2032.4, 13.0],
126
+ [2119.8, 2123.2, 13.0],
127
+ [2154.8, 2012.0, 13.0],
128
+ [2154.8, 2123.1, 13.0],
129
+ [1821.8, -2162.5, 15.6],
130
+ [1962.6, -1974.1, 15.5],
131
+ [1962.0, -1928.0, 15.5],
132
+ [2221.4, -2496.6, 15.8],
133
+ [2323.2, -2338.8, 15.8],
134
+ [2198.9, -2165.5, 15.8],
135
+ [2286.3, -2294.6, 15.8],
136
+ [2293.5, -2253.5, 15.8],
137
+ [2283.5, -2080.5, 15.8],
138
+ [2217.7, -1971.3, 15.8],
139
+ [2314.5, -1966.6, 15.8],
140
+ [2410.2, -1980.0, 15.8],
141
+ [2420.9, -2013.9, 15.8],
142
+ [2085.4, -1893.4, 15.8],
143
+ [2218.7, -1894.3, 15.8],
144
+ [2420.9, -1936.3, 15.8],
145
+ [2676.7, -2500.0, 15.8],
146
+ [2679.7, -2412.4, 15.8],
147
+ [2713.0, -2156.7, 13.3],
148
+ [2515.7, -1928.6, 15.8],
149
+ [2714.1, -2049.2, 15.8],
150
+ [2714.1, -1999.4, 15.8],
151
+ [2816.2, -2045.3, 13.4],
152
+ [2527.8, -1733.9, 15.8],
153
+ [2639.5, -1731.6, 13.2],
154
+ [2646.6, -1663.9, 13.2],
155
+ [2718.5, -1640.0, 15.5],
156
+ [2848.0, -1664.0, 13.1],
157
+ [2815.8, -1651.9, 13.1],
158
+ [2716.9, -1515.0, 32.5],
159
+ [2743.3, -1481.8, 32.5],
160
+ [2218.8, -1760.0, 15.6],
161
+ [2222.0, -1725.0, 15.7],
162
+ [2335.3, -1726.5, 15.8],
163
+ [2225.5, -1653.4, 17.5],
164
+ [2342.8, -1659.0, 15.7],
165
+ [2342.5, -1564.0, 26.1],
166
+ [2342.4, -1504.1, 26.1],
167
+ [2424.3, -1737.8, 15.9],
168
+ [2420.6, -1527.0, 26.3],
169
+ [2436.7, -1497.0, 26.2],
170
+ [2296.1, -1379.2, 26.2],
171
+ [2356.9, -1384.4, 26.3],
172
+ [2309.0, -1293.3, 26.2],
173
+ [2360.6, -1303.6, 26.3],
174
+ [2375.2, -1258.6, 26.1],
175
+ [2440.9, -1444.4, 26.2],
176
+ [2453.5, -1254.1, 26.1],
177
+ [2504.9, -1438.8, 30.8],
178
+ [2518.6, -1262.1, 37.3],
179
+ [2313.4, -1153.1, 29.2],
180
+ [2380.3, -1163.6, 29.9],
181
+ [2458.5, -1189.6, 38.9],
182
+ [2568.5, -1258.9, 48.2],
183
+ [2636.5, -1451.9, 32.5],
184
+ [2648.4, -1397.4, 32.5],
185
+ [2642.7, -1256.3, 52.1],
186
+ [2716.9, -1265.1, 61.9],
187
+ [2743.6, -1250.6, 61.9],
188
+ [2864.1, -1393.2, 13.3],
189
+ [2578.4, -1189.7, 64.1],
190
+ [2648.3, -1063.8, 71.8],
191
+ [2717.0, -1190.6, 71.4],
192
+ [2857.0, -1140.9, 13.1],
193
+ [1853.9, -1340.4, 15.6],
194
+ [1987.7, -1344.8, 26.1],
195
+ [2066.7, -1333.9, 26.0],
196
+ [2073.9, -1287.4, 26.0],
197
+ [1853.9, -1260.7, 15.6],
198
+ [1975.7, -1257.1, 26.1],
199
+ [2064.7, -1247.9, 26.1],
200
+ [2074.3, -1215.4, 26.1],
201
+ [1870.7, -1134.0, 26.1],
202
+ [1970.4, -1135.8, 28.1],
203
+ [1982.5, -1052.6, 26.7],
204
+ [2064.7, -1136.1, 26.0],
205
+ [2071.7, -1094.5, 27.0],
206
+ [1825.4, -1752.0, 15.6],
207
+ [1965.4, -1812.3, 15.6],
208
+ [1941.3, -1748.5, 15.6],
209
+ [2001.6, -1748.5, 15.6],
210
+ [2005.5, -1673.7, 15.6],
211
+ [1821.6, -1612.3, 15.6],
212
+ [1849.3, -1462.2, 15.8],
213
+ [2048.4, -1609.6, 15.6],
214
+ [1986.6, -1458.8, 15.6],
215
+ [2121.4, -1389.0, 26.1],
216
+ [2166.7, -1380.6, 26.2],
217
+ [2166.9, -1300.8, 26.0],
218
+ [2212.8, -1388.2, 26.1],
219
+ [2265.0, -1379.1, 26.2],
220
+ [2267.3, -1301.1, 26.0],
221
+ [2175.3, -1221.0, 26.0],
222
+ [2184.2, -1121.2, 27.2],
223
+ [2222.0, -1121.2, 27.8],
224
+ [2267.3, -1220.9, 26.0],
225
+ [2271.3, -1151.7, 28.9],
226
+ [2077.8, -1812.6, 15.6],
227
+ [2088.6, -1750.6, 15.7],
228
+ [2077.9, -1672.5, 15.6],
229
+ [2090.7, -1613.1, 15.6],
230
+ [2193.3, -1642.1, 17.4],
231
+ [2108.8, -1464.8, 26.1],
232
+ [1183.6, -1843.5, 15.6],
233
+ [1401.6, -1866.7, 15.6],
234
+ [1373.5, -1872.2, 15.6],
235
+ [1435.1, -1880.9, 15.6],
236
+ [1535.9, -1875.3, 15.6],
237
+ [1324.1, -1736.9, 15.6],
238
+ [1359.9, -1735.1, 15.6],
239
+ [1402.0, -1736.6, 15.6],
240
+ [1436.0, -1726.2, 15.6],
241
+ [1521.7, -1725.0, 15.6],
242
+ [1429.4, -1591.9, 15.6],
243
+ [1454.5, -1441.3, 15.6],
244
+ [1529.9, -1596.8, 15.6],
245
+ [1577.3, -1863.4, 15.6],
246
+ [1565.8, -1736.8, 15.6],
247
+ [1694.0, -1812.2, 15.6],
248
+ [1688.3, -1732.1, 15.6],
249
+ [1749.9, -1728.1, 15.6],
250
+ [1672.6, -1594.0, 15.6],
251
+ [1646.6, -1591.7, 15.6],
252
+ [1664.7, -1541.1, 15.6],
253
+ [1657.6, -1450.4, 15.6],
254
+ [1670.4, -1480.9, 15.6],
255
+ [1703.9, -1593.7, 15.6],
256
+ [1754.3, -1604.5, 15.6],
257
+ [1715.8, -1436.7, 15.6],
258
+ [1770.7, -1450.0, 15.6],
259
+ [1458.1, -1302.1, 15.6],
260
+ [1604.4, -1304.0, 19.5],
261
+ [1450.0, -1243.4, 15.6],
262
+ [1717.4, -1297.0, 15.6],
263
+ [1465.5, -1160.4, 26.0],
264
+ [1489.0, -1162.4, 26.1],
265
+ [1484.8, -1036.9, 25.9],
266
+ [1580.7, -1157.3, 26.2],
267
+ [1712.0, -1164.5, 25.9],
268
+ [797.9, -1400.3, 15.6],
269
+ [917.9, -1400.5, 15.4],
270
+ [798.7, -1323.5, 15.5],
271
+ [918.0, -1328.4, 15.6],
272
+ [947.2, -1318.9, 15.6],
273
+ [1057.9, -1400.8, 15.7],
274
+ [1053.1, -1322.0, 15.6],
275
+ [1065.8, -1283.2, 15.7],
276
+ [1048.2, -1225.7, 18.9],
277
+ [802.1, -1151.3, 25.6],
278
+ [952.8, -1145.9, 25.8],
279
+ [796.5, -1130.4, 25.8],
280
+ [794.7, -1048.9, 26.9],
281
+ [1057.0, -1146.7, 25.9],
282
+ [1088.2, -1135.3, 25.9],
283
+ [966.1, -1040.5, 32.2],
284
+ [962.2, -973.3, 41.2],
285
+ [1083.6, -1039.5, 34.0],
286
+ [1084.9, -958.3, 44.6],
287
+ [1196.5, -1401.7, 15.5],
288
+ [1151.0, -1277.1, 15.7],
289
+ [1202.7, -1280.8, 15.7],
290
+ [1255.1, -1397.0, 15.3],
291
+ [1258.9, -1284.3, 15.7],
292
+ [1164.0, -1141.8, 25.8],
293
+ [1216.3, -1150.1, 25.7],
294
+ [1350.1, -1400.5, 15.7],
295
+ [1344.0, -1280.7, 15.7],
296
+ [1263.9, -1140.3, 25.9],
297
+ [1344.2, -1147.5, 26.0],
298
+ [1167.9, -1034.8, 34.0],
299
+ [1160.6, -948.3, 44.9],
300
+ [1262.4, -1041.7, 33.9],
301
+ [1359.9, -1035.1, 28.7],
302
+ [1260.1, -940.1, 44.5],
303
+ [1371.9, -939.7, 36.4],
304
+ [637.6, -1737.2, 15.7],
305
+ [611.7, -1728.8, 16.2],
306
+ [447.8, -1586.8, 27.6],
307
+ [535.1, -1597.9, 18.3],
308
+ [324.3, -1584.1, 35.4],
309
+ [142.8, -1572.1, 13.3],
310
+ [346.6, -1576.1, 35.2],
311
+ [73.8, -1543.1, 7.5],
312
+ [153.7, -1547.0, 12.1],
313
+ [93.2, -1517.6, 7.1],
314
+ [416.4, -1458.8, 32.7],
315
+ [526.1, -1568.5, 18.4],
316
+ [447.5, -1469.1, 32.7],
317
+ [515.8, -1447.3, 17.6],
318
+ [522.7, -1406.8, 18.3],
319
+ [550.8, -1420.7, 18.2],
320
+ [632.6, -1399.4, 15.8],
321
+ [481.7, -1303.4, 17.9],
322
+ [513.1, -1260.4, 18.2],
323
+ [616.0, -1227.2, 20.1],
324
+ [650.7, -1207.3, 20.4],
325
+ [330.4, -1639.1, 35.4],
326
+ [838.6, -875.9, 70.8],
327
+ [889.6, -764.9, 98.1],
328
+ [1288.0, -599.0, 102.8],
329
+ ];
330
+ //# sourceMappingURL=junctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junctions.js","sourceRoot":"","sources":["../src/junctions.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAmD;IACvE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACrB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACpB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;IACpB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACpB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACpB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;CACxB,CAAC"}
package/dist/map.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { NativeServer } from "./native.js";
2
+ /** 0xRRGGBBAA, or "#RRGGBB" / "#RRGGBBAA". */
3
+ export type MapColor = number | string;
4
+ export interface MapMarkerOptions {
5
+ x: number;
6
+ y: number;
7
+ /** The game's radar sprite (RADAR_SPRITE_*, 1-63); 0 or left out: a diamond in `color`. */
8
+ icon?: number;
9
+ color?: MapColor;
10
+ /** Shown beside it. */
11
+ label?: string;
12
+ }
13
+ export interface MapOverlayOptions {
14
+ /** The world rectangle it covers (any two opposite corners). */
15
+ x1: number;
16
+ y1: number;
17
+ x2: number;
18
+ y2: number;
19
+ /** PNG or JPG: its bytes, or a file path (sent to players each time). */
20
+ image?: Buffer | string;
21
+ /**
22
+ * Or a client file (see `clientFiles`), e.g. `"maps/interior.png"`:
23
+ * players download it once and keep it, so only its name is sent.
24
+ */
25
+ file?: string;
26
+ /** 0-1, default 1. */
27
+ opacity?: number;
28
+ /** Higher over lower; default 0. */
29
+ layer?: number;
30
+ }
31
+ /** @internal */
32
+ export declare function mapColor(c: MapColor | undefined, fallback: number): number;
33
+ /**
34
+ * The pause menu's map: markers, images over it (custom terrain, a
35
+ * building's floor plan) and whether the game's own map shows under them.
36
+ * `server.map` is everyone's (kept: players joining get it); `player.map`
37
+ * one player's. Client scripts have their own (`sagl.map`), apart from
38
+ * these.
39
+ *
40
+ * An interior, GTA V style: `map.setWorld(false, "#000000")`, then an
41
+ * overlay of the interior where it is.
42
+ */
43
+ export declare class GameMap {
44
+ #private;
45
+ /** @internal player: an id, or -1 for everyone. */
46
+ constructor(nativeServer: NativeServer, player: number);
47
+ /** Adds a marker, or changes the one with that id. */
48
+ setMarker(id: string, options: MapMarkerOptions): this;
49
+ removeMarker(id: string): this;
50
+ /** Adds an image over the map, or replaces the one with that id. */
51
+ setOverlay(id: string, options: MapOverlayOptions): this;
52
+ removeOverlay(id: string): this;
53
+ /** The game's own map under everything (true), or a plain `background` (an interior). */
54
+ setWorld(visible: boolean, background?: MapColor): this;
55
+ }
package/dist/map.js ADDED
@@ -0,0 +1,71 @@
1
+ import { readFileSync } from "node:fs";
2
+ /** @internal */
3
+ export function mapColor(c, fallback) {
4
+ if (c === undefined)
5
+ return fallback;
6
+ if (typeof c === "number")
7
+ return c >>> 0;
8
+ const m = /^#([0-9a-f]{6})([0-9a-f]{2})?$/i.exec(c);
9
+ if (!m)
10
+ throw new TypeError(`not a colour: ${c} (0xRRGGBBAA or "#RRGGBB[AA]")`);
11
+ return parseInt(m[1] + (m[2] ?? "ff"), 16) >>> 0;
12
+ }
13
+ /**
14
+ * The pause menu's map: markers, images over it (custom terrain, a
15
+ * building's floor plan) and whether the game's own map shows under them.
16
+ * `server.map` is everyone's (kept: players joining get it); `player.map`
17
+ * one player's. Client scripts have their own (`sagl.map`), apart from
18
+ * these.
19
+ *
20
+ * An interior, GTA V style: `map.setWorld(false, "#000000")`, then an
21
+ * overlay of the interior where it is.
22
+ */
23
+ export class GameMap {
24
+ #native;
25
+ #player;
26
+ /** @internal player: an id, or -1 for everyone. */
27
+ constructor(nativeServer, player) {
28
+ this.#native = nativeServer;
29
+ this.#player = player;
30
+ }
31
+ /** Adds a marker, or changes the one with that id. */
32
+ setMarker(id, options) {
33
+ checkId(id);
34
+ this.#native.setMapMarker(this.#player, id, options.x, options.y, options.icon ?? 0, mapColor(options.color, 0xffffffff), (options.label ?? "").slice(0, 48));
35
+ return this;
36
+ }
37
+ removeMarker(id) {
38
+ this.#native.removeMapMarker(this.#player, id);
39
+ return this;
40
+ }
41
+ /** Adds an image over the map, or replaces the one with that id. */
42
+ setOverlay(id, options) {
43
+ checkId(id);
44
+ const opacity = Math.min(1, Math.max(0, options.opacity ?? 1));
45
+ if (options.file !== undefined) {
46
+ if (!this.#native.setMapOverlayFile(this.#player, id, options.x1, options.y1, options.x2, options.y2, options.file, opacity, options.layer ?? 0)) {
47
+ throw new Error(`no client file "${options.file}"`);
48
+ }
49
+ return this;
50
+ }
51
+ if (options.image === undefined)
52
+ throw new TypeError("a map overlay needs an image or a file");
53
+ const image = typeof options.image === "string" ? readFileSync(options.image) : options.image;
54
+ this.#native.setMapOverlay(this.#player, id, options.x1, options.y1, options.x2, options.y2, image, opacity, options.layer ?? 0);
55
+ return this;
56
+ }
57
+ removeOverlay(id) {
58
+ this.#native.removeMapOverlay(this.#player, id);
59
+ return this;
60
+ }
61
+ /** The game's own map under everything (true), or a plain `background` (an interior). */
62
+ setWorld(visible, background = 0x000000ff) {
63
+ this.#native.setMapWorld(this.#player, visible, mapColor(background, 0x000000ff));
64
+ return this;
65
+ }
66
+ }
67
+ function checkId(id) {
68
+ if (!id || id.length > 32)
69
+ throw new RangeError("map ids are 1-32 characters");
70
+ }
71
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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"}
package/dist/menu.d.ts ADDED
@@ -0,0 +1,96 @@
1
+ import type { NativeServer } from "./native.js";
2
+ /**
3
+ * A menu row: its text; or its text and a right-hand column (a price,
4
+ * "Fitted"); or those and a colour swatch (0xRRGGBB, e.g. a car colour).
5
+ */
6
+ export type MenuRow = string | [string, string] | {
7
+ text: string;
8
+ value?: string;
9
+ swatch?: number;
10
+ };
11
+ /** A button's hint under a menu: its key (an action or a key icon's name) and what it does. */
12
+ export interface MenuHint {
13
+ key: "select" | "back" | "updown" | "arrows" | (string & {});
14
+ label: string;
15
+ }
16
+ /** @internal Hints as sent ("" the default, "-" none). */
17
+ export declare function menuHints(hints: MenuHint[] | undefined): string;
18
+ /** @internal A row as sent: text, tab, value, tab, swatch. */
19
+ export declare function menuRow(r: MenuRow): string;
20
+ export interface MenuOptions {
21
+ /** In the game's heading font. */
22
+ title?: string;
23
+ /**
24
+ * An image over the menu (a logo), edge to edge; the title then shows as
25
+ * a subheading under it. A client file (see
26
+ * `clientFiles`), or one of the game's own textures from the player's copy,
27
+ * `"game:<txd>/<texture>"`, e.g. `"game:garag3_lawn/ws_Transfender_dirty"`.
28
+ */
29
+ image?: string;
30
+ /** The game's ~r~ colour codes and `gxt()` keys work in them. */
31
+ rows: MenuRow[];
32
+ /** The one chosen to begin with. Default 0. */
33
+ row?: number;
34
+ /**
35
+ * A line under the box (e.g. their cash): a text, or a row's form (with
36
+ * a value on the right, a swatch). A grid's shares the line under it with
37
+ * the chosen cell's value.
38
+ */
39
+ footer?: MenuRow;
40
+ /**
41
+ * The buttons' hints along the bottom left of their screen, the first
42
+ * leftmost. `key`: `"select"`, `"back"` or `"updown"` (the keys, or
43
+ * controller buttons, for it), or a key icon's name (`"space"`, `"f"`).
44
+ * Default: Select and Back; `[]`: none.
45
+ */
46
+ hints?: MenuHint[];
47
+ /**
48
+ * Above 1: a grid this many across, as the game's colour picker: each row
49
+ * a cell (its swatch, else its text), the arrow keys moving every way, and
50
+ * the chosen one's text and value under it.
51
+ */
52
+ columns?: number;
53
+ /** They moved to a row (Up/Down): e.g. show it off. */
54
+ onChoose?: (row: number, menu: PlayerMenu) => void;
55
+ /** They pressed Enter on a row. */
56
+ onSelect?: (row: number, menu: PlayerMenu) => void;
57
+ /** They pressed Backspace, Escape or F (as the game's). The menu stays up: close it, or show the previous one. */
58
+ onBack?: (menu: PlayerMenu) => void;
59
+ }
60
+ /** @internal The menu showing on one player (one at a time). */
61
+ export declare class PlayerMenus {
62
+ #private;
63
+ current: PlayerMenu | null;
64
+ constructor(native: NativeServer, player: number);
65
+ open(options: MenuOptions): PlayerMenu;
66
+ send(spec: Parameters<NativeServer["gameMenu"]>[1]): void;
67
+ heard(id: number, kind: number, row: number): void;
68
+ /** Gone (they left, or the server reset them): no more events. */
69
+ forget(): void;
70
+ }
71
+ /**
72
+ * A menu on a player's screen, as the game's shops have (and SA-MP's
73
+ * menus): a box at the top left with a title and rows, one chosen. They
74
+ * move with Up/Down, select with Enter and go back with Backspace or
75
+ * Escape. One at a time: opening another replaces it. See `player.menu`.
76
+ */
77
+ export declare class PlayerMenu {
78
+ #private;
79
+ readonly id: number;
80
+ /** @internal */
81
+ constructor(menus: PlayerMenus, id: number, options: MenuOptions);
82
+ /** The row chosen. */
83
+ get row(): number;
84
+ /** Still on their screen. */
85
+ get isOpen(): boolean;
86
+ /** Changes what it shows (rows, title, footer, hints, the row chosen), in place. */
87
+ update(changes: Partial<Pick<MenuOptions, "title" | "image" | "rows" | "row" | "footer" | "hints">>): this;
88
+ /** Takes it off their screen. */
89
+ close(): void;
90
+ /** @internal */
91
+ markClosed(): void;
92
+ /** @internal */
93
+ send(): void;
94
+ /** @internal */
95
+ heard(kind: number, row: number): void;
96
+ }