@dreadwood-types/types 0.1.313 → 0.1.315

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.
@@ -0,0 +1,268 @@
1
+ /**
2
+ * BEACON NIGHT (coverage slice 10, track T105, 2026-10-14; levels 8-14): after dark the Old Watchtower's signal basin is lit for ten
3
+ * minutes at one of five places round the tower (three on the open lawn north of the Dreadwoods wall, two inside the woods' northern
4
+ * edge, where other players can attack and nobody heals), and the gang's night raiders come for it. Defenders keep the flame alive: they
5
+ * RELIGHT the basin (a click, a short cool-down) and cut down the raiders that crowd it. Raiders at the basin drain the flame; if it
6
+ * goes out the night is lost, if it still burns when the ten minutes end the night is held. A podium is named by contribution.
7
+ *
8
+ * Everything here is pure: the clock, the places, the flame, the scoring, the prizes, the chat lines and the saved state, so the
9
+ * server, a test and the login line agree. The clock is READ off the wall clock, never rolled or stored (the Passing Bay's pattern):
10
+ * four starts a day, at 01:50, 05:40, 19:50 and 23:40 UTC, picked so that no ring fight, lair awakening, Heartwood Hunt, Fishing Derby
11
+ * round or Redcap patrol window comes within ten minutes of one (the test checks 300 days of every clock). A restart, a deploy or a
12
+ * second server agree on the slot and the place without saving anything.
13
+ *
14
+ * The scoring is the Heartwood Hunt's collusion-safe one (heartwoodHunt.ts), built against farming (abuse-first):
15
+ * - only OWN actions score: a relight that really raised the flame, and a kill of this night's own raiders. A player kill, a death or a
16
+ * trade scores nothing, so an ambush at the basin takes points from nobody and a friend cannot be fed points;
17
+ * - each side is capped (12 relights, 10 raider kills); past the caps an action still helps the flame, which is the shared goal;
18
+ * - one place per ACCOUNT, a minimum score to be paid at all, a podium only when three different accounts qualified AND the beacon was
19
+ * held, and at most three paid nights per account per UTC day;
20
+ * - ties go to whoever reached the score first, then the character key, so the order is total;
21
+ * - prizes are Explorer XP, torches and arrows: no coins, nothing that outclasses the gated 41+ gear.
22
+ *
23
+ * Amounts are PLACEHOLDERS for the balance pass, done last with James. The raiders are the Old Watchtower gang's own kind (hijackers).
24
+ */
25
+ export declare const BEACON_NAME = "Beacon Night";
26
+ /** The four starts, in minutes after UTC midnight: 01:50, 05:40, 19:50 and 23:40 (night hours; the test checks them against every other clock). */
27
+ export declare const BEACON_START_MINUTES: readonly number[];
28
+ export declare const BEACON_PER_DAY: number;
29
+ /** How long the basin burns and is defended. */
30
+ export declare const BEACON_ROUND_MS: number;
31
+ /** How long the result stays up after the round. */
32
+ export declare const BEACON_RESULTS_MS: number;
33
+ /** The warning before the round starts, and the warning before it ends. */
34
+ export declare const BEACON_SOON_MS: number;
35
+ export declare const BEACON_LAST_MS: number;
36
+ /** idle (nothing announced), soon, open, last (the final minute), results (the board is up). */
37
+ export type BeaconStage = 'idle' | 'soon' | 'open' | 'last' | 'results';
38
+ export declare const BEACON_STAGES: readonly BeaconStage[];
39
+ export declare function isBeaconStage(s: unknown): s is BeaconStage;
40
+ /** The start of slot `slot` (slot = day * 4 + the start's index; any integer, negative included). */
41
+ export declare function beaconStartOf(slot: number): number;
42
+ export declare function beaconEndOf(slot: number): number;
43
+ export type BeaconClock = {
44
+ /** The night this stage is about: the open or just-finished one, else the next to start. */
45
+ slot: number;
46
+ stage: BeaconStage;
47
+ /** Time to this night's start (0 once it has begun). */
48
+ msToStart: number;
49
+ /** Time to this night's end (0 once it is over). */
50
+ msToEnd: number;
51
+ };
52
+ export declare function beaconClockAt(now: number): BeaconClock;
53
+ /** True while the basin burns and relights and raider kills count. */
54
+ export declare function beaconIsOpen(stage: BeaconStage): boolean;
55
+ /** The next night to start strictly after `now` (for the login line). */
56
+ export declare function beaconNextRound(now: number): {
57
+ slot: number;
58
+ startsAt: number;
59
+ };
60
+ /** The UTC day a time falls in (the daily paid-nights cap resets at midnight UTC). */
61
+ export declare function beaconDayOf(now: number): number;
62
+ /**
63
+ * Where the basin can be lit (world tiles; the backend smoke pins each one standable with a standable ring round it, outside the Old
64
+ * Watchtower gang's camp (x 374-406, z 226-250) by at least twelve tiles). `woods` marks a place inside the Dreadwoods (PvP, no healing).
65
+ */
66
+ export declare const BEACON_SITES: readonly {
67
+ id: string;
68
+ x: number;
69
+ z: number;
70
+ label: string;
71
+ woods: boolean;
72
+ }[];
73
+ /** The place of a night. Consecutive nights never share one (the step is 2 inside a block of five and 3 across a block edge). */
74
+ export declare function beaconSiteFor(slot: number): (typeof BEACON_SITES)[number];
75
+ /** The basin: a quest prop (the old `beacon` model) the server places while a night is on and takes away after. */
76
+ export declare const BEACON_ID = "bn-beacon";
77
+ export declare const BEACON_PROP = "beacon";
78
+ export declare const BEACON_STYLE = "beacon:night";
79
+ export declare const BEACON_ENTITY_NAME = "The Watchtower's Signal Basin";
80
+ export declare const BEACON_IDLE_LINE = "A great iron basin of pitch and driftwood. Lit on the right nights, it tells the road the Watchtower is held.";
81
+ export declare const BEACON_FLAME: {
82
+ readonly max: 100;
83
+ readonly start: 60;
84
+ /** What one relight adds. */
85
+ readonly relight: 6;
86
+ /** Flame lost per second for each raider standing within `atBasin` tiles of the basin. */
87
+ readonly drainPerRaiderPerSec: 1.2;
88
+ /** The wind: flame lost per second with no raider at all. */
89
+ readonly decayPerSec: 0.1;
90
+ readonly atBasin: 2;
91
+ /** One relight per player this often (a click held down adds nothing). */
92
+ readonly relightCooldownMs: 3000;
93
+ /** A relight needs the player this close to the basin (the server's reach rules apply too). */
94
+ readonly reach: 3;
95
+ };
96
+ /** The flame after `dtMs` with `raidersAtBasin` raiders on it, never below 0. Pure. */
97
+ export declare function beaconFlameAfter(flame: number, dtMs: number, raidersAtBasin: number): number;
98
+ /** The flame after one relight (capped). */
99
+ export declare function beaconFlameRelit(flame: number): number;
100
+ /** True when a player may relight now: the cool-down has run and the flame is not already full. */
101
+ export declare function beaconMayRelight(lastAtMs: number | undefined, now: number, flame: number): boolean;
102
+ /**
103
+ * The night raiders: the Old Watchtower gang's own kind, sent in waves while the basin burns. Levels follow the defenders' average
104
+ * Combat, clamped; the count follows how many are at the basin. They aggro defenders in reach, and advance on the basin when nobody is
105
+ * in reach. PLACEHOLDERS.
106
+ */
107
+ export declare const BEACON_RAIDERS: {
108
+ readonly kind: "hijacker";
109
+ readonly idPrefix: "bn-";
110
+ readonly name: "Night Raider";
111
+ readonly firstWave: 3;
112
+ readonly waveEveryMs: 30000;
113
+ readonly perExtraDefender: 1;
114
+ readonly waveMax: 7;
115
+ readonly aliveCap: 12;
116
+ /** Raiders come out of the dark this far from the basin. */
117
+ readonly spawnMin: 10;
118
+ readonly spawnMax: 13;
119
+ readonly aggroRadius: 8;
120
+ readonly leashRadius: 20;
121
+ readonly minLevel: 10;
122
+ readonly maxLevel: 14;
123
+ /** A defender is "at the basin" this close (a wave grows with them). */
124
+ readonly nearBasin: 14;
125
+ /** A player under this Combat is not locked on to (they may still relight, which is the safe job). */
126
+ readonly aggroCombat: 8;
127
+ readonly aggroText: "A night raider charges out of the dark at you!";
128
+ };
129
+ /** How many raiders a wave brings: the first wave is fixed; later ones grow with the defenders at the basin. */
130
+ export declare function beaconWaveSize(wave: number, defenders: number): number;
131
+ /** The raiders' level for a party's average Combat. */
132
+ export declare function beaconRaiderLevel(avgCombat: number): number;
133
+ export declare const BEACON_LIGHT_POINTS = 2;
134
+ export declare const BEACON_KILL_POINTS = 3;
135
+ /** Past these a relight or a kill still helps (the flame still burns) but scores nothing more. */
136
+ export declare const BEACON_LIGHT_CAP = 12;
137
+ export declare const BEACON_KILL_CAP = 10;
138
+ /** The least score that counts as having taken part (3 relights, or 2 raiders). Below it: no prize, no mark. */
139
+ export declare const BEACON_MIN_SCORE = 6;
140
+ /** Podium prizes need at least this many different accounts above the minimum, and the beacon held. */
141
+ export declare const BEACON_MIN_DEFENDERS = 3;
142
+ /** Paid nights per account per UTC day (alts and shared accounts cannot farm every night of the day). */
143
+ export declare const BEACON_DAILY_PAID_NIGHTS = 3;
144
+ /** A raider kill counts only for a player this close to the basin (a raider kited across the lawn scores nothing). */
145
+ export declare const BEACON_KILL_REACH = 24;
146
+ export declare function beaconScore(lights: number, kills: number): number;
147
+ export type BeaconEntry = {
148
+ /** characterId. */
149
+ key: string;
150
+ /** The account, so one account's characters cannot all take prizes. Empty when unknown (then the key stands in). */
151
+ account: string;
152
+ name: string;
153
+ /** Relights that really raised the flame, and raider kills this night (uncapped; the score caps them). */
154
+ lights: number;
155
+ kills: number;
156
+ /** When the score last rose (ties go to whoever reached the score first). */
157
+ at: number;
158
+ };
159
+ export declare function beaconEntryScore(e: Pick<BeaconEntry, 'lights' | 'kills'>): number;
160
+ type Who = {
161
+ key: string;
162
+ account: string;
163
+ name: string;
164
+ };
165
+ /** One relight by this character. Returns a new entry (the old is untouched). */
166
+ export declare function beaconWithLight(entry: BeaconEntry | undefined, who: Who, at: number): BeaconEntry;
167
+ /** One raider kill by this character. */
168
+ export declare function beaconWithKill(entry: BeaconEntry | undefined, who: Who, at: number): BeaconEntry;
169
+ export declare function beaconQualifies(e: BeaconEntry): boolean;
170
+ /**
171
+ * The ranking: higher score first, then whoever reached it first, then the key (a total order a test can pin). One place per ACCOUNT:
172
+ * of an account's characters only the best-placed one is listed. Entries below the minimum score are not ranked.
173
+ */
174
+ export declare function beaconRanking(entries: readonly BeaconEntry[]): BeaconEntry[];
175
+ /** The 1-based place of a character in the ranking (ranked entries only), or 0. */
176
+ export declare function beaconPlaceOf(entries: readonly BeaconEntry[], key: string): number;
177
+ export type BeaconRibbon = 'red' | 'blue' | 'bronze';
178
+ export declare const BEACON_RIBBON_LABEL: Readonly<Record<BeaconRibbon, string>>;
179
+ /** PLACEHOLDER prizes by place (held night only): Explorer XP and birch arrows on top of the participation prize. */
180
+ export declare const BEACON_PODIUM_PRIZES: readonly {
181
+ explorerXp: number;
182
+ arrows: number;
183
+ }[];
184
+ /** Everyone paid who qualified. A beacon that went out halves the XP and gives no torches. */
185
+ export declare const BEACON_PARTICIPATION: {
186
+ readonly explorerXp: 25;
187
+ readonly torches: 2;
188
+ };
189
+ export declare const BEACON_TORCH_KIND = "unlitbirchtorch";
190
+ export declare const BEACON_ARROW_KIND = "bircharrow";
191
+ /** Ledger marks (types explorerLedger.ts `beacon` page) a result can write. */
192
+ export declare const BEACON_MARK_ENTERED = "beacon:entered";
193
+ export declare const BEACON_MARK_HELD = "beacon:held";
194
+ export declare const BEACON_MARK_LIGHT = "beacon:lit";
195
+ export declare const BEACON_MARK_GUARD = "beacon:guard";
196
+ export declare const BEACON_MARK_RIBBON: Readonly<Record<BeaconRibbon, string>>;
197
+ export type BeaconItem = {
198
+ kind: string;
199
+ qty: number;
200
+ };
201
+ /** What one character is owed for a night. */
202
+ export type BeaconPrize = {
203
+ explorerXp: number;
204
+ items: BeaconItem[];
205
+ /** Ledger marks to write. */
206
+ marks: string[];
207
+ /** The chat line they are told. */
208
+ text: string;
209
+ };
210
+ /** The paid-nights record: per account, the day and how many nights were paid that day. */
211
+ export type BeaconPaid = Record<string, {
212
+ day: number;
213
+ n: number;
214
+ }>;
215
+ /** Paid nights this account has had on this UTC day. */
216
+ export declare function beaconPaidToday(paid: BeaconPaid, account: string, day: number): number;
217
+ /** The record after one more paid night for these accounts (old days dropped). Returns a new object. */
218
+ export declare function beaconWithPaid(paid: BeaconPaid, accounts: readonly string[], day: number): BeaconPaid;
219
+ export type BeaconPrizeInput = {
220
+ held: boolean;
221
+ paid: BeaconPaid;
222
+ day: number;
223
+ };
224
+ /**
225
+ * Everything a finished night pays, by character key. One prize per account (the ranking lists an account once). An account that has
226
+ * had its paid nights today is skipped (the podium moves up to the next account). Pure, so a restart that finalises a night late pays
227
+ * exactly what the clock-time finalise would have.
228
+ */
229
+ export declare function beaconPrizes(entries: readonly BeaconEntry[], input: BeaconPrizeInput): Map<string, BeaconPrize>;
230
+ /** The world chat line for a finished night. */
231
+ export declare function beaconResultLine(entries: readonly BeaconEntry[], held: boolean): string;
232
+ /** The world chat line for a stage (idle and results have none: the results line is built from the standings). */
233
+ export declare function beaconChatLine(stage: BeaconStage, slot: number): string | null;
234
+ /** The login line's piece about Beacon Night. */
235
+ export declare function beaconTodayText(now: number): string;
236
+ /** What /beacon tells a player. */
237
+ export declare function beaconStatusLines(clock: BeaconClock, entries: readonly BeaconEntry[], myKey: string | null, flame: number, now: number): string[];
238
+ export type BeaconOutcome = 'none' | 'held' | 'out';
239
+ export type BeaconSave = {
240
+ v: 1;
241
+ /** The night the entries belong to (-1 = none). */
242
+ slot: number;
243
+ /** The stage last announced for `announced.slot`. */
244
+ announced: {
245
+ slot: number;
246
+ stage: BeaconStage;
247
+ } | null;
248
+ /** True once `slot`'s results have been worked out and paid or queued. */
249
+ finalized: boolean;
250
+ /** The flame now (while the night is open), and how the night ended. */
251
+ flame: number;
252
+ outcome: BeaconOutcome;
253
+ /** Raider waves sent this night. */
254
+ waves: number;
255
+ entries: BeaconEntry[];
256
+ /** Prizes for characters who were offline when the night ended, by characterId. */
257
+ pending: Record<string, BeaconPrize[]>;
258
+ /** Paid nights per account per UTC day. */
259
+ paid: BeaconPaid;
260
+ };
261
+ export declare function emptyBeaconSave(): BeaconSave;
262
+ /** At most this many prizes wait for one character, and entries are never more than this many. */
263
+ export declare const BEACON_PENDING_MAX = 5;
264
+ export declare const BEACON_MAX_ENTRIES = 1000;
265
+ /** A saved state, checked field by field (it comes from the database); anything wrong gives the empty state. */
266
+ export declare function parseBeaconSave(raw: unknown): BeaconSave;
267
+ export {};
268
+ //# sourceMappingURL=beaconNight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beaconNight.d.ts","sourceRoot":"","sources":["../src/beaconNight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAI1C,mJAAmJ;AACnJ,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA2B,CAAC;AAC9E,eAAO,MAAM,cAAc,QAA8B,CAAC;AAC1D,gDAAgD;AAChD,eAAO,MAAM,eAAe,QAAc,CAAC;AAC3C,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAC5C,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAc,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAa,CAAC;AAEzC,gGAAgG;AAChG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACxE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAgD,CAAC;AAEjG,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE1D;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAWD,MAAM,MAAM,WAAW,GAAG;IACxB,4FAA4F;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAWtD;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAExD;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAI/E;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAYD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAMtG,CAAC;AAEF,iIAAiI;AACjI,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAKzE;AAED,mHAAmH;AACnH,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,YAAY,iBAAyB,CAAC;AACnD,eAAO,MAAM,kBAAkB,kCAAkC,CAAC;AAClE,eAAO,MAAM,gBAAgB,kHAAkH,CAAC;AAIhJ,eAAO,MAAM,YAAY;;;IAGvB,6BAA6B;;IAE7B,0FAA0F;;IAE1F,6DAA6D;;;IAG7D,0EAA0E;;IAE1E,+FAA+F;;CAEvF,CAAC;AAEX,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAI5F;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlG;AAID;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;IASzB,4DAA4D;;;;;;;IAO5D,wEAAwE;;IAExE,sGAAsG;;;CAG9F,CAAC;AAEX,gHAAgH;AAChH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,gHAAgH;AAChH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,yGAAyG;AACzG,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,sHAAsH;AACtH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,oHAAoH;IACpH,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,0GAA0G;IAC1G,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,MAAM,CAEjF;AAED,KAAK,GAAG,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAM1D,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,CAIjG;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,CAIhG;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAEvD;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAmB5E;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGlF;AAID,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAuE,CAAC;AAE/I,qHAAqH;AACrH,eAAO,MAAM,oBAAoB,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAIjF,CAAC;AACF,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB;;;CAA0C,CAAC;AAC5E,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AACnD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAuE,CAAC;AAE9I,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,8CAA8C;AAC9C,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAKrG;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAqC/G;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAOvF;AAID,kHAAkH;AAClH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa9E;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBjJ;AAID,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,EAAE,CAAC,CAAC;IACL,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACvC,2CAA2C;IAC3C,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAwCvC,gHAAgH;AAChH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA6CxD"}