@oxyhq/bloom 1.1.0 → 1.2.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.
Files changed (150) hide show
  1. package/docs/media-flight.mdx +282 -0
  2. package/docs/migrating-the-media-gallery.mdx +103 -0
  3. package/docs/migrating-to-1.0.mdx +1 -1
  4. package/docs/zoomable-media-gallery.mdx +116 -0
  5. package/lib/commonjs/image-aspect-ratio-cache/aspect-ratio-cache.js +1 -1
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/index.web.js.map +1 -1
  8. package/lib/commonjs/media-flight/MediaFlightLayer.js +151 -0
  9. package/lib/commonjs/media-flight/MediaFlightLayer.js.map +1 -0
  10. package/lib/commonjs/media-flight/MediaSurface.js +207 -0
  11. package/lib/commonjs/media-flight/MediaSurface.js.map +1 -0
  12. package/lib/commonjs/media-flight/constants.js +39 -0
  13. package/lib/commonjs/media-flight/constants.js.map +1 -0
  14. package/lib/commonjs/media-flight/expo-video-module.js +180 -0
  15. package/lib/commonjs/media-flight/expo-video-module.js.map +1 -0
  16. package/lib/commonjs/media-flight/index.js +108 -0
  17. package/lib/commonjs/media-flight/index.js.map +1 -0
  18. package/lib/commonjs/media-flight/store.js +457 -0
  19. package/lib/commonjs/media-flight/store.js.map +1 -0
  20. package/lib/commonjs/media-flight/types.js +6 -0
  21. package/lib/commonjs/media-flight/types.js.map +1 -0
  22. package/lib/commonjs/media-flight/use-media-flight.js +41 -0
  23. package/lib/commonjs/media-flight/use-media-flight.js.map +1 -0
  24. package/lib/commonjs/tab-bar/TabBarBase.js +1 -1
  25. package/lib/commonjs/{zoomable-image-gallery/ZoomableImageGallery.js → zoomable-media-gallery/ZoomableMediaGallery.js} +185 -131
  26. package/lib/commonjs/zoomable-media-gallery/ZoomableMediaGallery.js.map +1 -0
  27. package/lib/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/constants.js.map +1 -1
  28. package/lib/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/index.js +5 -5
  29. package/lib/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/index.js.map +1 -1
  30. package/lib/commonjs/zoomable-media-gallery/types.js +6 -0
  31. package/lib/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/types.js.map +1 -1
  32. package/lib/module/image-aspect-ratio-cache/aspect-ratio-cache.js +1 -1
  33. package/lib/module/index.js +2 -1
  34. package/lib/module/index.js.map +1 -1
  35. package/lib/module/index.web.js +2 -1
  36. package/lib/module/index.web.js.map +1 -1
  37. package/lib/module/media-flight/MediaFlightLayer.js +146 -0
  38. package/lib/module/media-flight/MediaFlightLayer.js.map +1 -0
  39. package/lib/module/media-flight/MediaSurface.js +199 -0
  40. package/lib/module/media-flight/MediaSurface.js.map +1 -0
  41. package/lib/module/media-flight/constants.js +35 -0
  42. package/lib/module/media-flight/constants.js.map +1 -0
  43. package/lib/module/media-flight/expo-video-module.js +173 -0
  44. package/lib/module/media-flight/expo-video-module.js.map +1 -0
  45. package/lib/module/media-flight/index.js +9 -0
  46. package/lib/module/media-flight/index.js.map +1 -0
  47. package/lib/module/media-flight/store.js +439 -0
  48. package/lib/module/media-flight/store.js.map +1 -0
  49. package/lib/module/media-flight/types.js +4 -0
  50. package/lib/module/media-flight/types.js.map +1 -0
  51. package/lib/module/media-flight/use-media-flight.js +36 -0
  52. package/lib/module/media-flight/use-media-flight.js.map +1 -0
  53. package/lib/module/tab-bar/TabBarBase.js +1 -1
  54. package/lib/module/{zoomable-image-gallery/ZoomableImageGallery.js → zoomable-media-gallery/ZoomableMediaGallery.js} +184 -130
  55. package/lib/module/zoomable-media-gallery/ZoomableMediaGallery.js.map +1 -0
  56. package/lib/module/{zoomable-image-gallery → zoomable-media-gallery}/constants.js.map +1 -1
  57. package/lib/module/zoomable-media-gallery/index.js +5 -0
  58. package/lib/module/zoomable-media-gallery/index.js.map +1 -0
  59. package/lib/module/zoomable-media-gallery/types.js +4 -0
  60. package/lib/module/{zoomable-image-gallery → zoomable-media-gallery}/types.js.map +1 -1
  61. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/media-flight/MediaFlightLayer.d.ts +11 -0
  64. package/lib/typescript/commonjs/media-flight/MediaFlightLayer.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/media-flight/MediaSurface.d.ts +106 -0
  66. package/lib/typescript/commonjs/media-flight/MediaSurface.d.ts.map +1 -0
  67. package/lib/typescript/commonjs/media-flight/constants.d.ts +18 -0
  68. package/lib/typescript/commonjs/media-flight/constants.d.ts.map +1 -0
  69. package/lib/typescript/commonjs/media-flight/expo-video-module.d.ts +125 -0
  70. package/lib/typescript/commonjs/media-flight/expo-video-module.d.ts.map +1 -0
  71. package/lib/typescript/commonjs/media-flight/index.d.ts +9 -0
  72. package/lib/typescript/commonjs/media-flight/index.d.ts.map +1 -0
  73. package/lib/typescript/commonjs/media-flight/store.d.ts +132 -0
  74. package/lib/typescript/commonjs/media-flight/store.d.ts.map +1 -0
  75. package/lib/typescript/commonjs/media-flight/types.d.ts +195 -0
  76. package/lib/typescript/commonjs/media-flight/types.d.ts.map +1 -0
  77. package/lib/typescript/commonjs/media-flight/use-media-flight.d.ts +4 -0
  78. package/lib/typescript/commonjs/media-flight/use-media-flight.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/zoomable-media-gallery/ZoomableMediaGallery.d.ts +5 -0
  80. package/lib/typescript/commonjs/zoomable-media-gallery/ZoomableMediaGallery.d.ts.map +1 -0
  81. package/lib/typescript/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/constants.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/zoomable-media-gallery/index.d.ts +4 -0
  83. package/lib/typescript/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/index.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/zoomable-media-gallery/types.d.ts +90 -0
  85. package/lib/typescript/commonjs/zoomable-media-gallery/types.d.ts.map +1 -0
  86. package/lib/typescript/module/index.d.ts.map +1 -1
  87. package/lib/typescript/module/index.web.d.ts.map +1 -1
  88. package/lib/typescript/module/media-flight/MediaFlightLayer.d.ts +11 -0
  89. package/lib/typescript/module/media-flight/MediaFlightLayer.d.ts.map +1 -0
  90. package/lib/typescript/module/media-flight/MediaSurface.d.ts +106 -0
  91. package/lib/typescript/module/media-flight/MediaSurface.d.ts.map +1 -0
  92. package/lib/typescript/module/media-flight/constants.d.ts +18 -0
  93. package/lib/typescript/module/media-flight/constants.d.ts.map +1 -0
  94. package/lib/typescript/module/media-flight/expo-video-module.d.ts +125 -0
  95. package/lib/typescript/module/media-flight/expo-video-module.d.ts.map +1 -0
  96. package/lib/typescript/module/media-flight/index.d.ts +9 -0
  97. package/lib/typescript/module/media-flight/index.d.ts.map +1 -0
  98. package/lib/typescript/module/media-flight/store.d.ts +132 -0
  99. package/lib/typescript/module/media-flight/store.d.ts.map +1 -0
  100. package/lib/typescript/module/media-flight/types.d.ts +195 -0
  101. package/lib/typescript/module/media-flight/types.d.ts.map +1 -0
  102. package/lib/typescript/module/media-flight/use-media-flight.d.ts +4 -0
  103. package/lib/typescript/module/media-flight/use-media-flight.d.ts.map +1 -0
  104. package/lib/typescript/module/zoomable-media-gallery/ZoomableMediaGallery.d.ts +5 -0
  105. package/lib/typescript/module/zoomable-media-gallery/ZoomableMediaGallery.d.ts.map +1 -0
  106. package/lib/typescript/module/{zoomable-image-gallery → zoomable-media-gallery}/constants.d.ts.map +1 -1
  107. package/lib/typescript/module/zoomable-media-gallery/index.d.ts +4 -0
  108. package/lib/typescript/module/{zoomable-image-gallery → zoomable-media-gallery}/index.d.ts.map +1 -1
  109. package/lib/typescript/module/zoomable-media-gallery/types.d.ts +90 -0
  110. package/lib/typescript/module/zoomable-media-gallery/types.d.ts.map +1 -0
  111. package/package.json +42 -8
  112. package/src/image-aspect-ratio-cache/aspect-ratio-cache.ts +1 -1
  113. package/src/index.ts +2 -1
  114. package/src/index.web.ts +2 -1
  115. package/src/media-flight/MediaFlightLayer.tsx +144 -0
  116. package/src/media-flight/MediaSurface.tsx +251 -0
  117. package/src/media-flight/constants.ts +32 -0
  118. package/src/media-flight/expo-video-module.ts +212 -0
  119. package/src/media-flight/index.ts +34 -0
  120. package/src/media-flight/store.ts +497 -0
  121. package/src/media-flight/types.ts +210 -0
  122. package/src/media-flight/use-media-flight.ts +42 -0
  123. package/src/tab-bar/TabBarBase.tsx +1 -1
  124. package/src/{zoomable-image-gallery/ZoomableImageGallery.tsx → zoomable-media-gallery/ZoomableMediaGallery.tsx} +192 -117
  125. package/src/zoomable-media-gallery/index.ts +11 -0
  126. package/src/zoomable-media-gallery/types.ts +100 -0
  127. package/docs/zoomable-image-gallery.mdx +0 -66
  128. package/lib/commonjs/zoomable-image-gallery/ZoomableImageGallery.js.map +0 -1
  129. package/lib/commonjs/zoomable-image-gallery/types.js +0 -2
  130. package/lib/module/zoomable-image-gallery/ZoomableImageGallery.js.map +0 -1
  131. package/lib/module/zoomable-image-gallery/index.js +0 -5
  132. package/lib/module/zoomable-image-gallery/index.js.map +0 -1
  133. package/lib/module/zoomable-image-gallery/types.js +0 -2
  134. package/lib/typescript/commonjs/zoomable-image-gallery/ZoomableImageGallery.d.ts +0 -5
  135. package/lib/typescript/commonjs/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +0 -1
  136. package/lib/typescript/commonjs/zoomable-image-gallery/index.d.ts +0 -4
  137. package/lib/typescript/commonjs/zoomable-image-gallery/types.d.ts +0 -56
  138. package/lib/typescript/commonjs/zoomable-image-gallery/types.d.ts.map +0 -1
  139. package/lib/typescript/module/zoomable-image-gallery/ZoomableImageGallery.d.ts +0 -5
  140. package/lib/typescript/module/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +0 -1
  141. package/lib/typescript/module/zoomable-image-gallery/index.d.ts +0 -4
  142. package/lib/typescript/module/zoomable-image-gallery/types.d.ts +0 -56
  143. package/lib/typescript/module/zoomable-image-gallery/types.d.ts.map +0 -1
  144. package/src/zoomable-image-gallery/index.ts +0 -9
  145. package/src/zoomable-image-gallery/types.ts +0 -59
  146. /package/lib/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/constants.js +0 -0
  147. /package/lib/module/{zoomable-image-gallery → zoomable-media-gallery}/constants.js +0 -0
  148. /package/lib/typescript/commonjs/{zoomable-image-gallery → zoomable-media-gallery}/constants.d.ts +0 -0
  149. /package/lib/typescript/module/{zoomable-image-gallery → zoomable-media-gallery}/constants.d.ts +0 -0
  150. /package/src/{zoomable-image-gallery → zoomable-media-gallery}/constants.ts +0 -0
