homebridge-dyson-solarcycle-morph 1.6.0 → 1.7.1

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,38 @@ All notable changes to this project are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.7.1] — 2026-09-23
9
+
10
+ ### Changed
11
+
12
+ - **"Use this day" and "Apply the age adjustment" are always shown, above the
13
+ fields they govern**, instead of appearing only once a time or a year was
14
+ filled in — which left "Use this day" invisible until then. Because the
15
+ settings page now fills in the age switch's default on every light,
16
+ `ageAdjust` without `yearOfBirth` is ignored rather than refused.
17
+ - The README says a brightness change ends daylight tracking too, not only a
18
+ colour temperature, and has a new section, *How this was worked out*: the
19
+ decompiled Android app, the analysed iOS Bluetooth capture, and the
20
+ measurements on a real lamp behind what the plugin does. *Credits* now says
21
+ what came from the hass-dyson notes and what did not.
22
+
23
+ ## [1.7.0] — 2026-09-23
24
+
25
+ ### Changed
26
+
27
+ - **A day of your own now has a switch, "Use this day" (`customDay`).**
28
+ `dayStart` and `dayEnd` are put in the lamp only while it is on, and ignored
29
+ otherwise — so the times can stay filled in without being applied, and are
30
+ not checked while they are not used. **Off by default: a config that sets the
31
+ times without the switch stops applying them**, and the log says so on
32
+ start-up. Turning the switch off does not undo a day already written; the
33
+ MyDyson app still has to.
34
+ - The daylight switch's description says that setting brightness by hand ends
35
+ the tracking too, not only colour temperature.
36
+ - Settings page texts corrected: the location message was missing an "if", and
37
+ the header said every lamp becomes two accessories even with all its
38
+ switches turned off.
39
+
8
40
  ## [1.6.0] — 2026-09-22
9
41
 
10
42
  ### Fixed
@@ -180,7 +212,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
180
212
  - **The log says what the lamp makes of its location.** Once a connection is up:
181
213
 
182
214
  ```
183
- F0:B1:A7:75:B1:D1 puts today's daylight between 07:09 and 19:22
215
+ AA:BB:CC:DD:EE:FF puts today's daylight between 07:09 and 19:22
184
216
  ```
185
217
 
186
218
  This is the lamp's own sunrise and sunset, and the only honest answer to
package/README.md CHANGED
@@ -130,9 +130,9 @@ towards a new level rather than jumping, and with Auto Brightness on it keeps
130
130
  adjusting to suit the room. Asking for 100% and seeing 88% is the lamp doing its
131
131
  job — turn Auto Brightness off if you would rather it stayed put.
132
132
 
133
- **Setting a colour temperature ends daylight tracking**, and the Daylight switch
134
- turns itself off when you do. That is the lamp's own behaviour, not something
135
- the plugin decides. Flip the switch back on to resume.
133
+ **Setting a brightness or a colour temperature ends daylight tracking**, and
134
+ the Daylight switch turns itself off when you do. That is the lamp's own
135
+ behaviour, not something the plugin decides. Flip the switch back on to resume.
136
136
 
137
137
  **The three mode switches work while the lamp is off**, though the lamp itself
138
138
  will not have them until it is lit — it takes none of the three while it is off.
@@ -160,10 +160,11 @@ Everything except the lights is optional.
160
160
  | **Lights → BLE MAC address** | Filled in by the scan |
161
161
  | **Lights → Serial number** | Filled in by the scan. Identifies the accessory, so changing it creates a new one |
162
162
  | **Lights → Latitude**, **Longitude** | Where the lamp stands, in decimal degrees. Optional; set both or neither |
163
- | **Lights → Year of birth** | Turns on the lamp's age adjustment. Optional |
164
- | **Lights → Apply the age adjustment** | The lamp's own switch for it. On by default |
163
+ | **Lights → Use this day** | Puts the two times below in the lamp. Off by default, and off they are ignored |
165
164
  | **Lights → Day starts at** | Optional. Replaces the real sunrise, as `HH:MM` |
166
165
  | **Lights → Day ends at** | Optional. Replaces the real sunset |
166
+ | **Lights → Apply the age adjustment** | The lamp's own switch for it. On by default; only used with a year of birth |
167
+ | **Lights → Year of birth** | Turns on the lamp's age adjustment. Optional |
167
168
  | **Lights → Expose daylight tracking** | The Daylight switch. On by default |
168
169
  | **Lights → Expose auto brightness** | The Auto Brightness switch. On by default |
169
170
  | **Lights → Expose movement mode** | The Movement switch. On by default |
