ultimatedarktower 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +105 -253
  3. package/dist/esm/index.mjs +943 -25
  4. package/dist/src/UltimateDarkTower.d.ts +7 -0
  5. package/dist/src/UltimateDarkTower.js +13 -1
  6. package/dist/src/UltimateDarkTower.js.map +1 -1
  7. package/dist/src/adapters/NoopBluetoothAdapter.d.ts +26 -0
  8. package/dist/src/adapters/NoopBluetoothAdapter.js +50 -0
  9. package/dist/src/adapters/NoopBluetoothAdapter.js.map +1 -0
  10. package/dist/src/index.d.ts +10 -0
  11. package/dist/src/index.js +29 -1
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/udtBleConnection.d.ts +13 -0
  14. package/dist/src/udtBleConnection.js +66 -19
  15. package/dist/src/udtBleConnection.js.map +1 -1
  16. package/dist/src/udtBluetoothAdapterFactory.d.ts +3 -1
  17. package/dist/src/udtBluetoothAdapterFactory.js +6 -0
  18. package/dist/src/udtBluetoothAdapterFactory.js.map +1 -1
  19. package/dist/src/udtBoardAdjacency.d.ts +25 -0
  20. package/dist/src/udtBoardAdjacency.js +397 -0
  21. package/dist/src/udtBoardAdjacency.js.map +1 -0
  22. package/dist/src/udtBoardAnchors.d.ts +34 -0
  23. package/dist/src/udtBoardAnchors.js +357 -0
  24. package/dist/src/udtBoardAnchors.js.map +1 -0
  25. package/dist/src/udtDisplayExports.d.ts +2 -0
  26. package/dist/src/udtDisplayExports.js +26 -0
  27. package/dist/src/udtDisplayExports.js.map +1 -0
  28. package/dist/src/udtFoes.d.ts +53 -0
  29. package/dist/src/udtFoes.js +47 -0
  30. package/dist/src/udtFoes.js.map +1 -0
  31. package/dist/src/udtHeroes.d.ts +30 -0
  32. package/dist/src/udtHeroes.js +38 -0
  33. package/dist/src/udtHeroes.js.map +1 -0
  34. package/dist/src/udtMonuments.d.ts +23 -0
  35. package/dist/src/udtMonuments.js +20 -0
  36. package/dist/src/udtMonuments.js.map +1 -0
  37. package/dist/src/udtTowerResponse.js +1 -2
  38. package/dist/src/udtTowerResponse.js.map +1 -1
  39. package/package.json +2 -2
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-slot layout anchors for the Return to Dark Tower board, plus board-image
4
+ * metadata. Each location carries one anchor per occupant slot type that can
5
+ * appear there (a building space adds 'building' + 'skull'); renderers fan
6
+ * multiple tokens around a single slot. Coordinates are normalized [0, 1] against
7
+ * the board image, so they are resolution-independent.
8
+ *
9
+ * GENERATED from tools/location-marker/udtBoardData.json by gen-board-data.mjs.
10
+ * Do not hand-edit — re-author in the location-marker tool and regenerate.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BOARD_ANCHORS = exports.BOARD_IMAGE_INFO = void 0;
14
+ exports.BOARD_IMAGE_INFO = {
15
+ width: 4096,
16
+ height: 4096,
17
+ centerX: 0.5,
18
+ centerY: 0.5,
19
+ radius: 0.5,
20
+ northHeadingDegrees: 135,
21
+ };
22
+ /** Layout anchors for all 60 board locations, keyed by location name. */
23
+ exports.BOARD_ANCHORS = {
24
+ 'Broken Lands': {
25
+ hero: { x: 0.80599, y: 0.51238 },
26
+ foe: { x: 0.8355, y: 0.50648 },
27
+ marker: { x: 0.81451, y: 0.53009 },
28
+ },
29
+ Dayside: {
30
+ building: { x: 0.74564, y: 0.7754 },
31
+ skull: { x: 0.75351, y: 0.77147 },
32
+ hero: { x: 0.78708, y: 0.84542 },
33
+ foe: { x: 0.82397, y: 0.81232 },
34
+ marker: { x: 0.79742, y: 0.81818 },
35
+ },
36
+ "Egan's End": {
37
+ building: { x: 0.57088, y: 0.9152 },
38
+ skull: { x: 0.57506, y: 0.92844 },
39
+ hero: { x: 0.65606, y: 0.89196 },
40
+ foe: { x: 0.66675, y: 0.91679 },
41
+ marker: { x: 0.63365, y: 0.91644 },
42
+ },
43
+ Fivepint: {
44
+ marker: { x: 0.84691, y: 0.76433 },
45
+ hero: { x: 0.82, y: 0.75615 },
46
+ foe: { x: 0.83838, y: 0.73603 },
47
+ },
48
+ 'Green Bridge': {
49
+ hero: { x: 0.73574, y: 0.71149 },
50
+ foe: { x: 0.77097, y: 0.67222 },
51
+ marker: { x: 0.76259, y: 0.69647 },
52
+ },
53
+ 'Lodestone Mountains': {
54
+ hero: { x: 0.90983, y: 0.54979 },
55
+ foe: { x: 0.93133, y: 0.52482 },
56
+ marker: { x: 0.92439, y: 0.57164 },
57
+ },
58
+ 'Lower Ice Fangs': {
59
+ hero: { x: 0.644, y: 0.75336 },
60
+ foe: { x: 0.60986, y: 0.76715 },
61
+ marker: { x: 0.65399, y: 0.77853 },
62
+ },
63
+ 'Muted Forest': {
64
+ hero: { x: 0.72254, y: 0.57754 },
65
+ foe: { x: 0.71006, y: 0.53557 },
66
+ marker: { x: 0.74474, y: 0.54875 },
67
+ },
68
+ 'Peaks of the Djinn': {
69
+ hero: { x: 0.52263, y: 0.73716 },
70
+ foe: { x: 0.53056, y: 0.76095 },
71
+ marker: { x: 0.53401, y: 0.78715 },
72
+ },
73
+ 'Pearl of the North': {
74
+ marker: { x: 0.90091, y: 0.66962 },
75
+ hero: { x: 0.89715, y: 0.69647 },
76
+ foe: { x: 0.91852, y: 0.64046 },
77
+ },
78
+ 'Radiant Mountains': {
79
+ building: { x: 0.82063, y: 0.64652 },
80
+ skull: { x: 0.82727, y: 0.64883 },
81
+ hero: { x: 0.81081, y: 0.6058 },
82
+ foe: { x: 0.82294, y: 0.57982 },
83
+ marker: { x: 0.85182, y: 0.59425 },
84
+ },
85
+ Rimeweald: {
86
+ hero: { x: 0.58228, y: 0.83094 },
87
+ foe: { x: 0.54746, y: 0.84576 },
88
+ marker: { x: 0.614, y: 0.84852 },
89
+ },
90
+ 'The Tundra': {
91
+ hero: { x: 0.71123, y: 0.84955 },
92
+ foe: { x: 0.69675, y: 0.82094 },
93
+ marker: { x: 0.72778, y: 0.87369 },
94
+ },
95
+ 'Tower Scar Desert': {
96
+ marker: { x: 0.63365, y: 0.57476 },
97
+ hero: { x: 0.64227, y: 0.53994 },
98
+ foe: { x: 0.58642, y: 0.61028 },
99
+ },
100
+ 'Upper Ice Fangs': {
101
+ building: { x: 0.68089, y: 0.66613 },
102
+ skull: { x: 0.68571, y: 0.66096 },
103
+ foe: { x: 0.5478, y: 0.67889 },
104
+ hero: { x: 0.63882, y: 0.7044 },
105
+ marker: { x: 0.59159, y: 0.67578 },
106
+ },
107
+ 'Big Sister': {
108
+ hero: { x: 0.29269, y: 0.60241 },
109
+ foe: { x: 0.28651, y: 0.56064 },
110
+ marker: { x: 0.26136, y: 0.54023 },
111
+ },
112
+ 'Bleak Wastes': {
113
+ marker: { x: 0.45929, y: 0.67741 },
114
+ hero: { x: 0.44885, y: 0.64751 },
115
+ foe: { x: 0.47163, y: 0.65937 },
116
+ },
117
+ 'Copper Grove': {
118
+ hero: { x: 0.34044, y: 0.8742 },
119
+ foe: { x: 0.37074, y: 0.91984 },
120
+ marker: { x: 0.3369, y: 0.90017 },
121
+ },
122
+ 'Dragontooth Lake': {
123
+ marker: { x: 0.43784, y: 0.75253 },
124
+ hero: { x: 0.38955, y: 0.70385 },
125
+ foe: { x: 0.38599, y: 0.7367 },
126
+ },
127
+ Duwani: {
128
+ building: { x: 0.21975, y: 0.79014 },
129
+ skull: { x: 0.22094, y: 0.79251 },
130
+ hero: { x: 0.20946, y: 0.83367 },
131
+ foe: { x: 0.18729, y: 0.76599 },
132
+ marker: { x: 0.16988, y: 0.77905 },
133
+ },
134
+ 'Forest of Shades': {
135
+ hero: { x: 0.36184, y: 0.57047 },
136
+ foe: { x: 0.35393, y: 0.54355 },
137
+ marker: { x: 0.37965, y: 0.6053 },
138
+ },
139
+ 'Greater Tombstones': {
140
+ building: { x: 0.31989, y: 0.66902 },
141
+ skull: { x: 0.32384, y: 0.66467 },
142
+ hero: { x: 0.27041, y: 0.67773 },
143
+ foe: { x: 0.22133, y: 0.66546 },
144
+ marker: { x: 0.25933, y: 0.65675 },
145
+ },
146
+ 'Inner Kinghills': {
147
+ building: { x: 0.4061, y: 0.83461 },
148
+ skull: { x: 0.41279, y: 0.83658 },
149
+ hero: { x: 0.45685, y: 0.81494 },
150
+ foe: { x: 0.43364, y: 0.87592 },
151
+ marker: { x: 0.46236, y: 0.84169 },
152
+ },
153
+ 'Jewel Hills': {
154
+ marker: { x: 0.26293, y: 0.86082 },
155
+ foe: { x: 0.29301, y: 0.81688 },
156
+ hero: { x: 0.27599, y: 0.84063 },
157
+ },
158
+ 'Lake of Songs': {
159
+ hero: { x: 0.1157, y: 0.71675 },
160
+ foe: { x: 0.14498, y: 0.72862 },
161
+ marker: { x: 0.10778, y: 0.68825 },
162
+ },
163
+ 'Lesser Tombstones': {
164
+ hero: { x: 0.19169, y: 0.5889 },
165
+ foe: { x: 0.18179, y: 0.6178 },
166
+ marker: { x: 0.1715, y: 0.655 },
167
+ },
168
+ 'Outer Kinghills': {
169
+ hero: { x: 0.49606, y: 0.90673 },
170
+ foe: { x: 0.44183, y: 0.91306 },
171
+ marker: { x: 0.46242, y: 0.9289 },
172
+ },
173
+ 'The Decaying Wilds': {
174
+ marker: { x: 0.34526, y: 0.79037 },
175
+ hero: { x: 0.31399, y: 0.77414 },
176
+ foe: { x: 0.33339, y: 0.76503 },
177
+ },
178
+ 'Three Rivers': {
179
+ building: { x: 0.10461, y: 0.59524 },
180
+ skull: { x: 0.10976, y: 0.59445 },
181
+ hero: { x: 0.10066, y: 0.56159 },
182
+ foe: { x: 0.05672, y: 0.60869 },
183
+ marker: { x: 0.07216, y: 0.56516 },
184
+ },
185
+ "Utar's Barrows": {
186
+ hero: { x: 0.21227, y: 0.72268 },
187
+ foe: { x: 0.27322, y: 0.75554 },
188
+ marker: { x: 0.25502, y: 0.73416 },
189
+ },
190
+ Archmont: {
191
+ marker: { x: 0.28906, y: 0.28849 },
192
+ hero: { x: 0.2475, y: 0.26474 },
193
+ foe: { x: 0.22375, y: 0.24297 },
194
+ },
195
+ "Azkol's Bane": {
196
+ hero: { x: 0.31755, y: 0.2026 },
197
+ foe: { x: 0.35515, y: 0.20339 },
198
+ marker: { x: 0.2851, y: 0.22002 },
199
+ },
200
+ 'Bone Hills': {
201
+ marker: { x: 0.26112, y: 0.1386 },
202
+ hero: { x: 0.23354, y: 0.15298 },
203
+ foe: { x: 0.28374, y: 0.10136 },
204
+ },
205
+ 'Howling Desert': {
206
+ building: { x: 0.46416, y: 0.25928 },
207
+ skull: { x: 0.46145, y: 0.25218 },
208
+ hero: { x: 0.41951, y: 0.22546 },
209
+ foe: { x: 0.47464, y: 0.2011 },
210
+ marker: { x: 0.44488, y: 0.20009 },
211
+ },
212
+ Irontops: {
213
+ hero: { x: 0.44934, y: 0.35744 },
214
+ foe: { x: 0.46636, y: 0.32986 },
215
+ marker: { x: 0.425, y: 0.33632 },
216
+ },
217
+ 'Little Sister': {
218
+ hero: { x: 0.23451, y: 0.34805 },
219
+ foe: { x: 0.21272, y: 0.32604 },
220
+ marker: { x: 0.19827, y: 0.36466 },
221
+ },
222
+ 'Middle Sister': {
223
+ hero: { x: 0.16203, y: 0.46453 },
224
+ foe: { x: 0.1493, y: 0.49904 },
225
+ marker: { x: 0.15513, y: 0.43088 },
226
+ },
227
+ 'Mountains of the Watchers': {
228
+ hero: { x: 0.49023, y: 0.12066 },
229
+ foe: { x: 0.45633, y: 0.09633 },
230
+ marker: { x: 0.4994, y: 0.18246 },
231
+ },
232
+ 'Pine Barrens': {
233
+ hero: { x: 0.06957, y: 0.49147 },
234
+ foe: { x: 0.07316, y: 0.4185 },
235
+ marker: { x: 0.06957, y: 0.45478 },
236
+ },
237
+ 'Sands of Madness': {
238
+ building: { x: 0.27133, y: 0.44721 },
239
+ skull: { x: 0.26256, y: 0.44561 },
240
+ hero: { x: 0.28249, y: 0.39777 },
241
+ foe: { x: 0.30083, y: 0.33636 },
242
+ marker: { x: 0.29964, y: 0.37464 },
243
+ },
244
+ 'Southern Wastes': {
245
+ marker: { x: 0.16607, y: 0.22512 },
246
+ building: { x: 0.16248, y: 0.29211 },
247
+ skull: { x: 0.1553, y: 0.28931 },
248
+ hero: { x: 0.16686, y: 0.24466 },
249
+ foe: { x: 0.17723, y: 0.19242 },
250
+ },
251
+ 'The Cloister': {
252
+ hero: { x: 0.35027, y: 0.30566 },
253
+ foe: { x: 0.39692, y: 0.28014 },
254
+ marker: { x: 0.36862, y: 0.28254 },
255
+ },
256
+ 'The Emerald Expanse': {
257
+ building: { x: 0.3746, y: 0.14179 },
258
+ skull: { x: 0.37699, y: 0.14817 },
259
+ hero: { x: 0.34071, y: 0.08955 },
260
+ foe: { x: 0.43121, y: 0.05407 },
261
+ marker: { x: 0.38177, y: 0.08357 },
262
+ },
263
+ 'The Throne': {
264
+ marker: { x: 0.35865, y: 0.43166 },
265
+ hero: { x: 0.36782, y: 0.38979 },
266
+ foe: { x: 0.33991, y: 0.46236 },
267
+ },
268
+ "Ulamel's Hollow": {
269
+ foe: { x: 0.10307, y: 0.38022 },
270
+ hero: { x: 0.11981, y: 0.34872 },
271
+ marker: { x: 0.0935, y: 0.34952 },
272
+ },
273
+ Anza: {
274
+ building: { x: 0.69519, y: 0.13269 },
275
+ skull: { x: 0.69876, y: 0.1242 },
276
+ hero: { x: 0.67642, y: 0.16664 },
277
+ foe: { x: 0.72244, y: 0.16888 },
278
+ marker: { x: 0.74656, y: 0.14609 },
279
+ },
280
+ Arkartus: {
281
+ building: { x: 0.81849, y: 0.28504 },
282
+ skull: { x: 0.82832, y: 0.27789 },
283
+ hero: { x: 0.81983, y: 0.23544 },
284
+ foe: { x: 0.87702, y: 0.25376 },
285
+ marker: { x: 0.84753, y: 0.24036 },
286
+ },
287
+ 'Ash Hills': {
288
+ hero: { x: 0.68312, y: 0.44364 },
289
+ foe: { x: 0.69161, y: 0.46732 },
290
+ marker: { x: 0.71618, y: 0.45347 },
291
+ },
292
+ Cloudhold: {
293
+ marker: { x: 0.80375, y: 0.41683 },
294
+ hero: { x: 0.77694, y: 0.42041 },
295
+ foe: { x: 0.79124, y: 0.44274 },
296
+ },
297
+ Delmsmire: {
298
+ foe: { x: 0.83994, y: 0.34892 },
299
+ hero: { x: 0.86675, y: 0.32703 },
300
+ marker: { x: 0.89221, y: 0.31631 },
301
+ },
302
+ 'Hissing Groves': {
303
+ marker: { x: 0.67151, y: 0.33865 },
304
+ building: { x: 0.70502, y: 0.3869 },
305
+ skull: { x: 0.71127, y: 0.38422 },
306
+ hero: { x: 0.66436, y: 0.38645 },
307
+ foe: { x: 0.64783, y: 0.36054 },
308
+ },
309
+ 'Idran Forest': {
310
+ hero: { x: 0.54105, y: 0.21221 },
311
+ foe: { x: 0.54865, y: 0.23455 },
312
+ marker: { x: 0.58394, y: 0.22294 },
313
+ },
314
+ 'Lonelight Hills': {
315
+ marker: { x: 0.58573, y: 0.30291 },
316
+ hero: { x: 0.58662, y: 0.32524 },
317
+ foe: { x: 0.54507, y: 0.30112 },
318
+ },
319
+ 'Lost Lands': {
320
+ hero: { x: 0.56339, y: 0.08935 },
321
+ foe: { x: 0.57813, y: 0.10633 },
322
+ marker: { x: 0.57367, y: 0.0688 },
323
+ },
324
+ 'Plains of Plovo': {
325
+ marker: { x: 0.92348, y: 0.42532 },
326
+ building: { x: 0.88238, y: 0.39717 },
327
+ skull: { x: 0.89042, y: 0.3936 },
328
+ hero: { x: 0.89221, y: 0.43158 },
329
+ foe: { x: 0.91053, y: 0.44632 },
330
+ },
331
+ 'Plains of Woldra': {
332
+ hero: { x: 0.62862, y: 0.12107 },
333
+ foe: { x: 0.57322, y: 0.15815 },
334
+ marker: { x: 0.60851, y: 0.16798 },
335
+ },
336
+ 'The Empty Glade': {
337
+ hero: { x: 0.72646, y: 0.29352 },
338
+ foe: { x: 0.78052, y: 0.34982 },
339
+ marker: { x: 0.74746, y: 0.32078 },
340
+ },
341
+ 'The Grass Sea': {
342
+ hero: { x: 0.57099, y: 0.37662 },
343
+ foe: { x: 0.62281, y: 0.43426 },
344
+ marker: { x: 0.60181, y: 0.40343 },
345
+ },
346
+ 'Weeping Waters': {
347
+ hero: { x: 0.64202, y: 0.24795 },
348
+ foe: { x: 0.65453, y: 0.23053 },
349
+ marker: { x: 0.67464, y: 0.24393 },
350
+ },
351
+ Yellowpike: {
352
+ marker: { x: 0.76533, y: 0.22338 },
353
+ hero: { x: 0.79348, y: 0.19792 },
354
+ foe: { x: 0.81492, y: 0.17379 },
355
+ },
356
+ };
357
+ //# sourceMappingURL=udtBoardAnchors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udtBoardAnchors.js","sourceRoot":"","sources":["../../src/udtBoardAnchors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAyBU,QAAA,gBAAgB,GAAmB;IAC5C,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,mBAAmB,EAAE,GAAG;CAC3B,CAAC;AAEF,yEAAyE;AAC5D,QAAA,aAAa,GAAmB;IACzC,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,OAAO,EAAE;QACL,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QACnC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QACnC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,QAAQ,EAAE;QACN,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;QAC7B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,qBAAqB,EAAE;QACnB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,iBAAiB,EAAE;QACf,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;QAC9B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,oBAAoB,EAAE;QAClB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,oBAAoB,EAAE;QAClB,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,mBAAmB,EAAE;QACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,SAAS,EAAE;QACP,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;KACnC;IACD,YAAY,EAAE;QACV,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,mBAAmB,EAAE;QACjB,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,iBAAiB,EAAE;QACf,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAC9B,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,YAAY,EAAE;QACV,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,cAAc,EAAE;QACZ,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;KACpC;IACD,kBAAkB,EAAE;QAChB,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;KACjC;IACD,MAAM,EAAE;QACJ,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,kBAAkB,EAAE;QAChB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;KACpC;IACD,oBAAoB,EAAE;QAClB,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,iBAAiB,EAAE;QACf,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QACnC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,aAAa,EAAE;QACX,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACnC;IACD,eAAe,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,mBAAmB,EAAE;QACjB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE;KAClC;IACD,iBAAiB,EAAE;QACf,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;KACpC;IACD,oBAAoB,EAAE;QAClB,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,QAAQ,EAAE;QACN,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;KACpC;IACD,YAAY,EAAE;QACV,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,gBAAgB,EAAE;QACd,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;KACnC;IACD,eAAe,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,eAAe,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,2BAA2B,EAAE;QACzB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;KACpC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,kBAAkB,EAAE;QAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,iBAAiB,EAAE;QACf,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,qBAAqB,EAAE;QACnB,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;QACnC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,YAAY,EAAE;QACV,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,iBAAiB,EAAE;QACf,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE;KACpC;IACD,IAAI,EAAE;QACF,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAChC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,QAAQ,EAAE;QACN,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,WAAW,EAAE;QACT,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,SAAS,EAAE;QACP,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,SAAS,EAAE;QACP,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,gBAAgB,EAAE;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QACnC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACjC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,iBAAiB,EAAE;QACf,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,YAAY,EAAE;QACV,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;KACpC;IACD,iBAAiB,EAAE;QACf,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;QAChC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;IACD,kBAAkB,EAAE;QAChB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,iBAAiB,EAAE;QACf,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,eAAe,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,gBAAgB,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KACrC;IACD,UAAU,EAAE;QACR,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAClC,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;KAClC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './udtConstants';
2
+ export { createDefaultTowerState } from './udtHelpers';
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createDefaultTowerState = void 0;
18
+ // Barrel of the cycle-free public surface that the UltimateDarkTowerDisplay
19
+ // package consumes via the bundled `ultimatedarktower` alias. It must NOT import
20
+ // (directly or transitively) UltimateDarkTower.ts — pulling that in re-creates the
21
+ // circular dependency that makes esbuild lazily wrap modules and breaks the Display
22
+ // package's module-level constant initialization (see build-examples.js).
23
+ __exportStar(require("./udtConstants"), exports);
24
+ var udtHelpers_1 = require("./udtHelpers");
25
+ Object.defineProperty(exports, "createDefaultTowerState", { enumerable: true, get: function () { return udtHelpers_1.createDefaultTowerState; } });
26
+ //# sourceMappingURL=udtDisplayExports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udtDisplayExports.js","sourceRoot":"","sources":["../../src/udtDisplayExports.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4EAA4E;AAC5E,iFAAiF;AACjF,mFAAmF;AACnF,oFAAoF;AACpF,0EAA0E;AAC1E,iDAA+B;AAC/B,2CAAuD;AAA9C,qHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * udtFoes.ts — foe in-play status + foe/adversary identity metadata (static reference data).
3
+ *
4
+ * Consumed by `ultimatedarktowerboard` (re-exported, not vendored). This module is PURELY
5
+ * additive: it does NOT touch the seed-parser foe enums (`Tier1Foe`/`Tier2Foe`/`Tier3Foe`/
6
+ * `Adversary`) or the positionally-encoded `TIER1/2/3_FOES`/`ADVERSARIES` arrays — those stay
7
+ * exactly as-is. Here we attach `level`/`tier`/`source` metadata keyed by the same foe names and
8
+ * add the in-play `FoeStatus` progression the board package tracks.
9
+ *
10
+ * `FoeStatus` (panicked → unsteady → ready → savage → lethal) is the in-play power progression and
11
+ * is DISTINCT from a foe's `level` (the number on its card: 2–4 for foes, 5 for adversaries), which
12
+ * is identity. The five statuses match the official game's foe-status track (rules glossary): the app
13
+ * can surface any of them, so consumers must model all five.
14
+ */
15
+ import type { ContentSource } from './udtHeroes';
16
+ import type { Tier1Foe, Tier2Foe, Tier3Foe, Adversary } from './udtSeedParser';
17
+ /**
18
+ * In-play power progression a foe advances through, ascending threat (the official game's
19
+ * foe-status track). Distinct from identity `level`/`tier`.
20
+ */
21
+ export type FoeStatus = 'panicked' | 'unsteady' | 'ready' | 'savage' | 'lethal';
22
+ /** The statuses in progression order, lowest → highest threat. */
23
+ export declare const FOE_STATUSES: readonly FoeStatus[];
24
+ /** A foe's identity level (the number on its card). Foes are 2–4; adversaries are 5. */
25
+ export type FoeLevel = 2 | 3 | 4 | 5;
26
+ /** Stable, unique foe identity id (kebab-case), e.g. `'shadow-wolves'`. */
27
+ export type FoeId = string;
28
+ /** Display name — the existing seed-parser foe/adversary unions (the source of truth for names). */
29
+ export type FoeName = Tier1Foe | Tier2Foe | Tier3Foe | Adversary;
30
+ export interface Foe {
31
+ /** Stable, unique kebab-case identity id. */
32
+ id: FoeId;
33
+ /** Display name (matches the seed-parser union exactly). */
34
+ name: FoeName;
35
+ /** Whether this is a tiered foe or the apex (level-5) adversary. */
36
+ kind: 'foe' | 'adversary';
37
+ /** Identity level: 2/3/4 for foes, 5 for adversaries. */
38
+ level: FoeLevel;
39
+ /** Seed-encoding tier (1–3) for foes; omitted for adversaries (level 5). */
40
+ tier?: 1 | 2 | 3;
41
+ /** The product this foe ships in. Inferred `'base'` (no per-foe source data in UDT today). */
42
+ source: ContentSource;
43
+ }
44
+ /** The 12 tiered foes (Tier 1→level 2, Tier 2→level 3, Tier 3→level 4). Names match the seed unions. */
45
+ export declare const FOES: readonly Foe[];
46
+ /** The 8 adversaries (the apex foe — level 5). `ADVERSARIES` (the name array) is the seed enum. */
47
+ export declare const ADVERSARY_ROSTER: readonly Foe[];
48
+ /** Foes and adversaries together (20 entries), levels 2–5. */
49
+ export declare const ALL_FOES: readonly Foe[];
50
+ /** Every foe/adversary keyed by its stable `id`. */
51
+ export declare const FOE_BY_ID: Readonly<Record<FoeId, Foe>>;
52
+ /** Every foe/adversary keyed by its display `name` (interop with the seed-parser unions). */
53
+ export declare const FOE_BY_NAME: Readonly<Record<FoeName, Foe>>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FOE_BY_NAME = exports.FOE_BY_ID = exports.ALL_FOES = exports.ADVERSARY_ROSTER = exports.FOES = exports.FOE_STATUSES = void 0;
4
+ /** The statuses in progression order, lowest → highest threat. */
5
+ exports.FOE_STATUSES = ['panicked', 'unsteady', 'ready', 'savage', 'lethal'];
6
+ /** The 12 tiered foes (Tier 1→level 2, Tier 2→level 3, Tier 3→level 4). Names match the seed unions. */
7
+ exports.FOES = [
8
+ // Tier 1 — level 2
9
+ { id: 'brigands', name: 'Brigands', kind: 'foe', level: 2, tier: 1, source: 'base' },
10
+ { id: 'oreks', name: 'Oreks', kind: 'foe', level: 2, tier: 1, source: 'base' },
11
+ { id: 'shadow-wolves', name: 'Shadow Wolves', kind: 'foe', level: 2, tier: 1, source: 'base' },
12
+ { id: 'spine-fiends', name: 'Spine Fiends', kind: 'foe', level: 2, tier: 1, source: 'base' },
13
+ // Tier 2 — level 3
14
+ { id: 'frost-trolls', name: 'Frost Trolls', kind: 'foe', level: 3, tier: 2, source: 'base' },
15
+ { id: 'clan-of-neuri', name: 'Clan of Neuri', kind: 'foe', level: 3, tier: 2, source: 'base' },
16
+ { id: 'lemures', name: 'Lemures', kind: 'foe', level: 3, tier: 2, source: 'base' },
17
+ { id: 'widowmade-spiders', name: 'Widowmade Spiders', kind: 'foe', level: 3, tier: 2, source: 'base' },
18
+ // Tier 3 — level 4
19
+ { id: 'dragons', name: 'Dragons', kind: 'foe', level: 4, tier: 3, source: 'base' },
20
+ { id: 'mormos', name: 'Mormos', kind: 'foe', level: 4, tier: 3, source: 'base' },
21
+ { id: 'striga', name: 'Striga', kind: 'foe', level: 4, tier: 3, source: 'base' },
22
+ { id: 'titans', name: 'Titans', kind: 'foe', level: 4, tier: 3, source: 'base' },
23
+ ];
24
+ /** The 8 adversaries (the apex foe — level 5). `ADVERSARIES` (the name array) is the seed enum. */
25
+ exports.ADVERSARY_ROSTER = [
26
+ { id: 'ashstrider', name: 'Ashstrider', kind: 'adversary', level: 5, source: 'base' },
27
+ { id: 'bane-of-omens', name: 'Bane of Omens', kind: 'adversary', level: 5, source: 'base' },
28
+ { id: 'empress-of-shades', name: 'Empress of Shades', kind: 'adversary', level: 5, source: 'base' },
29
+ { id: 'gaze-eternal', name: 'Gaze Eternal', kind: 'adversary', level: 5, source: 'base' },
30
+ { id: 'gravemaw', name: 'Gravemaw', kind: 'adversary', level: 5, source: 'base' },
31
+ { id: 'isa-the-exile', name: 'Isa the Exile', kind: 'adversary', level: 5, source: 'base' },
32
+ { id: 'lingering-rot', name: 'Lingering Rot', kind: 'adversary', level: 5, source: 'base' },
33
+ { id: 'utuk-ku', name: "Utuk'Ku", kind: 'adversary', level: 5, source: 'base' },
34
+ ];
35
+ /** Foes and adversaries together (20 entries), levels 2–5. */
36
+ exports.ALL_FOES = [...exports.FOES, ...exports.ADVERSARY_ROSTER];
37
+ /** Every foe/adversary keyed by its stable `id`. */
38
+ exports.FOE_BY_ID = Object.freeze(exports.ALL_FOES.reduce((acc, foe) => {
39
+ acc[foe.id] = foe;
40
+ return acc;
41
+ }, {}));
42
+ /** Every foe/adversary keyed by its display `name` (interop with the seed-parser unions). */
43
+ exports.FOE_BY_NAME = Object.freeze(exports.ALL_FOES.reduce((acc, foe) => {
44
+ acc[foe.name] = foe;
45
+ return acc;
46
+ }, {}));
47
+ //# sourceMappingURL=udtFoes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udtFoes.js","sourceRoot":"","sources":["../../src/udtFoes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * udtHeroes.ts — the Return to Dark Tower hero roster (static reference data).
3
+ *
4
+ * Consumed by `ultimatedarktowerboard` (re-exported, not vendored). Heroes are NOT
5
+ * seed-encoded — this is identity/source metadata only. 14 heroes: 4 base, 2 Alliances,
6
+ * 4 Covenant, 4 Expeditions (Expeditions is unreleased; its heroes are publicly confirmed
7
+ * but provisional until the box ships).
8
+ */
9
+ /**
10
+ * Which product a roster entry ships in (base game + expansions). Distinct from the seed
11
+ * parser's `ExpansionType` (which only encodes the Alliances/Monuments expansion bits) and
12
+ * from `GameSource` (Core vs Competitive play).
13
+ */
14
+ export type ContentSource = 'base' | 'alliances' | 'covenant' | 'expeditions';
15
+ /** Stable, unique hero identity id (kebab-case), e.g. `'archwright'`. */
16
+ export type HeroId = string;
17
+ export interface Hero {
18
+ /** Stable, unique kebab-case identity id. */
19
+ id: HeroId;
20
+ /** Display name. */
21
+ name: string;
22
+ /** The product this hero ships in. */
23
+ source: ContentSource;
24
+ /** Optional fixed start location name, if the hero has one (none recorded yet). */
25
+ startLocation?: string;
26
+ }
27
+ /** All 14 heroes, grouped by source (base → alliances → covenant → expeditions). */
28
+ export declare const HEROES: readonly Hero[];
29
+ /** Heroes keyed by their stable `id`. */
30
+ export declare const HERO_BY_ID: Readonly<Record<HeroId, Hero>>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * udtHeroes.ts — the Return to Dark Tower hero roster (static reference data).
4
+ *
5
+ * Consumed by `ultimatedarktowerboard` (re-exported, not vendored). Heroes are NOT
6
+ * seed-encoded — this is identity/source metadata only. 14 heroes: 4 base, 2 Alliances,
7
+ * 4 Covenant, 4 Expeditions (Expeditions is unreleased; its heroes are publicly confirmed
8
+ * but provisional until the box ships).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.HERO_BY_ID = exports.HEROES = void 0;
12
+ /** All 14 heroes, grouped by source (base → alliances → covenant → expeditions). */
13
+ exports.HEROES = [
14
+ // Base (4)
15
+ { id: 'brutal-warlord', name: 'Brutal Warlord', source: 'base' },
16
+ { id: 'orphaned-scion', name: 'Orphaned Scion', source: 'base' },
17
+ { id: 'relic-hunter', name: 'Relic Hunter', source: 'base' },
18
+ { id: 'spymaster', name: 'Spymaster', source: 'base' },
19
+ // Alliances (2)
20
+ { id: 'archwright', name: 'Archwright', source: 'alliances' },
21
+ { id: 'haunted-recluse', name: 'Haunted Recluse', source: 'alliances' },
22
+ // Covenant (4)
23
+ { id: 'devious-swindler', name: 'Devious Swindler', source: 'covenant' },
24
+ { id: 'relentless-warden', name: 'Relentless Warden', source: 'covenant' },
25
+ { id: 'reverent-astromancer', name: 'Reverent Astromancer', source: 'covenant' },
26
+ { id: 'undaunted-aegis', name: 'Undaunted Aegis', source: 'covenant' },
27
+ // Expeditions (4, unreleased — provisional)
28
+ { id: 'jocular-druid', name: 'Jocular Druid', source: 'expeditions' },
29
+ { id: 'grizzled-mariner', name: 'Grizzled Mariner', source: 'expeditions' },
30
+ { id: 'clever-tinkerer', name: 'Clever Tinkerer', source: 'expeditions' },
31
+ { id: 'enlightened-ascetic', name: 'Enlightened Ascetic', source: 'expeditions' },
32
+ ];
33
+ /** Heroes keyed by their stable `id`. */
34
+ exports.HERO_BY_ID = Object.freeze(exports.HEROES.reduce((acc, hero) => {
35
+ acc[hero.id] = hero;
36
+ return acc;
37
+ }, {}));
38
+ //# sourceMappingURL=udtHeroes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udtHeroes.js","sourceRoot":"","sources":["../../src/udtHeroes.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAuBH,oFAAoF;AACvE,QAAA,MAAM,GAAoB;IACrC,WAAW;IACX,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;IAChE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;IAChE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE;IAC5D,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE;IACtD,gBAAgB;IAChB,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE;IAC7D,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE;IACvE,eAAe;IACf,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE;IACxE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE;IAC1E,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EAAE;IAChF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE;IACtE,4CAA4C;IAC5C,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE;IACrE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE;IAC3E,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE;IACzE,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,EAAE;CAClF,CAAC;AAEF,yCAAyC;AAC5B,QAAA,UAAU,GAAmC,MAAM,CAAC,MAAM,CACrE,cAAM,CAAC,MAAM,CAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAChD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * udtMonuments.ts — the 8 Covenant monuments (static reference roster).
3
+ *
4
+ * Consumed by `ultimatedarktowerboard` (re-exported, not vendored). A monument replaces a
5
+ * building on its space during a Covenant game, but WHICH building space a given monument
6
+ * occupies is a runtime setup choice — NOT fixed data — so no monument→building mapping is
7
+ * encoded here. This is just the roster; placement lives in board state at runtime.
8
+ */
9
+ import type { ContentSource } from './udtHeroes';
10
+ /** Stable, unique monument id (kebab-case), e.g. `'argent-oak'`. */
11
+ export type MonumentId = string;
12
+ export interface Monument {
13
+ /** Stable, unique kebab-case identity id. */
14
+ id: MonumentId;
15
+ /** Display name. */
16
+ name: string;
17
+ /** The product this monument ships in (always `'covenant'`). */
18
+ source: ContentSource;
19
+ }
20
+ /** The 8 Covenant monuments (alphabetical by name). */
21
+ export declare const MONUMENTS: readonly Monument[];
22
+ /** Monuments keyed by their stable `id`. */
23
+ export declare const MONUMENT_BY_ID: Readonly<Record<MonumentId, Monument>>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MONUMENT_BY_ID = exports.MONUMENTS = void 0;
4
+ /** The 8 Covenant monuments (alphabetical by name). */
5
+ exports.MONUMENTS = [
6
+ { id: 'arch-of-the-golden-sun', name: 'Arch of the Golden Sun', source: 'covenant' },
7
+ { id: 'argent-oak', name: 'Argent Oak', source: 'covenant' },
8
+ { id: 'cenotaph-of-the-first-prophet', name: 'Cenotaph of the First Prophet', source: 'covenant' },
9
+ { id: 'colossus-of-bjorn', name: 'Colossus of Bjorn', source: 'covenant' },
10
+ { id: 'endless-necropolis', name: 'Endless Necropolis', source: 'covenant' },
11
+ { id: 'moonstone-temple', name: 'Moonstone Temple', source: 'covenant' },
12
+ { id: 'nightmare-cage', name: 'Nightmare Cage', source: 'covenant' },
13
+ { id: 'tower-shard', name: 'Tower Shard', source: 'covenant' },
14
+ ];
15
+ /** Monuments keyed by their stable `id`. */
16
+ exports.MONUMENT_BY_ID = Object.freeze(exports.MONUMENTS.reduce((acc, monument) => {
17
+ acc[monument.id] = monument;
18
+ return acc;
19
+ }, {}));
20
+ //# sourceMappingURL=udtMonuments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udtMonuments.js","sourceRoot":"","sources":["../../src/udtMonuments.ts"],"names":[],"mappings":";;;AAsBA,uDAAuD;AAC1C,QAAA,SAAS,GAAwB;IAC5C,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE;IACpF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE;IAC5D,EAAE,EAAE,EAAE,+BAA+B,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,UAAU,EAAE;IAClG,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE;IAC1E,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE;IAC5E,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE;IACxE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE;IACpE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE;CAC/D,CAAC;AAEF,4CAA4C;AAC/B,QAAA,cAAc,GAA2C,MAAM,CAAC,MAAM,CACjF,iBAAS,CAAC,MAAM,CAA+B,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC/D,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CACP,CAAC"}