@@ -0,0 +1,282 @@
1
+ ---
2
+ title: MediaFlight
3
+ description: A shared-element media transition that survives the route change — on web and on native.
4
+ order: 75
5
+ ---
6
+
7
+ # MediaFlight
8
+
9
+ A picture — or a **playing video** — moves from where it is to where it is
10
+ going, across a navigation, without restarting and without being re-downloaded.
11
+
12
+ ```tsx
13
+ // app/_layout.tsx — mounted ONCE, at the root, above the router.
14
+ import { MediaFlightLayer } from '@oxyhq/bloom/media-flight';
15
+
16
+ <MediaFlightLayer />
17
+ ```
18
+
19
+ ```tsx
20
+ // the origin: a feed thumbnail
21
+ import { useMediaFlight } from '@oxyhq/bloom/media-flight';
22
+
23
+ const flight = useMediaFlight();
24
+
25
+ <Pressable
26
+ ref={(node) => flight.registerAnchor(mediaId, node)}
27
+ onPress={async () => {
28
+ const from = await flight.measureAnchor(mediaId);
29
+ // AWAIT, then navigate. Never the other way round — see below.
30
+ await flight.flyTo(mediaId, targetRect, { kind: 'video', player, poster }, { from: from ?? undefined });
31
+ router.push(`/videos?id=${mediaId}`);
32
+ }}
33
+ >
34
+ {/* while it is in flight, render a HOLE here — never a second copy */}
35
+ </Pressable>
36
+ ```
37
+
38
+ ```tsx
39
+ // the destination: it says where it wants the surface, and takes it over by
40
+ // reporting its own first frame. `flightId` is the entire wiring.
41
+ <MediaSurface content={{ kind: 'video', player, poster }} flightId={mediaId} />
42
+ ```
43
+
44
+ ## The one rule: await `flyTo` before tearing the origin down
45
+
46
+ expo-video's **web** player keeps a `Set` of mounted `<video>` elements and, on
47
+ each new mount, copies `currentTime`, play state, volume, muted and rate from
48
+ `[...set][0]`. If that set is EMPTY when the new element mounts it returns early
49
+ and the element starts **at zero**.
50
+
51
+ So the layer's surface has to enter the set while the origin's is still in it.
52
+ On web, navigating unmounts the origin route — so navigating before the layer
53
+ has committed is exactly the restart, and it is intermittent, because whether
54
+ you win the race depends on a commit you do not control.
55
+
56
+ `flyTo` returns a promise that resolves on that commit. Awaiting it is the whole
57
+ contract, and it is the only ordering fact a consumer has to know — everything
58
+ else is the layer's problem. It resolves on a short timeout when no
59
+ `<MediaFlightLayer>` is mounted, so a missing root component degrades to "no
60
+ transition" and warns once in dev, rather than leaving a feed whose videos
61
+ cannot be opened.
62
+
63
+ It does **not** wait for a decode. `MediaSurface` renders the poster BEHIND the
64
+ video on both platforms, and neither an unpainted `<video>` (expo-video sets no
65
+ `poster` attribute) nor an Android `TextureView` with the ExoPlayer shutter off
66
+ draws anything opaque — so the still shows through until the first frame lands.
67
+ Waiting for paint would trade an invisible problem for a laggy tap.
68
+
69
+ ## The poster must already be in the image cache
70
+
71
+ `flyTo` resolves on the layer's COMMIT, not on its first painted pixel. That
72
+ trade is only sound if committing is *effectively* painting — and whether it is
73
+ depends entirely on one thing. Measured in Chrome, milliseconds from `flyTo`
74
+ resolving to the flying surface having visible pixels:
75
+
76
+ | the poster URI | ms |
77
+ | --- | --- |
78
+ | already rendered by the page (in the image cache) | **1–5** |
79
+ | never requested before (same file, cache-busted) | **510–900** |
80
+
81
+ So a **warm** poster makes the commit a frame, and a **cold** one would open a
82
+ half-second hole exactly where the origin has just disappeared.
83
+
84
+ **The remedy is not to make `flyTo` wait.** Waiting would move that half second
85
+ in front of the user's tap, which is worse in the place people actually feel it.
86
+ The remedy is to make sure the origin has already painted the exact URI the
87
+ flight will carry.
88
+
89
+ <Callout variant="warning" title="expo-video will not fetch your poster for you">
90
+ On web, expo-video's `VideoView` renders `<video src=…>` with **no `poster`
91
+ attribute**, so passing a poster to the video view does not cause that URL to be
92
+ requested. Something else has to paint it — render the still yourself under the
93
+ video (`MediaPoster` is exported for exactly this, and Mention does it with
94
+ `expo-image` at `cachePolicy="memory-disk"`), or prefetch it. Do that and it is
95
+ warm by the time anything flies.
96
+ </Callout>
97
+
98
+ One-minute check: in the Network panel, does the poster request appear **when
99
+ you tap**, or was it already there?
100
+
101
+ <Callout variant="info" title="A poster is invisible to `requestVideoFrameCallback`">
102
+ If you measure continuity by counting decoded video frames, **a flight covered
103
+ by its poster reads as a gap** — `requestVideoFrameCallback` fires only for
104
+ decoded VIDEO, and a poster is an `<img>` that never triggers it. A ~350 ms
105
+ "hole" measured that way in a consuming app turned out to be exactly this: a CDP
106
+ screencast over the same transition showed 25 frames in 844 ms, luminance gliding
107
+ 218 → 99, **zero black frames**, with the frame at t=360 ms — inside the supposed
108
+ hole — showing video filling the viewport. Measure what the screen shows, not
109
+ what one API reports.
110
+ </Callout>
111
+
112
+ `scripts/verify-media-flight.mjs` gates Bloom's half — that a warm surface
113
+ presents within a frame or two, with no re-fetch and no fade. Its control flies
114
+ a cold poster over a latency-throttled link, so "warm is fast" cannot be
115
+ reported by a harness that always says zero.
116
+
117
+ ## The layer leaves when the DESTINATION is live, not when the animation ends
118
+
119
+ Measured against production: opening a full-screen video route takes **~996 ms**
120
+ (median, n=10) from tap to first presented frame — ~545 ms to mount the route,
121
+ ~380 ms to `loadedmetadata`, ~40 ms to the frame. A flight animation lasts about
122
+ 300 ms. Releasing the surface when the animation ends would therefore uncover a
123
+ ~700 ms hole *exactly* where the transition was supposed to hide one.
124
+
125
+ So the release condition is an observable fact, not a clock: the destination's
126
+ own first frame. Give the destination's `<MediaSurface>` a `flightId` and it
127
+ reports that itself (expo-video's `onFirstFrameRender`, expo-image's `onLoad`).
128
+ `flight.handOff(id)` is there for a destination that renders something else.
129
+
130
+ Called mid-flight, a hand-off is remembered rather than obeyed — the surface
131
+ finishes travelling first, or it would vanish between the two rects.
132
+
133
+ **The success criterion is continuity, not speed.** With a shared player the
134
+ frame is already on screen before the tap; the flight does not make the video
135
+ appear sooner, it makes it never disappear. Measure "was there ever no frame?"
136
+ and "did `currentTime` advance monotonically?", not time-to-first-frame.
137
+
138
+ ## Why this exists rather than `react-native-teleport`
139
+
140
+ A shared-element transition normally assumes the origin screen is still mounted
141
+ while the element travels. That is why `react-native-teleport` requires
142
+ `presentation: 'transparentModal'`, and why it has no web story at all.
143
+
144
+ Under expo-router on web the origin route is **unmounted** the moment the URL
145
+ changes. Anything the origin was rendering — a `VideoView`, a decoded image —
146
+ is gone before the first frame of the transition.
147
+
148
+ So the surface is moved OUT of both screens for the duration of the flight.
149
+ `MediaFlightLayer` is mounted once at the app root and renders through Bloom's
150
+ `Portal`, whose outlet lives above the router on both platforms. The surface it
151
+ paints belongs to neither route, so neither route can take it down. Origin and
152
+ destination only **declare** where they want it; the layer is what paints it.
153
+
154
+ ## Why the layer does not own the surface at rest
155
+
156
+ A tempting design is for the feed cell to render only an anchor and let the
157
+ layer paint every video, so there is never a swap at all. It does not work, and
158
+ the reason is not performance.
159
+
160
+ The layer paints through the `Portal`, which is outside every `overflow: hidden`
161
+ and every z-index in the app. A feed video painted there would render **over** a
162
+ sticky header, over a sidebar, over any open sheet, and it would not be clipped
163
+ by the feed column's own rounded corners. That is not a risk to be measured away
164
+ — the layer would have to know the app's clip regions, which is exactly what it
165
+ cannot know. It holds on web and on native alike.
166
+
167
+ Covering the whole screen is correct for the ~300 ms of a transition and wrong
168
+ for the rest of the time. So: the cell owns its surface at rest, the layer owns
169
+ it during the flight, and the handshake above is what makes the two swaps
170
+ invisible.
171
+
172
+ ## One live surface per id
173
+
174
+ That is the contract, and for video it is the whole feature. expo-video keeps
175
+ the `VideoPlayer` **object** separate from the `VideoView` that shows it, and
176
+ one player may feed several views — so moving a video is a matter of mounting
177
+ ONE view in the right place, never of creating a second player.
178
+
179
+ Concretely:
180
+
181
+ - `flyTo` on an id that is already flying **retargets** the same surface. It
182
+ never adds a second one, and the surface resumes from where it currently is
183
+ rather than snapping back to the original origin.
184
+ - The origin and the destination must render a **hole** (or the poster still —
185
+ `MediaPoster` is exported for exactly that) while the surface is in the layer.
186
+ Two copies is what this exists to prevent.
187
+ - `flyBack` measures the current anchor, lands there, and releases. With no
188
+ measurable anchor it releases immediately, because a flying copy held over a
189
+ destination that has already drawn its own media is the duplicate again.
190
+
191
+ ## The API
192
+
193
+ | member | does |
194
+ | ------------------------------- | ------------------------------------------------------------- |
195
+ | `registerAnchor(id, node)` | declares the host view that anchors `id`; `null` clears it |
196
+ | `measureAnchor(id)` | that node's window rect, or `null` when it has none |
197
+ | `flyTo(id, rect, content, opts)`| takes the surface live and moves it to `rect` |
198
+ | `flyBack(id)` | flies it to its anchor and releases it on landing |
199
+ | `progress` | `SharedValue<number>`, 0 → 1 for the most recent leg |
200
+
201
+ The most recently registered node for an id **is** the anchor, which is what
202
+ makes a destination mounting over an origin take over as the fly-back target
203
+ without either of them coordinating.
204
+
205
+ ## It never takes a click
206
+
207
+ Every node the layer renders is `pointerEvents="none"`, inside an `OverlayRoot`
208
+ that is `box-none`. A flying surface is a picture of something the app is
209
+ already showing; the controls underneath it stay the ones the user is pressing.
210
+
211
+ The layer also renders **nothing at all** while no flight is live — which is
212
+ what keeps it out of the overlay stack's live set, so the rank counter can
213
+ still reset (see `overlay/stack.ts`). It takes a rank only while it is
214
+ actually painting, and therefore stacks by open order like every other Bloom
215
+ surface.
216
+
217
+ ## Why the size is animated rather than scaled
218
+
219
+ `ZoomableMediaGallery` flies its media with a uniform `scale`, which is right
220
+ there: it opens from a thumbnail into a box of the same aspect ratio. A flight
221
+ does not have that luxury — it routinely goes from a cropped square tile to a
222
+ 16:9 player — and a uniform scale would leave the first frame the wrong height,
223
+ i.e. visibly not the thumbnail it is replacing. `width`/`height` are
224
+ interpolated instead; the position still rides a transform, so the only layout
225
+ work per frame is one absolutely-positioned node resizing.
226
+
227
+ ## Android: a flight crosses a surface-type boundary
228
+
229
+ expo-video renders Android video into a `SurfaceView` by default. A flight
230
+ cannot: a `SurfaceView` is composited by the system OUTSIDE the view hierarchy,
231
+ so it ignores its parent's clip, corner radius and transform — every property a
232
+ flying box depends on. The layer therefore flies as a `textureView`.
233
+
234
+ **So unless one side changes, the hand-off swaps surface types.** Whether that
235
+ is visible is a device question and nothing here answers it. Measured on a real
236
+ device it may not flicker at all, in which case the right action is none.
237
+
238
+ The knob exists so both arrangements can be measured:
239
+
240
+ ```tsx
241
+ // fly as a surfaceView, matching a destination that has not changed
242
+ flight.flyTo(id, rect, content, { surfaceType: 'surfaceView' });
243
+ ```
244
+
245
+ ```tsx
246
+ // …or leave the flight alone and give the DESTINATION a textureView
247
+ <MediaSurface content={content} flightId={id} surfaceType="textureView" />
248
+ ```
249
+
250
+ Flying as a `surfaceView` will not transform correctly on Android — that is the
251
+ trade the first option makes. `surfaceType` is captured on first render on both
252
+ sides (expo-video forbids changing it at runtime), so a retarget deliberately
253
+ does not accept a new one.
254
+
255
+ ## Peers
256
+
257
+ `expo-image` is required (hence the subpath — the family is deliberately not on
258
+ the root barrel, because Metro does not tree-shake). `expo-video` is
259
+ **optional**: an app that flies only images never installs it, and one that
260
+ flies video without it gets the poster plus a single dev warning naming the
261
+ package.
262
+
263
+ ## What a jest run can and cannot see
264
+
265
+ The registry: that a flight is created, that a second `flyTo` retargets rather
266
+ than duplicating, that `flyBack` releases, that the layer renders nothing while
267
+ idle and a surface when one is live, and that `flyTo` really waits for the
268
+ layer's commit.
269
+
270
+ What it can never see is the MOTION. Every reanimated animation resolves
271
+ synchronously under the test mock, so a mapper that runs once and freezes at the
272
+ opening frame — the documented web failure mode of this package — produces the
273
+ same tree as one that animates. Two browser gates cover it, both headful against
274
+ real Chrome:
275
+
276
+ - `node scripts/verify-media-flight.mjs` samples the flying surface's
277
+ `getBoundingClientRect` during and after the flight, and distinguishes frozen
278
+ (never leaves the origin) from snapped (already at the destination) from
279
+ animating, then asserts it lands on the destination rect and is released.
280
+ - `node scripts/verify-overlay-stacking.mjs` parks a surface over a button and
281
+ clicks the button with trusted input, which is the only way to tell a layer
282
+ that is `pointer-events: none` from one that merely looks like it.
@@ -0,0 +1,103 @@
1
+ ---
2
+ title: Migrating the media gallery
3
+ description: ZoomableImageGallery became ZoomableMediaGallery when the family learned to page video. Two symbols, seven files, two repos — and the subpath you already import still resolves.
4
+ order: 3
5
+ ---
6
+
7
+ # Migrating the media gallery
8
+
9
+ The full-screen viewer now pages **video as well as images**, so the family is
10
+ `zoomable-media-gallery` and the component is `ZoomableMediaGallery`. Bloom
11
+ follows the clean-cut rule: there is no `@deprecated` alias and no old-name
12
+ shim. This page is the whole bridge.
13
+
14
+ ## What actually changed
15
+
16
+ Two exported names, and nothing else:
17
+
18
+ | Old | New |
19
+ | --- | --- |
20
+ | `ZoomableImageGallery` | `ZoomableMediaGallery` |
21
+ | `ZoomableImageGalleryHandle` | `ZoomableMediaGalleryHandle` |
22
+ | `ZoomableImageGalleryProps` | `ZoomableMediaGalleryProps` |
23
+
24
+ Everything else you import from this family keeps its name: `GalleryImage`,
25
+ `MeasureThumb`, `MeasuredRect`, and every constant.
26
+
27
+ <Callout variant="info" title="The subpath still resolves">
28
+ `@oxyhq/bloom/zoomable-image-gallery` and
29
+ `@oxyhq/bloom/zoomable-media-gallery` are two specifiers for the SAME module.
30
+ The old one is not a shim being tolerated — an image gallery is exactly what
31
+ this serves when every item is an image, so it stays a first-class entry point.
32
+ You only have to change the *names you import*, not the path you import them
33
+ from. Changing the path too is tidier, and optional.
34
+ </Callout>
35
+
36
+ ## An image item is unchanged
37
+
38
+ `kind` is optional on the image arm precisely so this stays true:
39
+
40
+ ```tsx
41
+ const images: GalleryImage[] = [
42
+ { uri: 'https://…/a.jpg', alt: 'A photo', aspectRatio: 1.5 },
43
+ ];
44
+ ```
45
+
46
+ If your call site only ever passes images, the rename is the entire migration.
47
+
48
+ ## Every affected file in the ecosystem
49
+
50
+ Measured across `~/Oxy` (agent worktrees excluded). **Two repos, seven files,
51
+ and in every one of them the fix is the two symbol renames above.**
52
+
53
+ | Repo | File |
54
+ | --- | --- |
55
+ | Homiio | `packages/frontend/hooks/usePropertyPhotoGallery.ts` |
56
+ | Homiio | `packages/frontend/components/property/PhotoGallery.tsx` |
57
+ | Homiio | `packages/frontend/components/property/PhotoGrid.tsx` |
58
+ | Homiio | `packages/frontend/utils/propertyUtils.ts` |
59
+ | Mention | `packages/frontend/components/ZoomableAvatar.tsx` |
60
+ | Mention | `packages/frontend/components/Post/PostAttachmentsRow.tsx` |
61
+ | Mention | `packages/frontend/components/Post/Attachments/PostAttachmentMedia.tsx` |
62
+
63
+ `propertyUtils.ts` and `PostAttachmentMedia.tsx` import only `GalleryImage` /
64
+ `MeasuredRect`, which did not change — they appear here because they name the
65
+ subpath, and they need no edit at all.
66
+
67
+ <Callout variant="info" title="Noted is not affected">
68
+ `Noted/packages/frontend/components/notes/attachments/ZoomableImageGallery.tsx`
69
+ is an app-local component (a port of Mention's original), reached through
70
+ `@/components/...`. It imports nothing from Bloom, so this rename does not touch
71
+ it. It is listed here because a `grep` for the old name finds it and it looks
72
+ like a call site.
73
+ </Callout>
74
+
75
+ ## Why the failure is safe
76
+
77
+ A symbol that no longer exists fails at RESOLUTION — a TypeScript error and a
78
+ bundler error, at build time, naming the identifier. There is no version of this
79
+ that renders wrong or misbehaves at runtime, and nothing sees it until the app
80
+ deliberately bumps Bloom.
81
+
82
+ ## While you are here: video
83
+
84
+ Adding a video page needs a `VideoPlayer` **you** create and own — Bloom never
85
+ creates or destroys one:
86
+
87
+ ```tsx
88
+ import { useVideoPlayer } from 'expo-video';
89
+ import type { GalleryMedia } from '@oxyhq/bloom/zoomable-media-gallery';
90
+
91
+ const player = useVideoPlayer(videoUrl);
92
+
93
+ const items: GalleryMedia[] = [
94
+ { uri: 'https://…/a.jpg', alt: 'A photo', aspectRatio: 1.5 },
95
+ { kind: 'video', id: 'clip-1', player, poster: 'https://…/still.jpg', aspectRatio: 1.777 },
96
+ ];
97
+ ```
98
+
99
+ `expo-video` is an optional peer. An app that pages only images never installs
100
+ it; one that pages video without it gets posters and a single dev warning.
101
+
102
+ See [MediaFlight](./media-flight) for moving that same player between a feed
103
+ thumbnail and a full-screen route without restarting playback.
@@ -185,7 +185,7 @@ failure, not a type error.
185
185
  | `@oxyhq/bloom/menu` | `@oxyhq/bloom/dropdown-menu` | The family was ported to shadcn/react-native-reusables' public API. Every `Menu*` export is `DropdownMenu*`. |
186
186
  | `@oxyhq/bloom/collapsible` | `@oxyhq/bloom/accordion` | `Collapsible` called `UIManager.setLayoutAnimationEnabledExperimental(true)` at module scope and reached the root barrel through `export *`, so that side effect ran for every barrel consumer on Android old-arch whether or not the component was used. |
187
187
  | `@oxyhq/bloom/grouped-buttons` | `@oxyhq/bloom/settings-list` + `@oxyhq/bloom/item` | The only one of the three row renderers with no `accessibilityRole`, no `accessibilityLabel` and no `aria-disabled`, built on `TouchableOpacity`/`activeOpacity` instead of `useInteractionState`. |
188
- | `@oxyhq/bloom/pressable-with-hover` | none — inline it | One internal user. It now lives inside `zoomable-image-gallery` as `NavArrow`, the package's only hover-styled control. |
188
+ | `@oxyhq/bloom/pressable-with-hover` | none — inline it | One internal user. It now lives inside `zoomable-media-gallery` as `NavArrow`, the package's only hover-styled control. |
189
189
 
190
190
  ### Subpaths added
191
191
 
@@ -0,0 +1,116 @@
1
+ ---
2
+ title: ZoomableMediaGallery
3
+ description: The full-screen media viewer — images and video, mounted once, opened imperatively.
4
+ order: 71
5
+ ---
6
+
7
+ # ZoomableMediaGallery
8
+
9
+ Full-screen images **and video** with pinch-zoom, swipe between, and
10
+ drag-to-dismiss. Mount it once near the app root and open it from anywhere.
11
+
12
+ ```tsx
13
+ import { ZoomableMediaGallery, type ZoomableMediaGalleryHandle } from '@oxyhq/bloom/zoomable-media-gallery';
14
+
15
+ const gallery = useRef<ZoomableMediaGalleryHandle>(null);
16
+
17
+ <ZoomableMediaGallery ref={gallery} measureThumb={measureThumb} />
18
+
19
+ // from a thumbnail
20
+ gallery.current?.open(items, index);
21
+ ```
22
+
23
+ ## Two specifiers, one module
24
+
25
+ `@oxyhq/bloom/zoomable-image-gallery` resolves the same module and keeps
26
+ working: an image gallery is exactly what this serves when every item is an
27
+ image. The COMPONENT was renamed, so update the identifier —
28
+ `ZoomableImageGallery` no longer exists, and there is no alias.
29
+
30
+ ## A page is an image or a video
31
+
32
+ ```tsx
33
+ import { useVideoPlayer } from 'expo-video';
34
+ import type { GalleryMedia } from '@oxyhq/bloom/zoomable-media-gallery';
35
+
36
+ // YOU create the player and YOU own it. Bloom never creates or releases one.
37
+ const player = useVideoPlayer(videoUrl);
38
+
39
+ const items: GalleryMedia[] = [
40
+ { uri: 'https://…/photo.jpg', alt: 'A photo', aspectRatio: 1.5 },
41
+ { kind: 'video', id: 'clip-1', player, poster: 'https://…/still.jpg', aspectRatio: 1.777 },
42
+ ];
43
+ ```
44
+
45
+ An image item is unchanged — `{ uri }` — because `kind` is optional on that
46
+ arm. A video item carries the `VideoPlayer` object itself, and that is the
47
+ whole mechanism behind "the video does not restart when it opens": expo-video
48
+ keeps the player separate from the `VideoView` that shows it, and one player
49
+ can feed several views. Handing the same player to this gallery moves a playing
50
+ video into full screen without re-opening the stream.
51
+
52
+ Give a video an `aspectRatio`. Unlike an image there is nothing to probe, so
53
+ without one the page opens at the default ratio and resizes when the first
54
+ frame arrives.
55
+
56
+ ## Exactly one video view is mounted
57
+
58
+ The ACTIVE page. Every other page, and every thumbnail-strip tile, renders the
59
+ poster still. A second `VideoView` on the same player would be a duplicate
60
+ surface — the thing this family and `media-flight` are both built to avoid —
61
+ and on a strip it would be one decoder per tile.
62
+
63
+ One surface swap happens per opening: the pre-pager open surface hands over to
64
+ the pager's active page once the open animation settles.
65
+
66
+ ## Which prop decides what
67
+
68
+ | prop | decides |
69
+ | ------------------ | --------------------------------------------------------- |
70
+ | `measureThumb` | the rect the opening animation grows FROM |
71
+ | `cornerRadius` | the thumbnail's corner, so the transition matches it |
72
+ | `indicatorVariant` | `dots` or `thumbnails` for the page indicator |
73
+ | `videoControls` | whether video pages show expo-video's transport controls |
74
+
75
+ `open(items, index, rect?)` takes the whole set and which one to show.
76
+
77
+ ## Why it is imperative
78
+
79
+ One gallery serves every thumbnail on a screen. Making it declarative would
80
+ mean a piece of state per grid, or one shared "which item is open" flag
81
+ threaded through everything that can show media. The ref is what lets a
82
+ thumbnail deep in a list open it without the list knowing the gallery exists.
83
+
84
+ ## `measureThumb` is what makes the transition read
85
+
86
+ Without it the gallery fades in from nowhere. With it, the image grows out of
87
+ the thumbnail the user pressed, which tells them *which* image they opened —
88
+ useful precisely in the case where a grid has several similar photos.
89
+
90
+ It returns a promise because measuring is asynchronous on native. Returning
91
+ `null` is fine and degrades to the fade.
92
+
93
+ ## `alt` is the caption and the accessible text
94
+
95
+ Set `alt` on each item. It is shown as the caption for the active page, and it
96
+ is the only description a screen reader has — a media viewer with no alt text
97
+ is a screen with nothing on it.
98
+
99
+ ## Peers
100
+
101
+ It requires `expo-image`, which is why the family is **not** on the root
102
+ barrel: Metro does not tree-shake, so importing the barrel would drag that peer
103
+ into every consumer's build whether or not they use a gallery. Import it from
104
+ its subpath.
105
+
106
+ `expo-video` is an **optional** peer, loaded through
107
+ `media-flight/expo-video-module` with the one dynamic-require shape Metro marks
108
+ optional. An app that ships no video never has to install it; one that does and
109
+ forgets gets its video pages degraded to their posters, with a single dev
110
+ warning naming the package.
111
+
112
+ ## What a jest run can and cannot see
113
+
114
+ That it renders nothing until `open()` is called, and that it opens at the
115
+ index it was given. The gestures — pinch, pan-to-dismiss, the shared-element
116
+ transition — belong to a device build.
@@ -10,7 +10,7 @@ var _reactNative = require("react-native");
10
10
  * the image source URI.
11
11
  *
12
12
  * Intended for a thumbnail renderer and a fullscreen viewer (e.g.
13
- * `@oxyhq/bloom/zoomable-image-gallery`) sharing the SAME image URI to read
13
+ * `@oxyhq/bloom/zoomable-media-gallery`) sharing the SAME image URI to read
14
14
  * from and write to this one map, so an image already resolved as a thumbnail