@@ -186,11 +187,11 @@ editing `config.json` by hand and for reading what the UI produced:
186
187
  "lights": [
187
188
  {
188
189
  "name": "Desk",
189
- "mac": "F0:B1:A7:75:B1:D1",
190
- "serial": "E5T-EU-NFA1279A",
191
- "latitude": 48.6719,
192
- "longitude": 9.2807,
193
- "yearOfBirth": 1974,
190
+ "mac": "AA:BB:CC:DD:EE:FF",
191
+ "serial": "E5T-EU-6DYYJX5E",
192
+ "latitude": 48.7784,
193
+ "longitude": 9.18,
194
+ "yearOfBirth": 1985,
194
195
  "ageAdjust": true,
195
196
  "daylightSwitch": true,
196
197
  "autoBrightnessSwitch": true,
@@ -219,8 +220,9 @@ the lamp. The example above shows every key at once, which no real config needs.
219
220
  | `lights[].longitude` | number | unset | Decimal degrees, -180 to 180 |
220
221
  | `lights[].yearOfBirth` | integer | unset | 1900 to this year |
221
222
  | `lights[].ageAdjust` | boolean | `true` | Only read when `yearOfBirth` is set |
222
- | `lights[].dayStart` | string | | `HH:MM`. Both or neither, end after start |
223
+ | `lights[].dayStart` | string | | `HH:MM`, end after start. Only read when `customDay` is on |
223
224
  | `lights[].dayEnd` | string | | |
225
+ | `lights[].customDay` | boolean | `false` | Puts `dayStart`/`dayEnd` in the lamp; off, they are ignored |
224
226
  | `lights[].daylightSwitch` | boolean | `true` | |
225
227
  | `lights[].autoBrightnessSwitch` | boolean | `true` | |
226
228
  | `lights[].movementSwitch` | boolean | `true` | |
@@ -237,7 +239,8 @@ than half-applied, because half of either would quietly do the wrong thing:
237
239
  - `latitude` without `longitude`, or the other way round. A lamp told only its
238
240
  latitude would put itself on the Greenwich meridian and track the wrong sunset
239
241
  all year.
240
- - `ageAdjust` without `yearOfBirth`. There would be nothing to adjust for.
242
+ - `customDay` on without both `dayStart` and `dayEnd`. With it off, the times are
243
+ not checked at all, since they are not used.
241
244
 
242
245
  **No key for the lamp appears here.** Pairing puts it in the plugin's storage
243
246
  directory instead — see [What is stored, and where](#what-is-stored-and-where).
@@ -277,13 +280,13 @@ it still reads them on connecting and puts them in the debug log, which is the
277
280
  way to find out what the app put there:
278
281
 
279
282
  ```
280
- Lamp F0:B1:A7:75:B1:D1 places itself at 48.67190, 9.28070
283
+ Lamp AA:BB:CC:DD:EE:FF places itself at 48.77840, 9.18000
281
284
  ```
282
285
 
283
286
  Fill them in and it writes yours whenever the lamp disagrees, and says so:
284
287
 
285
288
  ```
286
- Location of F0:B1:A7:75:B1:D1 set to 48.67190, 9.28070 (was 50.11090, 8.68210)
289
+ Location of AA:BB:CC:DD:EE:FF set to 48.77840, 9.18000 (was 50.11090, 8.68210)
287
290
  ```
288
291
 
289
292
  **Use my current location** on the settings page fills both fields in for every
@@ -299,26 +302,32 @@ machine contacts already sees. Check what it filled in before saving.
299
302
  ### A day of your own
300
303
 
301
304
  Daylight tracking follows the real sunrise and sunset by default. Two optional
302
- fields replace that with a day you choose:
305
+ fields replace that with a day you choose, and a switch decides whether they
306
+ are used:
303
307
 
304
308
  ```json
305
309
  "dayStart": "07:30",
306
- "dayEnd": "22:00"
310
+ "dayEnd": "22:00",
311
+ "customDay": true
307
312
  ```
308
313
 
314
+ With `customDay` off, which is the default, the times are ignored and can stay
315
+ filled in for later. On the settings page the switch is **Use this day**, just
316
+ above the two times.
317
+
309
318
  The lamp keeps its warm-to-cool-to-warm shape and fits it between those two
310
319
  times instead of the sun's, and falls back to a softer, warmer baseline once the
311
320
  day is over. It is the same pair the MyDyson app offers as *Sunrise* and
312
- *Sunset*. Supply both or neither, and the end has to come after the start — the
313
- lamp stores two plain minute counts and has no way to express a day that runs
314
- past midnight. Leave them out and the sun decides.
321
+ *Sunset*. With the switch on, both are needed and the end has to come after the
322
+ start — the lamp stores two plain minute counts and has no way to express a day
323
+ that runs past midnight. Leave the switch off and the sun decides.
315
324
 
316
325
  The effect is immediate and visible: setting the end to a time already past
317
326
  drops the lamp to its baseline within a second, and putting the real one back
318
327
  brings it straight up again.
319
328
 
320
- **There is no way back to automatic from here.** Clearing the fields stops the
321
- plugin correcting the lamp, but whatever day was last written stays in it. The
329
+ **There is no way back to automatic from here.** Turning the switch off stops
330
+ the plugin correcting the lamp, but whatever day was last written stays in it. The
322
331
  lamp may recompute the times from its location on its own — that is untested —
323
332
  and the MyDyson app certainly can. Until that is settled, treat setting a day as
324
333
  something the app has to undo.
@@ -331,7 +340,7 @@ The MyDyson app writes both on every connection, and so does this plugin, only
331
340
  when the lamp disagrees:
332
341
 
333
342
  ```
334
- UTC offset of F0:B1:A7:75:B1:D1 set to 2 (was 1)
343
+ UTC offset of AA:BB:CC:DD:EE:FF set to 2 (was 1)
335
344
  ```
336
345
 
337
346
  **There is nothing to configure.** Both come from the time zone of the machine
@@ -351,13 +360,13 @@ from. What answers it is the day the lamp has worked out, which appears on every
351
360
  connection:
352
361
 
353
362
  ```
354
- F0:B1:A7:75:B1:D1 puts today's daylight between 07:04 and 19:30
363
+ AA:BB:CC:DD:EE:FF puts today's daylight between 07:04 and 19:30
355
364
  ```
356
365
 
357
366
  A lamp with no location has no day, and says so:
358
367
 
359
368
  ```
360
- F0:B1:A7:75:B1:D1 has worked out no sunrise or sunset, which means it holds no
369
+ AA:BB:CC:DD:EE:FF has worked out no sunrise or sunset, which means it holds no
361
370
  location. Daylight tracking cannot run until one is set
362
371
  ```
363
372
 
@@ -383,7 +392,7 @@ owner"*. If a different account got there first the plugin says so and changes
383
392
  nothing:
384
393
 
385
394
  ```
386
- The age adjustment on F0:B1:A7:75:B1:D1 was set by a different Dyson account
395
+ The age adjustment on AA:BB:CC:DD:EE:FF was set by a different Dyson account
387
396
  and only that account can change it.
388
397
  ```
389
398
 
@@ -487,12 +496,62 @@ The protocol, including where a real lamp disagreed with the published notes, is
487
496
  written up in [docs/PROTOCOL.md](docs/PROTOCOL.md). Building, testing and
488
497
  releasing are in [CONTRIBUTING.md](CONTRIBUTING.md).
489
498
 
499
+ ## How this was worked out
500
+
501
+ Dyson publishes nothing about this lamp, and the published notes this plugin
502
+ started from turned out to be the beginning rather than the answer. Most of
503
+ what the plugin does had to be found out, and much of it the slow way:
504
+
505
+ - **The MyDyson Android app was decompiled and read**, class by obfuscated
506
+ class. Its identifiers change from one class to the next, and it builds its
507
+ Bluetooth UUIDs at runtime from four-digit fragments, so searching it for a
508
+ UUID finds nothing. Its routing table for messages looks complete and is not:
509
+ the message that sets the lamp's clock is built elsewhere, and missing it cost
510
+ two days.
511
+ - **The iOS app's Bluetooth traffic was captured and analysed.** An iPhone
512
+ records it in a sysdiagnose once Apple's Bluetooth logging profile is
513
+ installed. Its packet log was parsed directly, message by message, and put
514
+ side by side with what this plugin sends. That is where the clock message
515
+ (`0x80`) and attribute subscriptions (`0x96`) came from. Neither appears in
516
+ the notes this started from.
517
+ - **Everything was measured against a real lamp**, from a Raspberry Pi, with
518
+ test builds put onto it as prereleases. Connection reliability was measured
519
+ over repeated runs, which is why the plugin makes four quick attempts rather
520
+ than one clever one: one succeeds about two times in three, four together
521
+ above 98%. The 150 ms gap between writes has a 100 ms measurement behind
522
+ it. The whole attribute range `0x2000`–`0x2040` was read one attribute at a
523
+ time. Daylight tracking was checked against a NOAA sunrise calculation,
524
+ across deliberate power cuts and overnight, and by watching a sunrise from
525
+ the lamp's log.
526
+ - **Where the lamp and the published notes disagreed, the lamp won.** They
527
+ place everything under one Bluetooth service where this lamp uses three,
528
+ call the encryption AES-GCM where it is AES-CBC with an HMAC, require
529
+ acknowledged writes the lamp does not even offer, and describe a motion
530
+ sensor that never reports motion.
531
+ - **The lamp does not always tell the truth.** For some settings it confirms a
532
+ write and throws the value away, so the plugin reads those settings back
533
+ rather than trusting the reply. Why the lamp would not keep a location took
534
+ two days, dozens of refused writes, and eight theories that were tested and
535
+ dropped: write order, the app's timing, a beacon exchange, a hidden set-up
536
+ flag. It turned out that nobody had told it the time.
537
+
538
+ The findings, including the wrong turns, are in
539
+ [docs/PROTOCOL.md](docs/PROTOCOL.md), so nobody has to take the same wrong
540
+ turns again.
541
+
490
542
  ## Credits
491
543
 
492
- The BLE protocol was reverse-engineered from the MyDyson Android app by
493
- **S-Termi** and documented in
494
- [cmgrayb/hass-dyson](https://github.com/cmgrayb/hass-dyson). This plugin is an
495
- independent TypeScript implementation, cross-checked against that reference.
544
+ The starting point was the BLE notes by **S-Termi**, reverse-engineered from the
545
+ MyDyson Android app and published in
546
+ [cmgrayb/hass-dyson](https://github.com/cmgrayb/hass-dyson): the handshake, the
547
+ message framing and the main control characteristics, enough to get a
548
+ connection going and the light switching. Most of the rest — the clock, the
549
+ location and the day, the attribute channel and its acknowledgements,
550
+ subscriptions, the presets, age adjustment, and every correction to those
551
+ notes — came from reading the decompiled Android app again, analysing the iOS
552
+ app's Bluetooth traffic, and measuring a real lamp; see
553
+ [How this was worked out](#how-this-was-worked-out). This plugin is an
554
+ independent TypeScript implementation.
496
555
 
497
556
  Not affiliated with or endorsed by Dyson.
498
557
 
@@ -2,7 +2,7 @@
2
2
  "pluginAlias": "DysonSolarcycleMorph",
3
3
  "pluginType": "platform",
4
4
  "singular": true,
5
- "headerDisplay": "Controls the Bluetooth-only Dyson Solarcycle / Lightcycle Morph.\n\n**The lamp must be registered in the MyDyson app.** Its key is issued by Dyson against the account the lamp belongs to and cannot be read from the device itself.\n\nEach lamp becomes two accessories in the Home app: the light itself, and a second one holding the switches below.",
5
+ "headerDisplay": "Controls the Bluetooth-only Dyson Solarcycle / Lightcycle Morph.\n\n**The lamp must be registered in the MyDyson app.** Its key is issued by Dyson against the account the lamp belongs to and cannot be read from the device itself.\n\nEach lamp becomes two accessories in the Home app: the light itself, and a second one holding the switches below. With every switch turned off, that second one is left out.",
6
6
  "schema": {
7
7
  "type": "object",
8
8
  "required": [
@@ -71,7 +71,7 @@
71
71
  "type": "number",
72
72
  "minimum": -90,
73
73
  "maximum": 90,
74
- "placeholder": "48.6719",
74
+ "placeholder": "48.7784",
75
75
  "description": "Decimal degrees. The lamp works out sunrise and sunset from this, which is what daylight tracking follows."
76
76
  },
77
77
  "longitude": {
@@ -79,7 +79,7 @@
79
79
  "type": "number",
80
80
  "minimum": -180,
81
81
  "maximum": 180,
82
- "placeholder": "9.2807",
82
+ "placeholder": "9.18",
83
83
  "description": "Decimal degrees. Set both or neither — a lamp is not told half a location."
84
84
  },
85
85
  "dayStart": {
@@ -87,7 +87,7 @@
87
87
  "type": "string",
88
88
  "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]$",
89
89
  "placeholder": "08:00",
90
- "description": "Optional. Replaces the real sunrise for this lamp — daylight tracking then begins here instead. Supply both this and the end, or neither; leave both empty and the lamp follows the actual sun."
90
+ "description": "Optional. Replaces the real sunrise for this lamp — daylight tracking then begins here instead. Only used while \"Use this day\" above is on."
91
91
  },
92
92
  "dayEnd": {
93
93
  "title": "Day ends at",
@@ -96,27 +96,30 @@
96
96
  "placeholder": "18:00",
97
97
  "description": "Optional. Replaces the real sunset. The lamp returns to its baseline settings once the day is over."
98
98
  },
99
+ "customDay": {
100
+ "title": "Use this day",
101
+ "type": "boolean",
102
+ "default": false,
103
+ "description": "Puts the two times below in the lamp. Off, they are ignored and the lamp's day is not touched. Turning it off does not undo a day already written: the lamp keeps it until the MyDyson app sets it back."
104
+ },
99
105
  "yearOfBirth": {
100
106
  "title": "Year of birth",
101
107
  "type": "integer",
102
108
  "minimum": 1900,
103
- "placeholder": "1974",
109
+ "placeholder": "1985",
104
110
  "description": "Age adjustment: the lamp trims the brightness of its Study and Relax modes to suit the main user’s eyes. The lamp stores the year only, encrypted, and keeps it to the Dyson account that set it. Leave empty to leave the setting alone."
105
111
  },
106
112
  "ageAdjust": {
107
113
  "title": "Apply the age adjustment",
108
114
  "type": "boolean",
109
115
  "default": true,
110
- "condition": {
111
- "functionBody": "return model.lights && model.lights[arrayIndices[0]] && model.lights[arrayIndices[0]].yearOfBirth;"
112
- },
113
- "description": "The lamp’s own switch for it. Turning this off leaves the year in place but stops the lamp acting on it."
116
+ "description": "The lamp’s own switch for the age adjustment. Only used when a year of birth is set below. Turning it off leaves the year in the lamp but stops it acting on it."
114
117
  },
115
118
  "daylightSwitch": {
116
119
  "title": "Expose daylight tracking",
117
120
  "type": "boolean",
118
121
  "default": true,
119
- "description": "Adds a switch for the lamp's daylight tracking, which adjusts colour temperature to the time of day. It reports the true state, following the button on the lamp base and the MyDyson app, and setting a colour temperature by hand ends the tracking as the lamp itself decides."
122
+ "description": "Adds a switch for the lamp's daylight tracking, which adjusts colour temperature to the time of day. It reports the true state, following the button on the lamp base and the MyDyson app. Setting brightness or colour temperature by hand ends the tracking; that is the lamp's own rule."
120
123
  }
121
124
  }
122
125
  }
@@ -168,10 +171,11 @@
168
171
  "lights[].serial",
169
172
  "lights[].latitude",
170
173
  "lights[].longitude",
174
+ "lights[].customDay",
171
175
  "lights[].dayStart",
172
176
  "lights[].dayEnd",
173
- "lights[].yearOfBirth",
174
177
  "lights[].ageAdjust",
178
+ "lights[].yearOfBirth",
175
179
  "lights[].daylightSwitch",
176
180
  "lights[].autoBrightnessSwitch",
177
181
  "lights[].movementSwitch",
package/dist/accessory.js CHANGED
@@ -52,9 +52,9 @@ export class MorphAccessory {
52
52
  location: config.latitude !== undefined && config.longitude !== undefined
53
53
  ? { latitude: config.latitude, longitude: config.longitude }
54
54
  : undefined,
55
- // Both or neither again, and validation has already refused half a day,
56
- // so one of them being a time means the other is too.
57
- day: config.dayStart !== undefined && config.dayEnd !== undefined
55
+ // Only behind the switch, and validation has already refused half a day
56
+ // or an unreadable one while it is on.
57
+ day: config.customDay === true && config.dayStart !== undefined && config.dayEnd !== undefined
58
58
  ? { start: parseTimeOfDay(config.dayStart), end: parseTimeOfDay(config.dayEnd) }
59
59
  : undefined,
60
60
  // The switch only means anything next to a year, so the pair travels
@@ -65,6 +65,12 @@ export class MorphAccessory {
65
65
  : { yearOfBirth: config.yearOfBirth, enabled: config.ageAdjust !== false },
66
66
  log: platform.log,
67
67
  });
68
+ // Before 1.7.0 the times alone were enough, so a config from then carries
69
+ // them without the switch and would otherwise stop applying them in silence.
70
+ if (config.customDay !== true && (config.dayStart !== undefined || config.dayEnd !== undefined)) {
71
+ platform.log.info(`${config.name} has dayStart/dayEnd set but "Use this day" off, so they are ignored and the lamp ` +
72
+ 'keeps its own day. Turn it on to apply them.');
73
+ }
68
74
  this.describe(accessories.light, config.serial);
69
75
  if (accessories.switches) {
70
76
  // A serial of its own, so the two are not both claiming to be the same
@@ -1 +1 @@
1
- {"version":3,"file":"accessory.js","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIpG;;;;;GAKG;AACH,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAUlF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAc;IASN;IAEA;IAVF,SAAS,CAAU;IAC5B,QAAQ,CAAW;IACnB,cAAc,CAAW;IACzB,QAAQ,CAAW;IACV,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,IAAI,CAAiB;IAEtC,YACmB,QAAuB,EACxC,WAA6B,EACZ,MAA2B;QAF3B,aAAQ,GAAR,QAAQ,CAAe;QAEvB,WAAM,GAAN,MAAM,CAAqB;QAE5C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;YAChC,sEAAsE;YACtE,wCAAwC;YACxC,QAAQ,EACN,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;gBAC7D,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;gBAC5D,CAAC,CAAC,SAAS;YACf,wEAAwE;YACxE,sDAAsD;YACtD,GAAG,EACD,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC1D,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAE,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE;gBAClF,CAAC,CAAC,SAAS;YACf,qEAAqE;YACrE,yEAAyE;YACzE,6CAA6C;YAC7C,SAAS,EACP,MAAM,CAAC,WAAW,KAAK,SAAS;gBAC9B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE;YAC9E,GAAG,EAAE,QAAQ,CAAC,GAAG;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,uEAAuE;YACvE,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;QACnE,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,uEAAuE;QACvE,WAAW;QACX,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,IAAI,mCAAmC,CAAC,CAAC;QAC3G,CAAC;QAED,gEAAgE;QAChE,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC;YACf,CAAC;YACD,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,MAAM,CAAC;QACV,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CACpB,QAAQ,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,IAAI;gBACnE,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,6BAA6B,CACzE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS;YACZ,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClH,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;aACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;aACrD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC;aAC5C,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;aAC7D,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC;QAElG,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC;YACnD,wDAAwD;YACxD,EAAE;YACF,0EAA0E;YAC1E,wEAAwE;YACxE,2EAA2E;YAC3E,wEAAwE;YACxE,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,yCAAyC;aACxC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;aACvD,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;aACtF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;aACxE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/H,4EAA4E;QAC5E,wCAAwC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,2EAA2E;YAC3E,wCAAwC;YACxC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,SAA4B;QAC9C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,0EAA0E;YAC1E,2EAA2E;YAC3E,4DAA4D;YAC5D,wEAAwE;YACxE,8DAA8D;YAC9D,IAAI,CAAC,QAAQ;gBACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;oBACpD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;iBACV,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC5D,qEAAqE;gBACrE,sEAAsE;gBACtE,oDAAoD;iBACnD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc;gBACjB,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;oBAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAC7D,IAAI,CAAC,cAAc;iBAChB,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;iBACjE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,oEAAoE;YACpE,gDAAgD;YAChD,IAAI,CAAC,QAAQ;gBACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;oBACpD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;iBACV,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;iBAC3D,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,0EAA0E;YAC1E,0EAA0E;YAC1E,oEAAoE;YACpE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAa,EAAE,CAAC;gBACtD,qEAAqE;gBACrE,yDAAyD;gBACzD,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,MAAM,OAAO,GACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;oBAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrC,OAAO;qBACJ,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;qBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;qBAClB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,kCAAkC,CAAC,CAAC;YACnH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACK,OAAO,CAAC,OAAgB;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,sEAAsE;IAC9D,QAAQ,CAAC,SAA4B,EAAE,MAAc;QAC3D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1D,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;aACvG,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC;aACvD,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,kBAAkB,CAAC;aAC3D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,IAAI,CAAC,SAA4B,EAAE,OAAgB,EAAE,KAAa;QACxE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,KAAK,EAAE,CAA2B,CAAC;QACtF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QAErC,8DAA8D;QAC9D,yEAAyE;QACzE,yEAAyE;QACzE,6EAA6E;QAC7E,wEAAwE;QACxE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;QAE/E,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEtD,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,4EAA4E;QAC5E,iDAAiD;QACjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9E,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAiB,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAChE,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,qDAAqD;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;OAOG;IACK,IAAI,CAAI,IAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAE7C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,0DAA0D;IAClD,eAAe;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,kCAAkC,CAAC,CAAC;QAC/E,KAAK,MAAM,cAAc,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7G,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,KAA0B;QAC9D,IAAI,CAAC;YACH,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAE7C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"accessory.js","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIpG;;;;;GAKG;AACH,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAUlF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAc;IASN;IAEA;IAVF,SAAS,CAAU;IAC5B,QAAQ,CAAW;IACnB,cAAc,CAAW;IACzB,QAAQ,CAAW;IACV,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,IAAI,CAAiB;IAEtC,YACmB,QAAuB,EACxC,WAA6B,EACZ,MAA2B;QAF3B,aAAQ,GAAR,QAAQ,CAAe;QAEvB,WAAM,GAAN,MAAM,CAAqB;QAE5C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;YAChC,sEAAsE;YACtE,wCAAwC;YACxC,QAAQ,EACN,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;gBAC7D,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;gBAC5D,CAAC,CAAC,SAAS;YACf,wEAAwE;YACxE,uCAAuC;YACvC,GAAG,EACD,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBACvF,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAE,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE;gBAClF,CAAC,CAAC,SAAS;YACf,qEAAqE;YACrE,yEAAyE;YACzE,6CAA6C;YAC7C,SAAS,EACP,MAAM,CAAC,WAAW,KAAK,SAAS;gBAC9B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE;YAC9E,GAAG,EAAE,QAAQ,CAAC,GAAG;SAClB,CAAC,CAAC;QAEH,0EAA0E;QAC1E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YAChG,QAAQ,CAAC,GAAG,CAAC,IAAI,CACf,GAAG,MAAM,CAAC,IAAI,oFAAoF;gBAChG,8CAA8C,CACjD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,uEAAuE;YACvE,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;QACnE,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,uEAAuE;QACvE,WAAW;QACX,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,IAAI,mCAAmC,CAAC,CAAC;QAC3G,CAAC;QAED,gEAAgE;QAChE,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC;YACf,CAAC;YACD,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,MAAM,CAAC;QACV,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CACpB,QAAQ,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,IAAI;gBACnE,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,6BAA6B,CACzE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS;YACZ,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClH,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;aACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;aACrD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC;aAC5C,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;aAC7D,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC;QAElG,IAAI,CAAC,SAAS;aACX,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC;YACnD,wDAAwD;YACxD,EAAE;YACF,0EAA0E;YAC1E,wEAAwE;YACxE,2EAA2E;YAC3E,wEAAwE;YACxE,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,yCAAyC;aACxC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;aACvD,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;aACtF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;aACxE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/H,4EAA4E;QAC5E,wCAAwC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,2EAA2E;YAC3E,wCAAwC;YACxC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,SAA4B;QAC9C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,0EAA0E;YAC1E,2EAA2E;YAC3E,4DAA4D;YAC5D,wEAAwE;YACxE,8DAA8D;YAC9D,IAAI,CAAC,QAAQ;gBACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;oBACpD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;iBACV,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC5D,qEAAqE;gBACrE,sEAAsE;gBACtE,oDAAoD;iBACnD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc;gBACjB,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;oBAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAC7D,IAAI,CAAC,cAAc;iBAChB,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;iBACjE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,oEAAoE;YACpE,gDAAgD;YAChD,IAAI,CAAC,QAAQ;gBACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;oBACpD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;iBACV,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;iBAC3D,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,0EAA0E;YAC1E,0EAA0E;YAC1E,oEAAoE;YACpE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAa,EAAE,CAAC;gBACtD,qEAAqE;gBACrE,yDAAyD;gBACzD,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,MAAM,OAAO,GACX,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;oBAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrC,OAAO;qBACJ,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;qBACpC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;qBAClB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,kCAAkC,CAAC,CAAC;YACnH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACK,OAAO,CAAC,OAAgB;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,sEAAsE;IAC9D,QAAQ,CAAC,SAA4B,EAAE,MAAc;QAC3D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1D,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;aACvG,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC;aACvD,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,kBAAkB,CAAC;aAC3D,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,IAAI,CAAC,SAA4B,EAAE,OAAgB,EAAE,KAAa;QACxE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,KAAK,EAAE,CAA2B,CAAC;QACtF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QAErC,8DAA8D;QAC9D,yEAAyE;QACzE,yEAAyE;QACzE,6EAA6E;QAC7E,wEAAwE;QACxE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;QAE/E,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEtD,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,4EAA4E;QAC5E,iDAAiD;QACjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9E,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAiB,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAChE,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,qDAAqD;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;OAOG;IACK,IAAI,CAAI,IAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAE7C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,0DAA0D;IAClD,eAAe;QACrB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,kCAAkC,CAAC,CAAC;QAC/E,KAAK,MAAM,cAAc,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7G,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,KAA0B;QAC9D,IAAI,CAAC;YACH,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAE7C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
package/dist/config.d.ts CHANGED
@@ -48,11 +48,17 @@ export interface LightConfig {
48
48
  * Daylight tracking normally follows the real sunrise and sunset for the
49
49
  * lamp's location. These override that with a day of your own choosing — the
50
50
  * lamp holds them as minutes past midnight and falls back to its baseline
51
- * settings once the day is over, natural or custom. Left out, whatever the
52
- * lamp already holds is untouched.
51
+ * settings once the day is over, natural or custom. Only used while
52
+ * {@link customDay} is on; otherwise the lamp's day is untouched.
53
53
  */
54
54
  dayStart?: string;
55
55
  dayEnd?: string;
56
+ /**
57
+ * Whether {@link dayStart} and {@link dayEnd} are put in the lamp. Off by
58
+ * default, so the times can stay filled in without being applied, and
59
+ * turning it off does not mean emptying them.
60
+ */
61
+ customDay?: boolean;
56
62
  /**
57
63
  * Birth year of the main intended user, for the lamp's age adjustment.
58
64
  *
@@ -64,8 +70,8 @@ export interface LightConfig {
64
70
  yearOfBirth?: number;
65
71
  /**
66
72
  * Whether the lamp applies the age adjustment. Only consulted when
67
- * {@link yearOfBirth} is set, and on by default when it is: a year with the
68
- * adjustment off does nothing at all.
73
+ * {@link yearOfBirth} is set, and ignored otherwise; on by default, since a
74
+ * year with the adjustment off does nothing at all.
69
75
  */
70
76
  ageAdjust?: boolean;
71
77
  }
package/dist/config.js CHANGED
@@ -65,10 +65,41 @@ export function validateLightConfig(light, index) {
65
65
  if ((light.latitude === undefined) !== (light.longitude === undefined)) {
66
66
  problems.push(`${where} sets only one of latitude/longitude — supply both, or neither`);
67
67
  }
68
- // The lamp holds a start and an end, and a day with only one of them stated
69
- // is not a day. Rejected rather than half-applied, as with the location.
70
- if ((light.dayStart === undefined) !== (light.dayEnd === undefined)) {
71
- problems.push(`${where} sets only one of dayStart/dayEnd — supply both, or neither`);
68
+ // Times that are not in use are not checked either: they are ignored, and a
69
+ // half-typed day left behind the switch must not stop the plugin starting.
70
+ if (light.customDay === true) {
71
+ problems.push(...validateDay(light, where));
72
+ }
73
+ if (light.yearOfBirth !== undefined) {
74
+ const thisYear = new Date().getFullYear();
75
+ const year = light.yearOfBirth;
76
+ if (!Number.isInteger(year) || year < EARLIEST_YEAR_OF_BIRTH || year > thisYear) {
77
+ problems.push(`${where}.yearOfBirth must be a whole year between ${EARLIEST_YEAR_OF_BIRTH} and ${thisYear} ` +
78
+ `(got ${JSON.stringify(light.yearOfBirth)})`);
79
+ }
80
+ }
81
+ // ageAdjust without a year is not refused: the settings page shows the switch
82
+ // on every light and fills in its default, so it is there whether or not
83
+ // anyone meant it, and with no year it is simply not used.
84
+ for (const [field, limit] of [['latitude', 90], ['longitude', 180]]) {
85
+ const value = light[field];
86
+ if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || Math.abs(value) > limit)) {
87
+ problems.push(`${where}.${field} must be a number between -${limit} and ${limit} (got ${JSON.stringify(value)})`);
88
+ }
89
+ }
90
+ return problems;
91
+ }
92
+ /**
93
+ * Check a day that is switched on.
94
+ *
95
+ * The lamp holds a start and an end, and a day with only one of them stated is
96
+ * not a day. Rejected rather than half-applied, as with the location — and
97
+ * with the switch on, a missing time is a mistake rather than a choice.
98
+ */
99
+ function validateDay(light, where) {
100
+ const problems = [];
101
+ if (light.dayStart === undefined || light.dayEnd === undefined) {
102
+ problems.push(`${where} turns customDay on without both dayStart and dayEnd — supply both, or turn it off`);
72
103
  }
73
104
  const day = {};
74
105
  for (const field of ['dayStart', 'dayEnd']) {
@@ -87,23 +118,6 @@ export function validateLightConfig(light, index) {
87
118
  problems.push(`${where}.dayEnd must come after dayStart, and the lamp has no way to state a day that runs past midnight ` +
88
119
  `(got ${JSON.stringify(light.dayStart)} to ${JSON.stringify(light.dayEnd)})`);
89
120
  }
90
- if (light.yearOfBirth !== undefined) {
91
- const thisYear = new Date().getFullYear();
92
- const year = light.yearOfBirth;
93
- if (!Number.isInteger(year) || year < EARLIEST_YEAR_OF_BIRTH || year > thisYear) {
94
- problems.push(`${where}.yearOfBirth must be a whole year between ${EARLIEST_YEAR_OF_BIRTH} and ${thisYear} ` +
95
- `(got ${JSON.stringify(light.yearOfBirth)})`);
96
- }
97
- }
98
- else if (light.ageAdjust !== undefined) {
99
- problems.push(`${where} sets ageAdjust with no yearOfBirth — there is nothing to adjust for`);
100
- }
101
- for (const [field, limit] of [['latitude', 90], ['longitude', 180]]) {
102
- const value = light[field];
103
- if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || Math.abs(value) > limit)) {
104
- problems.push(`${where}.${field} must be a number between -${limit} and ${limit} (got ${JSON.stringify(value)})`);
105
- }
106
- }
107
121
  return problems;
108
122
  }
109
123
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}