15
15
  * has its ratio on hand when it opens "big" — no second cache, no duplicate
16
16
  * `Image.getSize` round-trip on the hot path. If the two surfaces render
@@ -1 +1 @@
1
- {"version":3,"names":["_theme","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_index","_tokens","_interopRequireWildcard","tokens","_platform","_index2","_index3","_Icons","Icons","_shared","_index5","_ImageAspectRatio","ImageAspectRatio","_scroll","_connectionStatus","_portal","_index7","_dialog","_surfaces","_button","_fab","_frostedIconButton","_index8","_index9","_index0","_index1","_avatarGroup","_index10","_loading","_promptInput","_index11","_index12","_Typography","Typography","_Skeleton","Skeleton","_Grid","Grid","_index16","_index17","_index18","_connectionDots","_index19","_contentPanel","_progressiveBlur","_list","_index20","_index21","_motion","_index22","_index23","_index24","_index25","_index26","_index27","_index28","_index29","_levelPicker","_combobox","_bottomSheet","_index30","_index31","_index32","_index33","_index34","_index35","_index36","_index37","_index38","_index39","_index40","_index41","_index42","_index43","_index44","_index45","_index46","_index47","_dropdownMenu","_tooltip","_select","_contextMenu","_menubar","_popover","_alertDialog","_command","_Code","Code","_Fonts","Fonts","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_theme","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_index","_tokens","_interopRequireWildcard","tokens","_platform","_index2","_index3","_Icons","Icons","_shared","_index5","_ImageAspectRatio","ImageAspectRatio","_scroll","_connectionStatus","_portal","_index7","_dialog","_surfaces","_button","_fab","_frostedIconButton","_index8","_index9","_index0","_index1","_avatarGroup","_index10","_loading","_promptInput","_index11","_index12","_Typography","Typography","_Skeleton","Skeleton","_Grid","Grid","_index16","_index17","_index18","_connectionDots","_index19","_contentPanel","_progressiveBlur","_list","_index20","_index21","_motion","_index22","_index23","_index24","_index25","_index26","_index27","_index28","_index29","_levelPicker","_combobox","_bottomSheet","_index30","_index31","_index32","_index33","_index34","_index35","_index36","_index37","_index38","_index39","_index40","_index41","_index42","_index43","_index44","_index45","_index46","_index47","_dropdownMenu","_tooltip","_select","_contextMenu","_menubar","_popover","_alertDialog","_command","_Code","Code","_Fonts","Fonts","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAGA,IAAAS,MAAA,GAAAb,OAAA;AAAmD,IAAAc,OAAA,GAAAC,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAO,MAAA,GAAAF,OAAA;AAGnD,IAAAG,SAAA,GAAAjB,OAAA;AAKA,IAAAkB,OAAA,GAAAlB,OAAA;AAiCA,IAAAmB,OAAA,GAAAnB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAiB,OAAA,EAAAhB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAe,OAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,OAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AAAwB,IAAAgB,MAAA,GAAAL,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAY,KAAA,GAAAD,MAAA;AAIxB,IAAAE,OAAA,GAAAtB,OAAA;AAGA,IAAAuB,OAAA,GAAAvB,OAAA;AAA2E,IAAAwB,iBAAA,GAAAT,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAgB,gBAAA,GAAAD,iBAAA;AAM3E,IAAAE,OAAA,GAAA1B,OAAA;AAUA,IAAA2B,iBAAA,GAAA3B,OAAA;AAIA,IAAA4B,OAAA,GAAA5B,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA0B,OAAA,EAAAzB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAwB,OAAA,CAAAxB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAgB,OAAA,CAAAxB,GAAA;IAAA;EAAA;AAAA;AAGA,IAAAyB,OAAA,GAAA7B,OAAA;AAcA,IAAA8B,OAAA,GAAA9B,OAAA;AAqBA,IAAA+B,SAAA,GAAA/B,OAAA;AAaA,IAAAgC,OAAA,GAAAhC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA8B,OAAA,EAAA7B,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA4B,OAAA,CAAA5B,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAoB,OAAA,CAAA5B,GAAA;IAAA;EAAA;AAAA;AACA,IAAA6B,IAAA,GAAAjC,OAAA;AAEA,IAAAkC,kBAAA,GAAAlC,OAAA;AAEA,IAAAmC,OAAA,GAAAnC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAiC,OAAA,EAAAhC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA+B,OAAA,CAAA/B,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAuB,OAAA,CAAA/B,GAAA;IAAA;EAAA;AAAA;AACA,IAAAgC,OAAA,GAAApC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAkC,OAAA,EAAAjC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgC,OAAA,CAAAhC,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAwB,OAAA,CAAAhC,GAAA;IAAA;EAAA;AAAA;AACA,IAAAiC,OAAA,GAAArC,OAAA;AAMA,IAAAsC,OAAA,GAAAtC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAoC,OAAA,EAAAnC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAkC,OAAA,CAAAlC,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA0B,OAAA,CAAAlC,GAAA;IAAA;EAAA;AAAA;AACA,IAAAmC,YAAA,GAAAvC,OAAA;AAEA,IAAAwC,QAAA,GAAAxC,OAAA;AAEA,IAAAyC,QAAA,GAAAzC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAuC,QAAA,EAAAtC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAqC,QAAA,CAAArC,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA6B,QAAA,CAAArC,GAAA;IAAA;EAAA;AAAA;AACA,IAAAsC,YAAA,GAAA1C,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAwC,YAAA,EAAAvC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAsC,YAAA,CAAAtC,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA8B,YAAA,CAAAtC,GAAA;IAAA;EAAA;AAAA;AACA,IAAAuC,QAAA,GAAA3C,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAyC,QAAA,EAAAxC,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAuC,QAAA,CAAAvC,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA+B,QAAA,CAAAvC,GAAA;IAAA;EAAA;AAAA;AAGA,IAAAwC,QAAA,GAAA5C,OAAA;AAA6C,IAAA6C,WAAA,GAAA9B,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAqC,UAAA,GAAAD,WAAA;AAAA,IAAAE,SAAA,GAAAhC,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAuC,QAAA,GAAAD,SAAA;AAAA,IAAAE,KAAA,GAAAlC,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAAyC,IAAA,GAAAD,KAAA;AAS7C,IAAAE,QAAA,GAAAnD,OAAA;AACA,IAAAoD,QAAA,GAAApD,OAAA;AAEA,IAAAqD,QAAA,GAAArD,OAAA;AACA,IAAAsD,eAAA,GAAAtD,OAAA;AAEA,IAAAuD,QAAA,GAAAvD,OAAA;AAEA,IAAAwD,aAAA,GAAAxD,OAAA;AAOA,IAAAyD,gBAAA,GAAAzD,OAAA;AAEA,IAAA0D,KAAA,GAAA1D,OAAA;AAUA,IAAA2D,QAAA,GAAA3D,OAAA;AAEA,IAAA4D,QAAA,GAAA5D,OAAA;AAIA,IAAA6D,OAAA,GAAA7D,OAAA;AAEA,IAAA8D,QAAA,GAAA9D,OAAA;AAIA,IAAA+D,QAAA,GAAA/D,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA6D,QAAA,EAAA5D,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA2D,QAAA,CAAA3D,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAmD,QAAA,CAAA3D,GAAA;IAAA;EAAA;AAAA;AACA,IAAA4D,QAAA,GAAAhE,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA8D,QAAA,EAAA7D,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA4D,QAAA,CAAA5D,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAoD,QAAA,CAAA5D,GAAA;IAAA;EAAA;AAAA;AACA,IAAA6D,QAAA,GAAAjE,OAAA;AACA,IAAAkE,QAAA,GAAAlE,OAAA;AAEA,IAAAmE,QAAA,GAAAnE,OAAA;AAEA,IAAAoE,QAAA,GAAApE,OAAA;AAEA,IAAAqE,QAAA,GAAArE,OAAA;AAEA,IAAAsE,YAAA,GAAAtE,OAAA;AAEA,IAAAuE,SAAA,GAAAvE,OAAA;AAIA,IAAAwE,YAAA,GAAAxE,OAAA;AAIA,IAAAyE,QAAA,GAAAzE,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAuE,QAAA,EAAAtE,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAqE,QAAA,CAAArE,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA6D,QAAA,CAAArE,GAAA;IAAA;EAAA;AAAA;AACA,IAAAsE,QAAA,GAAA1E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAwE,QAAA,EAAAvE,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAsE,QAAA,CAAAtE,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA8D,QAAA,CAAAtE,GAAA;IAAA;EAAA;AAAA;AACA,IAAAuE,QAAA,GAAA3E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAyE,QAAA,EAAAxE,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAuE,QAAA,CAAAvE,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA+D,QAAA,CAAAvE,GAAA;IAAA;EAAA;AAAA;AACA,IAAAwE,QAAA,GAAA5E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA0E,QAAA,EAAAzE,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAwE,QAAA,CAAAxE,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAgE,QAAA,CAAAxE,GAAA;IAAA;EAAA;AAAA;AACA,IAAAyE,QAAA,GAAA7E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA2E,QAAA,EAAA1E,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAyE,QAAA,CAAAzE,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAiE,QAAA,CAAAzE,GAAA;IAAA;EAAA;AAAA;AACA,IAAA0E,QAAA,GAAA9E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA4E,QAAA,EAAA3E,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA0E,QAAA,CAAA1E,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAkE,QAAA,CAAA1E,GAAA;IAAA;EAAA;AAAA;AACA,IAAA2E,QAAA,GAAA/E,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA6E,QAAA,EAAA5E,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA2E,QAAA,CAAA3E,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAmE,QAAA,CAAA3E,GAAA;IAAA;EAAA;AAAA;AACA,IAAA4E,QAAA,GAAAhF,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA8E,QAAA,EAAA7E,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA4E,QAAA,CAAA5E,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAoE,QAAA,CAAA5E,GAAA;IAAA;EAAA;AAAA;AACA,IAAA6E,QAAA,GAAAjF,OAAA;AAIA,IAAAkF,QAAA,GAAAlF,OAAA;AAEA,IAAAmF,QAAA,GAAAnF,OAAA;AAEA,IAAAoF,QAAA,GAAApF,OAAA;AAOA,IAAAqF,QAAA,GAAArF,OAAA;AAEA,IAAAsF,QAAA,GAAAtF,OAAA;AAWA,IAAAuF,QAAA,GAAAvF,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAqF,QAAA,EAAApF,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAmF,QAAA,CAAAnF,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA2E,QAAA,CAAAnF,GAAA;IAAA;EAAA;AAAA;AACA,IAAAoF,QAAA,GAAAxF,OAAA;AAEA,IAAAyF,QAAA,GAAAzF,OAAA;AAIA,IAAA0F,QAAA,GAAA1F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAwF,QAAA,EAAAvF,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAsF,QAAA,CAAAtF,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA8E,QAAA,CAAAtF,GAAA;IAAA;EAAA;AAAA;AACA,IAAAuF,aAAA,GAAA3F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAyF,aAAA,EAAAxF,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAuF,aAAA,CAAAvF,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAA+E,aAAA,CAAAvF,GAAA;IAAA;EAAA;AAAA;AACA,IAAAwF,QAAA,GAAA5F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA0F,QAAA,EAAAzF,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAwF,QAAA,CAAAxF,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAgF,QAAA,CAAAxF,GAAA;IAAA;EAAA;AAAA;AACA,IAAAyF,OAAA,GAAA7F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA2F,OAAA,EAAA1F,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAyF,OAAA,CAAAzF,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAiF,OAAA,CAAAzF,GAAA;IAAA;EAAA;AAAA;AACA,IAAA0F,YAAA,GAAA9F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA4F,YAAA,EAAA3F,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA0F,YAAA,CAAA1F,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAkF,YAAA,CAAA1F,GAAA;IAAA;EAAA;AAAA;AACA,IAAA2F,QAAA,GAAA/F,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA6F,QAAA,EAAA5F,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA2F,QAAA,CAAA3F,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAmF,QAAA,CAAA3F,GAAA;IAAA;EAAA;AAAA;AACA,IAAA4F,QAAA,GAAAhG,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAA8F,QAAA,EAAA7F,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAA4F,QAAA,CAAA5F,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAoF,QAAA,CAAA5F,GAAA;IAAA;EAAA;AAAA;AACA,IAAA6F,YAAA,GAAAjG,OAAA;AAEA,IAAAkG,QAAA,GAAAlG,OAAA;AAAoC,IAAAmG,KAAA,GAAApF,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAA2F,IAAA,GAAAD,KAAA;AAAA,IAAAE,MAAA,GAAAtF,uBAAA,CAAAf,OAAA;AAAAS,OAAA,CAAA6F,KAAA,GAAAD,MAAA;AAAA,SAAAtF,wBAAAwF,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAA1F,uBAAA,YAAAA,CAAAwF,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAjG,GAAA,CAAA2F,CAAA,GAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAlG,cAAA,CAAAC,IAAA,CAAAgG,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAA5G,MAAA,CAAAS,cAAA,KAAAT,MAAA,CAAAmH,wBAAA,CAAAb,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAlG,GAAA,IAAAkG,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA","ignoreList":[]}