@flamingo-stack/openframe-frontend-core 0.0.705 → 0.0.706-snapshot.20261006181108

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 (208) hide show
  1. package/dist/chat-protocol/index.cjs +23 -14
  2. package/dist/chat-protocol/index.js +23 -14
  3. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  4. package/dist/chat-protocol/source-metadata.d.ts +11 -2
  5. package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
  6. package/dist/{chunk-QFXRPRFT.js → chunk-2YHNQAMU.js} +3 -3
  7. package/dist/{chunk-YHM5AWTT.js → chunk-3FZP73R4.js} +6 -6
  8. package/dist/{chunk-VR2ZLFCP.js → chunk-4IBPRIQH.js} +1 -1
  9. package/dist/{chunk-AQWZNP6A.js → chunk-4RVC6TCE.js} +4 -4
  10. package/dist/{chunk-OUY3HHW6.cjs → chunk-4UMOD5NU.cjs} +928 -539
  11. package/dist/{chunk-IKTQ3ZAG.cjs → chunk-54L6NMKQ.cjs} +6 -6
  12. package/dist/{chunk-A75QY6CD.cjs → chunk-56LOCS37.cjs} +21 -21
  13. package/dist/{chunk-WA6GUYQ4.cjs → chunk-5CMYEGHE.cjs} +104 -104
  14. package/dist/{chunk-VA5T32XA.js → chunk-632NGOIH.js} +2 -2
  15. package/dist/{chunk-MMOODW57.cjs → chunk-6NTPY5QA.cjs} +1887 -94
  16. package/dist/{chunk-VESKITRQ.cjs → chunk-7XVBJDH7.cjs} +728 -732
  17. package/dist/{chunk-3MX5S4CF.cjs → chunk-AGNG62O2.cjs} +905 -2564
  18. package/dist/{chunk-ZSAO2HBW.js → chunk-BETJB7UV.js} +15 -15
  19. package/dist/{chunk-MP2C3LJ4.js → chunk-CUME3VTQ.js} +1 -1
  20. package/dist/{chunk-PDWVPI3S.js → chunk-CZ7Y7UG4.js} +4 -72
  21. package/dist/{chunk-F6I6XZMN.js → chunk-E2TQZIOJ.js} +5 -5
  22. package/dist/{chunk-X5MQ7JRP.js → chunk-ECXW3RIH.js} +9 -9
  23. package/dist/{chunk-JEZKGCZI.cjs → chunk-EUSDLX5W.cjs} +26 -26
  24. package/dist/{chunk-6NJKKO73.cjs → chunk-F4E3L3KV.cjs} +15 -15
  25. package/dist/{chunk-MFFCUVWG.js → chunk-F57ECE2I.js} +1 -1
  26. package/dist/{chunk-F6AFPNDF.js → chunk-FBY4V3YS.js} +15 -15
  27. package/dist/{chunk-CH5232HV.js → chunk-FI6GMDO7.js} +2455 -662
  28. package/dist/{chunk-NDESEPW5.js → chunk-FXJ3WWUB.js} +68 -0
  29. package/dist/{chunk-FCGC42TS.js → chunk-HTBN3XYF.js} +57 -61
  30. package/dist/{chunk-ZSAGLQOD.cjs → chunk-I43ZVJRL.cjs} +17 -17
  31. package/dist/{chunk-7VVFKJY5.js → chunk-IBQZMRWO.js} +1796 -3455
  32. package/dist/{chunk-4KX6OED2.cjs → chunk-JFSLQ2XS.cjs} +46 -46
  33. package/dist/{chunk-5HBHO5TB.js → chunk-JPG7OHEG.js} +1 -1
  34. package/dist/{chunk-MKXO4Q5P.js → chunk-KUC673HM.js} +383 -142
  35. package/dist/{chunk-4I45Y3DN.cjs → chunk-L3Q7R7CQ.cjs} +6 -6
  36. package/dist/{chunk-X72J4ACL.cjs → chunk-LLSUVPQC.cjs} +252 -8
  37. package/dist/{chunk-RKV5B7EU.cjs → chunk-LM7TXMLU.cjs} +72 -4
  38. package/dist/{chunk-PN2RKPDF.js → chunk-LSQPH73L.js} +10 -10
  39. package/dist/{chunk-HPWWNJE7.cjs → chunk-MY3JYZQY.cjs} +89 -89
  40. package/dist/{chunk-2YXVWZVF.js → chunk-N45D4ZXQ.js} +959 -715
  41. package/dist/{chunk-Z2VNQQ74.js → chunk-NCPTID44.js} +978 -942
  42. package/dist/{chunk-KOWVJD4V.cjs → chunk-O6WNIA6W.cjs} +56 -56
  43. package/dist/{chunk-ABU3TGXA.cjs → chunk-OF6GEI5A.cjs} +3 -3
  44. package/dist/{chunk-OHFS7VOU.cjs → chunk-PLYEKV3N.cjs} +2 -2
  45. package/dist/{chunk-VHCACDKP.cjs → chunk-RQRX4YC3.cjs} +39 -39
  46. package/dist/{chunk-DW7G4KG3.js → chunk-RZNRVXHH.js} +3 -3
  47. package/dist/{chunk-G5A3PSPV.js → chunk-SGJP2WKD.js} +1080 -691
  48. package/dist/{chunk-7LS22BZU.cjs → chunk-STXYW25T.cjs} +14 -14
  49. package/dist/{chunk-YFBM2K6X.cjs → chunk-TB5EDWRC.cjs} +4 -4
  50. package/dist/{chunk-RBDP4WDE.js → chunk-U6BWEKJC.js} +6 -6
  51. package/dist/{chunk-XOYH2YQE.cjs → chunk-UDFRUKLC.cjs} +2 -2
  52. package/dist/{chunk-TYWLNCNH.cjs → chunk-UVTD52MD.cjs} +14 -82
  53. package/dist/{chunk-N3COXDBH.cjs → chunk-VX4E6YSB.cjs} +41 -5
  54. package/dist/{chunk-2QEUFXNS.cjs → chunk-WCVZCGK5.cjs} +312 -71
  55. package/dist/{chunk-6XIF2Z7I.js → chunk-WMX26HB5.js} +3 -3
  56. package/dist/{chunk-IHERL5V4.cjs → chunk-WXAT5C4C.cjs} +34 -34
  57. package/dist/{chunk-D7BTSVMS.cjs → chunk-Y2GSOUCS.cjs} +2 -2
  58. package/dist/{chunk-6SEANMOU.js → chunk-Y5VSOYPS.js} +11 -11
  59. package/dist/{chunk-DENB2XJC.js → chunk-YQWTGQG5.js} +2 -2
  60. package/dist/components/case-studies/index.cjs +30 -32
  61. package/dist/components/case-studies/index.js +14 -16
  62. package/dist/components/chat/entity-cards/case-study-card.d.ts +11 -4
  63. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  64. package/dist/components/chat/index.cjs +9 -11
  65. package/dist/components/chat/index.js +14 -16
  66. package/dist/components/chat/types/message.types.d.ts +20 -16
  67. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  68. package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
  69. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  70. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  71. package/dist/components/contact/index.cjs +12 -14
  72. package/dist/components/contact/index.js +11 -13
  73. package/dist/components/docs/index.cjs +15 -17
  74. package/dist/components/docs/index.js +14 -16
  75. package/dist/components/embeds/index.cjs +12 -14
  76. package/dist/components/embeds/index.js +11 -13
  77. package/dist/components/faq/index.cjs +13 -15
  78. package/dist/components/faq/index.js +12 -14
  79. package/dist/components/features/index.cjs +12 -14
  80. package/dist/components/features/index.js +21 -23
  81. package/dist/components/help-center-pages/index.cjs +118 -120
  82. package/dist/components/help-center-pages/index.js +33 -35
  83. package/dist/components/icons/index.cjs +3 -5
  84. package/dist/components/icons/index.js +9 -11
  85. package/dist/components/icons-v2-generated/index.cjs +3 -5
  86. package/dist/components/icons-v2-generated/index.js +2 -4
  87. package/dist/components/index.cjs +86 -159
  88. package/dist/components/index.d.ts +0 -2
  89. package/dist/components/index.d.ts.map +1 -1
  90. package/dist/components/index.js +329 -402
  91. package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
  92. package/dist/components/meeting-scheduler/index.cjs +62 -64
  93. package/dist/components/meeting-scheduler/index.js +12 -14
  94. package/dist/components/navigation/index.cjs +28 -16
  95. package/dist/components/navigation/index.d.ts +14 -10
  96. package/dist/components/navigation/index.d.ts.map +1 -1
  97. package/dist/components/navigation/index.js +38 -26
  98. package/dist/components/navigation/mingo-ai-button.d.ts +38 -3
  99. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  100. package/dist/components/navigation/mobile-nav-sheet-id.d.ts +3 -0
  101. package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +1 -0
  102. package/dist/components/navigation/mobile-nav-sheet.d.ts +48 -0
  103. package/dist/components/navigation/mobile-nav-sheet.d.ts.map +1 -0
  104. package/dist/components/navigation/nav-item-row.d.ts +27 -0
  105. package/dist/components/navigation/nav-item-row.d.ts.map +1 -0
  106. package/dist/components/navigation/nav-panel.d.ts +43 -0
  107. package/dist/components/navigation/nav-panel.d.ts.map +1 -0
  108. package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -2
  109. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  110. package/dist/components/navigation/site-footer.d.ts +28 -0
  111. package/dist/components/navigation/site-footer.d.ts.map +1 -0
  112. package/dist/components/navigation/site-header.d.ts +61 -0
  113. package/dist/components/navigation/site-header.d.ts.map +1 -0
  114. package/dist/components/navigation/site-nav-link.d.ts +26 -0
  115. package/dist/components/navigation/site-nav-link.d.ts.map +1 -0
  116. package/dist/components/navigation/top-navigation.d.ts +2 -2
  117. package/dist/components/navigation/top-navigation.d.ts.map +1 -1
  118. package/dist/components/onboarding-guides/index.cjs +15 -17
  119. package/dist/components/onboarding-guides/index.js +14 -16
  120. package/dist/components/related-content/index.cjs +10 -8
  121. package/dist/components/related-content/index.js +9 -7
  122. package/dist/components/tickets/index.cjs +16 -18
  123. package/dist/components/tickets/index.js +15 -17
  124. package/dist/components/ui/index.cjs +12 -14
  125. package/dist/components/ui/index.js +17 -19
  126. package/dist/hooks/index.cjs +19 -11
  127. package/dist/hooks/index.d.ts +1 -0
  128. package/dist/hooks/index.d.ts.map +1 -1
  129. package/dist/hooks/index.js +19 -11
  130. package/dist/hooks/ui/index.d.ts +3 -0
  131. package/dist/hooks/ui/index.d.ts.map +1 -1
  132. package/dist/hooks/ui/use-active-section.d.ts +10 -0
  133. package/dist/hooks/ui/use-active-section.d.ts.map +1 -0
  134. package/dist/hooks/ui/use-nav-menus.d.ts +48 -0
  135. package/dist/hooks/ui/use-nav-menus.d.ts.map +1 -0
  136. package/dist/hooks/ui/use-visitor-os.d.ts +15 -0
  137. package/dist/hooks/ui/use-visitor-os.d.ts.map +1 -0
  138. package/dist/hooks/use-location-hash.d.ts +9 -0
  139. package/dist/hooks/use-location-hash.d.ts.map +1 -0
  140. package/dist/index.cjs +55 -22
  141. package/dist/index.js +229 -196
  142. package/dist/types/case-study.d.ts +9 -0
  143. package/dist/types/case-study.d.ts.map +1 -1
  144. package/dist/types/navigation.d.ts +95 -65
  145. package/dist/types/navigation.d.ts.map +1 -1
  146. package/dist/utils/index.cjs +55 -0
  147. package/dist/utils/index.d.ts +1 -0
  148. package/dist/utils/index.d.ts.map +1 -1
  149. package/dist/utils/index.js +50 -1
  150. package/dist/utils/source-icons.d.ts.map +1 -1
  151. package/dist/utils/visitor-os.d.ts +45 -0
  152. package/dist/utils/visitor-os.d.ts.map +1 -0
  153. package/package.json +1 -1
  154. package/src/chat-protocol/nats-decoder.ts +10 -8
  155. package/src/chat-protocol/source-metadata.ts +25 -2
  156. package/src/components/chat/entity-cards/case-study-card.tsx +115 -5
  157. package/src/components/chat/types/message.types.ts +21 -15
  158. package/src/components/chat/types/unified-chat-state.types.ts +1 -1
  159. package/src/components/chat/utils/icon-library.tsx +35 -1
  160. package/src/components/chat/utils/process-historical-messages.ts +12 -4
  161. package/src/components/index.ts +0 -2
  162. package/src/components/loading/page-layout-skeleton.tsx +1 -1
  163. package/src/components/navigation/index.ts +21 -14
  164. package/src/components/navigation/mingo-ai-button.tsx +139 -63
  165. package/src/components/navigation/mobile-nav-sheet-id.ts +2 -0
  166. package/src/components/navigation/mobile-nav-sheet.tsx +241 -0
  167. package/src/components/navigation/nav-item-row.tsx +129 -0
  168. package/src/components/navigation/nav-panel.tsx +196 -0
  169. package/src/components/navigation/navigation-sidebar-item.tsx +1 -2
  170. package/src/components/navigation/site-footer.tsx +256 -0
  171. package/src/components/navigation/site-header.tsx +339 -0
  172. package/src/components/navigation/site-nav-link.tsx +41 -0
  173. package/src/components/navigation/ticket-alerts-button.tsx +2 -2
  174. package/src/components/navigation/top-navigation.tsx +2 -2
  175. package/src/hooks/index.ts +1 -0
  176. package/src/hooks/ui/index.ts +3 -0
  177. package/src/hooks/ui/use-active-section.ts +44 -0
  178. package/src/hooks/ui/use-nav-menus.ts +200 -0
  179. package/src/hooks/ui/use-visitor-os.ts +33 -0
  180. package/src/hooks/use-location-hash.ts +34 -0
  181. package/src/styles/chat-animations.css +57 -2
  182. package/src/types/case-study.ts +16 -0
  183. package/src/types/navigation.ts +80 -66
  184. package/src/utils/index.ts +1 -0
  185. package/src/utils/source-icons.ts +13 -0
  186. package/src/utils/visitor-os.ts +84 -0
  187. package/dist/chunk-LMBC5FFP.js +0 -43
  188. package/dist/chunk-O43V3EOS.js +0 -252
  189. package/dist/chunk-QZVSJF2K.cjs +0 -252
  190. package/dist/chunk-RALRPFDW.cjs +0 -43
  191. package/dist/components/footer-waitlist-button.d.ts +0 -29
  192. package/dist/components/footer-waitlist-button.d.ts.map +0 -1
  193. package/dist/components/footer.d.ts +0 -47
  194. package/dist/components/footer.d.ts.map +0 -1
  195. package/dist/components/navigation/client-only-header.d.ts +0 -8
  196. package/dist/components/navigation/client-only-header.d.ts.map +0 -1
  197. package/dist/components/navigation/header-skeleton.d.ts +0 -12
  198. package/dist/components/navigation/header-skeleton.d.ts.map +0 -1
  199. package/dist/components/navigation/header.d.ts +0 -9
  200. package/dist/components/navigation/header.d.ts.map +0 -1
  201. package/dist/components/navigation/mobile-nav-panel.d.ts +0 -10
  202. package/dist/components/navigation/mobile-nav-panel.d.ts.map +0 -1
  203. package/src/components/footer-waitlist-button.tsx +0 -53
  204. package/src/components/footer.tsx +0 -195
  205. package/src/components/navigation/client-only-header.tsx +0 -22
  206. package/src/components/navigation/header-skeleton.tsx +0 -74
  207. package/src/components/navigation/header.tsx +0 -429
  208. package/src/components/navigation/mobile-nav-panel.tsx +0 -155
@@ -9,25 +9,66 @@ var _chunkMGHIV4L6cjs = require('./chunk-MGHIV4L6.cjs');
9
9
 
10
10
 
11
11
 
12
- var _chunkRKV5B7EUcjs = require('./chunk-RKV5B7EU.cjs');
13
12
 
14
13
 
15
14
 
16
15
 
16
+ var _chunkLM7TXMLUcjs = require('./chunk-LM7TXMLU.cjs');
17
17
 
18
18
 
19
19
 
20
20
 
21
21
 
22
- var _chunkQZVSJF2Kcjs = require('./chunk-QZVSJF2K.cjs');
23
22
 
24
23
 
25
- var _chunkRALRPFDWcjs = require('./chunk-RALRPFDW.cjs');
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+ var _chunkLLSUVPQCcjs = require('./chunk-LLSUVPQC.cjs');
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+ var _chunkVX4E6YSBcjs = require('./chunk-VX4E6YSB.cjs');
26
64
 
27
65
 
28
66
  var _chunkUJ7AXHRZcjs = require('./chunk-UJ7AXHRZ.cjs');
29
67
 
30
68
 
69
+ var _chunk4GFNWALLcjs = require('./chunk-4GFNWALL.cjs');
70
+
71
+
31
72
  var _chunkDFQYAYBHcjs = require('./chunk-DFQYAYBH.cjs');
32
73
 
33
74
 
@@ -267,7 +308,7 @@ var disabledTagClasses = [
267
308
  ];
268
309
  function TagLabel({ label, labelClassName }) {
269
310
  const isString = typeof label === "string";
270
- const { ref, isTruncated } = _chunkRKV5B7EUcjs.useIsTruncated.call(void 0, isString ? label : null);
311
+ const { ref, isTruncated } = _chunkLM7TXMLUcjs.useIsTruncated.call(void 0, isString ? label : null);
271
312
  if (!isString) {
272
313
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "truncate", labelClassName), children: label });
273
314
  }
@@ -319,7 +360,7 @@ function Tag({
319
360
  disabled ? "cursor-not-allowed" : "hover:opacity-100"
320
361
  ),
321
362
  "aria-label": "Remove",
322
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRALRPFDWcjs.XmarkCircleIcon, { className: "size-4" })
363
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkCircleIcon, { className: "size-4" })
323
364
  }
324
365
  )
325
366
  ]
@@ -854,7 +895,7 @@ var SquareAvatar = _react3.memo.call(void 0,
854
895
  style,
855
896
  ...props
856
897
  }, ref) => {
857
- const resolvedSrc = _chunkRKV5B7EUcjs.useAuthedImageSrc.call(void 0, src);
898
+ const resolvedSrc = _chunkLM7TXMLUcjs.useAuthedImageSrc.call(void 0, src);
858
899
  const sizeClasses2 = {
859
900
  // xs (24px): dense card meta rows — avatar stacks on delivery/
860
901
  // roadmap cards. Part of the shared scale so no caller ever
@@ -1047,7 +1088,7 @@ var Modal = _react3.forwardRef.call(void 0, ({ isOpen, onClose, children, classN
1047
1088
  ),
1048
1089
  role: "dialog",
1049
1090
  "aria-modal": "true",
1050
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRKV5B7EUcjs.ViewportBreakpoints, { children })
1091
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLM7TXMLUcjs.ViewportBreakpoints, { children })
1051
1092
  }
1052
1093
  )
1053
1094
  ] });
@@ -1170,6 +1211,90 @@ function ImageGalleryModal({ images, isOpen, onClose, initialIndex = 0 }) {
1170
1211
  ] }) });
1171
1212
  }
1172
1213
 
1214
+ // src/utils/fetch-priority.ts
1215
+
1216
+ var REACT_MAJOR = parseInt((_react4.default.version || "0").split(".")[0], 10);
1217
+ var USE_CAMEL_CASE_FETCH_PRIORITY = REACT_MAJOR >= 19;
1218
+ function fetchPriorityProp(priority) {
1219
+ const value = priority === void 0 ? "auto" : typeof priority === "boolean" ? priority ? "high" : "low" : priority;
1220
+ return USE_CAMEL_CASE_FETCH_PRIORITY ? { fetchPriority: value } : { fetchpriority: value };
1221
+ }
1222
+
1223
+ // src/components/features/mux-origins.ts
1224
+ var MUX_STREAM_ORIGIN = "https://stream.mux.com";
1225
+ var MUX_IMAGE_ORIGIN = "https://image.mux.com";
1226
+ function toMuxPreviewUrl(url, maxResolution = "720p") {
1227
+ let parsed;
1228
+ try {
1229
+ parsed = new URL(url);
1230
+ } catch (e3) {
1231
+ return url;
1232
+ }
1233
+ if (parsed.origin !== MUX_STREAM_ORIGIN) return url;
1234
+ if (!parsed.pathname.endsWith(".m3u8")) return url;
1235
+ if (parsed.searchParams.has("token")) return url;
1236
+ parsed.searchParams.set("max_resolution", maxResolution);
1237
+ return parsed.toString();
1238
+ }
1239
+
1240
+ // src/components/features/use-video-warmup.ts
1241
+
1242
+ var _reactdom = require('react-dom'); var _reactdom2 = _interopRequireDefault(_reactdom);
1243
+ function saveDataEnabled() {
1244
+ if (typeof navigator === "undefined") return false;
1245
+ const conn = navigator.connection;
1246
+ return _optionalChain([conn, 'optionalAccess', _17 => _17.saveData]) === true;
1247
+ }
1248
+ function useVideoOriginPreconnect({ supabaseStorageOrigin } = {}) {
1249
+ const runtime = _chunkUJ7AXHRZcjs.useChatRuntime.call(void 0, );
1250
+ const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _18 => _18.endpoints, 'access', _19 => _19.supabaseStorageOrigin])));
1251
+ try {
1252
+ _reactdom2.default.preconnect(MUX_STREAM_ORIGIN, { crossOrigin: "anonymous" });
1253
+ _reactdom2.default.preconnect(MUX_IMAGE_ORIGIN, { crossOrigin: "anonymous" });
1254
+ if (resolvedOrigin) {
1255
+ _reactdom2.default.preconnect(resolvedOrigin, { crossOrigin: "anonymous" });
1256
+ }
1257
+ } catch (err) {
1258
+ if (process.env.NODE_ENV !== "production") {
1259
+ console.warn("[useVideoOriginPreconnect] preconnect failed:", err);
1260
+ }
1261
+ }
1262
+ }
1263
+ function useVideoWarmup({
1264
+ videoUrl,
1265
+ supabaseStorageOrigin,
1266
+ nearMargin = "1000px"
1267
+ } = {}) {
1268
+ const runtime = _chunkUJ7AXHRZcjs.useChatRuntime.call(void 0, );
1269
+ const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _20 => _20.endpoints, 'access', _21 => _21.supabaseStorageOrigin])));
1270
+ useVideoOriginPreconnect({ supabaseStorageOrigin: resolvedOrigin });
1271
+ const { ref, isNear } = _chunkLM7TXMLUcjs.useNearViewport.call(void 0, nearMargin);
1272
+ _react3.useEffect.call(void 0, () => {
1273
+ if (!isNear || !videoUrl || !resolvedOrigin) return void 0;
1274
+ if (saveDataEnabled()) return void 0;
1275
+ let videoOrigin;
1276
+ try {
1277
+ videoOrigin = new URL(videoUrl, "http://placeholder.local").origin;
1278
+ } catch (e4) {
1279
+ return void 0;
1280
+ }
1281
+ if (videoOrigin !== resolvedOrigin) return void 0;
1282
+ const link = document.createElement("link");
1283
+ link.rel = "preload";
1284
+ link.as = "video";
1285
+ link.href = videoUrl;
1286
+ link.crossOrigin = "anonymous";
1287
+ if ("fetchPriority" in link) {
1288
+ link.fetchPriority = "low";
1289
+ }
1290
+ document.head.appendChild(link);
1291
+ return () => {
1292
+ link.remove();
1293
+ };
1294
+ }, [isNear, videoUrl, resolvedOrigin]);
1295
+ return { ref, isNear };
1296
+ }
1297
+
1173
1298
  // src/components/features/video-center-badge.tsx
1174
1299
 
1175
1300
  var SIZES = {
@@ -1196,7 +1321,7 @@ function VideoPlayBadge({ size: size2 = "md", className }) {
1196
1321
  className
1197
1322
  ),
1198
1323
  style: { filter: GLYPH_SHADOW },
1199
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.PlayFilledIcon, { size: SIZES[size2], color: "currentColor" })
1324
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.PlayFilledIcon, { size: SIZES[size2], color: "currentColor" })
1200
1325
  }
1201
1326
  );
1202
1327
  }
@@ -1216,7 +1341,7 @@ function CardHoverPlay({ size: size2 = "md", className }) {
1216
1341
  }
1217
1342
  function VideoUnmuteGlyph({ size: size2 = "md", className }) {
1218
1343
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1219
- _chunkQZVSJF2Kcjs.VolumeOffFilledIcon,
1344
+ _chunkLLSUVPQCcjs.VolumeOffFilledIcon,
1220
1345
  {
1221
1346
  size: SIZES[size2],
1222
1347
  color: "currentColor",
@@ -1226,6 +1351,923 @@ function VideoUnmuteGlyph({ size: size2 = "md", className }) {
1226
1351
  );
1227
1352
  }
1228
1353
 
1354
+ // src/components/features/video.tsx
1355
+ var _muxplayerreact = require('@mux/mux-player-react'); var _muxplayerreact2 = _interopRequireDefault(_muxplayerreact);
1356
+
1357
+
1358
+ // src/components/features/use-ios-native-video-fullscreen.ts
1359
+
1360
+ var ENTER_FULLSCREEN_REQUEST = "mediaenterfullscreenrequest";
1361
+ function isIosAppShell() {
1362
+ const capacitor = globalThis.Capacitor;
1363
+ return _optionalChain([capacitor, 'optionalAccess', _22 => _22.isNativePlatform, 'optionalCall', _23 => _23()]) === true && _optionalChain([capacitor, 'access', _24 => _24.getPlatform, 'optionalCall', _25 => _25()]) === "ios";
1364
+ }
1365
+ function nativeVideoElement(player) {
1366
+ const media = player.media;
1367
+ const element = _nullishCoalesce(_optionalChain([media, 'optionalAccess', _26 => _26.nativeEl]), () => ( media));
1368
+ return element instanceof HTMLVideoElement ? element : null;
1369
+ }
1370
+ function useIosNativeVideoFullscreen(playerRef) {
1371
+ _react3.useEffect.call(void 0, () => {
1372
+ if (!isIosAppShell()) return void 0;
1373
+ const player = playerRef.current;
1374
+ if (!(player instanceof EventTarget)) return void 0;
1375
+ const takeOver = (event) => {
1376
+ const video = nativeVideoElement(player);
1377
+ if (!_optionalChain([video, 'optionalAccess', _27 => _27.webkitSupportsFullscreen]) || typeof video.webkitEnterFullscreen !== "function") return;
1378
+ event.stopImmediatePropagation();
1379
+ video.webkitEnterFullscreen();
1380
+ };
1381
+ player.addEventListener(ENTER_FULLSCREEN_REQUEST, takeOver, true);
1382
+ return () => player.removeEventListener(ENTER_FULLSCREEN_REQUEST, takeOver, true);
1383
+ }, [playerRef]);
1384
+ }
1385
+
1386
+ // src/components/features/video.tsx
1387
+
1388
+ function videoPerfDebugEnabled() {
1389
+ if (process.env.NODE_ENV !== "production") return true;
1390
+ try {
1391
+ return typeof localStorage !== "undefined" && localStorage.getItem("VIDEO_PERF_DEBUG") !== null;
1392
+ } catch (e5) {
1393
+ return false;
1394
+ }
1395
+ }
1396
+ var MUX_VIEWER_ID_KEY = "mux:viewer_id";
1397
+ function muxViewerId() {
1398
+ try {
1399
+ if (typeof localStorage === "undefined") return void 0;
1400
+ const existing = localStorage.getItem(MUX_VIEWER_ID_KEY);
1401
+ if (existing) return existing;
1402
+ const generated = typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
1403
+ localStorage.setItem(MUX_VIEWER_ID_KEY, generated);
1404
+ return generated;
1405
+ } catch (e6) {
1406
+ return void 0;
1407
+ }
1408
+ }
1409
+ if (typeof document !== "undefined") {
1410
+ try {
1411
+ document.cookie = "muxData=; path=/; max-age=0";
1412
+ } catch (e7) {
1413
+ }
1414
+ }
1415
+ if (typeof window !== "undefined") {
1416
+ const w = window;
1417
+ if (!_optionalChain([w, 'access', _28 => _28.chrome, 'optionalAccess', _29 => _29.cast])) {
1418
+ w.chrome = { ..._nullishCoalesce(w.chrome, () => ( {})), cast: { isAvailable: false } };
1419
+ }
1420
+ }
1421
+ if (typeof window !== "undefined" && typeof console !== "undefined") {
1422
+ const w = window;
1423
+ if (!w.__MEDIA_CHROME_WARN_PATCHED__) {
1424
+ w.__MEDIA_CHROME_WARN_PATCHED__ = true;
1425
+ const MEDIA_CHROME_NO_STYLESHEET_PREFIX = "Media Chrome: No style sheet found on style tag of";
1426
+ const originalWarn = console.warn.bind(console);
1427
+ console.warn = (...args) => {
1428
+ if (typeof args[0] === "string" && args[0].startsWith(MEDIA_CHROME_NO_STYLESHEET_PREFIX)) {
1429
+ return;
1430
+ }
1431
+ originalWarn(...args);
1432
+ };
1433
+ }
1434
+ }
1435
+ var userHasInteracted = false;
1436
+ var activationWaiters = /* @__PURE__ */ new Set();
1437
+ if (typeof window !== "undefined") {
1438
+ const w = window;
1439
+ if (!w.__VIDEO_ACTIVATION_TRACKED__) {
1440
+ w.__VIDEO_ACTIVATION_TRACKED__ = true;
1441
+ const markActivated = () => {
1442
+ userHasInteracted = true;
1443
+ activationWaiters.forEach((fn) => {
1444
+ try {
1445
+ fn();
1446
+ } catch (e8) {
1447
+ }
1448
+ });
1449
+ activationWaiters.clear();
1450
+ window.removeEventListener("pointerdown", markActivated, true);
1451
+ window.removeEventListener("keydown", markActivated, true);
1452
+ };
1453
+ window.addEventListener("pointerdown", markActivated, true);
1454
+ window.addEventListener("keydown", markActivated, true);
1455
+ }
1456
+ }
1457
+ var YT_HOSTS = /* @__PURE__ */ new Set([
1458
+ "youtube.com",
1459
+ "www.youtube.com",
1460
+ "m.youtube.com",
1461
+ "youtu.be",
1462
+ "youtube-nocookie.com",
1463
+ "www.youtube-nocookie.com"
1464
+ ]);
1465
+ function isYouTubeUrl(url) {
1466
+ try {
1467
+ return YT_HOSTS.has(new URL(url, "http://placeholder.local").hostname.toLowerCase());
1468
+ } catch (e9) {
1469
+ return false;
1470
+ }
1471
+ }
1472
+ var YT_PATH_RE = /^\/(?:embed|v|shorts)\/([^/]+)\/?$/;
1473
+ var BARE_YT_ID_RE = /^[A-Za-z0-9_-]{11}$/;
1474
+ function extractYouTubeId(url) {
1475
+ if (!url) return null;
1476
+ if (BARE_YT_ID_RE.test(url)) return url;
1477
+ let u;
1478
+ try {
1479
+ u = new URL(url, "http://placeholder.local");
1480
+ } catch (e10) {
1481
+ return null;
1482
+ }
1483
+ if (!YT_HOSTS.has(u.hostname.toLowerCase())) return null;
1484
+ if (u.hostname.toLowerCase().endsWith("youtu.be")) {
1485
+ return _nullishCoalesce(u.pathname.split("/").filter(Boolean)[0], () => ( null));
1486
+ }
1487
+ const v = u.searchParams.get("v");
1488
+ if (v) return v;
1489
+ const m = u.pathname.match(YT_PATH_RE);
1490
+ return m ? m[1] : null;
1491
+ }
1492
+ var VIDEO_PLAYBACK_FAILED_EVENT = "flamingo:video-playback-failed";
1493
+ function reportPlaybackFailure(detail) {
1494
+ if (typeof window === "undefined") return;
1495
+ try {
1496
+ window.dispatchEvent(new CustomEvent(VIDEO_PLAYBACK_FAILED_EVENT, { detail }));
1497
+ } catch (e11) {
1498
+ }
1499
+ }
1500
+ var VIDEO_STALL_TIMEOUT_MS = 15e3;
1501
+ function VideoErrorOverlay({
1502
+ onRetry,
1503
+ watchOnYouTubeId
1504
+ }) {
1505
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 z-10 flex flex-col items-center justify-center gap-[var(--spacing-system-sf)] bg-ods-overlay p-[var(--spacing-system-lf)] text-center", children: [
1506
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: "This video failed to play." }),
1507
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-sf)]", children: [
1508
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { variant: "outline", size: "small", onClick: onRetry, children: "Try again" }),
1509
+ watchOnYouTubeId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1510
+ _chunkDFQYAYBHcjs.Button,
1511
+ {
1512
+ variant: "transparent",
1513
+ size: "small",
1514
+ href: `https://www.youtube.com/watch?v=${watchOnYouTubeId}`,
1515
+ openInNewTab: true,
1516
+ children: "Watch on YouTube"
1517
+ }
1518
+ ) : null
1519
+ ] })
1520
+ ] });
1521
+ }
1522
+ var VIDEO_FILE_PLAYBACK_KEYS = [
1523
+ "srtContent",
1524
+ "captionsUrl",
1525
+ "autoPlay",
1526
+ "loop",
1527
+ "chromeless",
1528
+ "playOnHover",
1529
+ "playWhenHovered",
1530
+ "preload",
1531
+ "fit",
1532
+ "startTime",
1533
+ "playerHandleRef",
1534
+ "autoPlayUnmuted",
1535
+ "startMuted",
1536
+ "mutedIntent",
1537
+ "hideMutedBadge",
1538
+ "onMutedFallbackChange",
1539
+ "onEnded"
1540
+ ];
1541
+ function pickForwardedKeys(props, keys) {
1542
+ const out = {};
1543
+ for (const k of keys) {
1544
+ if (k in props) out[k] = props[k];
1545
+ }
1546
+ return out;
1547
+ }
1548
+ var pickFilePlayback = (props) => pickForwardedKeys(props, VIDEO_FILE_PLAYBACK_KEYS);
1549
+ var VIDEO_YOUTUBE_FACADE_KEYS = [
1550
+ "autoActivate",
1551
+ "suspended"
1552
+ ];
1553
+ var pickYouTube = (props) => pickForwardedKeys(props, VIDEO_YOUTUBE_FACADE_KEYS);
1554
+ function Video(props) {
1555
+ const { ref: nearRef, isNear } = _chunkLM7TXMLUcjs.useNearViewport.call(void 0, );
1556
+ const url = props.url;
1557
+ if (!url) return null;
1558
+ const effectiveKind = resolveKind(props, url);
1559
+ const layout = _nullishCoalesce(props.layout, () => ( "native"));
1560
+ if (props.lazy && !isNear) {
1561
+ return wrapWithLayout(
1562
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1563
+ "div",
1564
+ {
1565
+ ref: nearRef,
1566
+ className: props.className,
1567
+ style: props.poster ? { backgroundImage: `url(${props.poster})`, backgroundSize: "cover", backgroundPosition: "center" } : void 0,
1568
+ "aria-hidden": "true"
1569
+ }
1570
+ ),
1571
+ layout
1572
+ );
1573
+ }
1574
+ const inner = effectiveKind === "youtube" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1575
+ YouTubeFacade,
1576
+ {
1577
+ url,
1578
+ title: props.title,
1579
+ priority: props.priority,
1580
+ className: props.className,
1581
+ minimalControls: props.minimalControls,
1582
+ muted: props.muted,
1583
+ ...pickYouTube(props)
1584
+ }
1585
+ ) : "firstFrameOnly" in props && props.firstFrameOnly ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1586
+ FirstFramePreview,
1587
+ {
1588
+ url,
1589
+ poster: props.poster,
1590
+ fit: "fit" in props ? props.fit : void 0,
1591
+ className: props.className
1592
+ }
1593
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1594
+ FilePlayer,
1595
+ {
1596
+ url,
1597
+ poster: props.poster,
1598
+ muted: props.muted,
1599
+ ...pickFilePlayback(props),
1600
+ className: props.className
1601
+ }
1602
+ );
1603
+ return wrapWithLayout(inner, layout);
1604
+ }
1605
+ function resolveKind(props, url) {
1606
+ if ("kind" in props) {
1607
+ if (props.kind === "youtube") return "youtube";
1608
+ if (props.kind === "file") return "file";
1609
+ }
1610
+ if (BARE_YT_ID_RE.test(url)) return "youtube";
1611
+ return isYouTubeUrl(url) ? "youtube" : "file";
1612
+ }
1613
+ function wrapWithLayout(inner, layout) {
1614
+ switch (layout) {
1615
+ case "centered":
1616
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aspect-video w-full max-w-3xl overflow-hidden rounded-lg border border-ods-border", children: inner }) });
1617
+ case "fill":
1618
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 h-full w-full", children: inner });
1619
+ case "wide":
1620
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aspect-video w-full overflow-hidden rounded-lg bg-ods-bg", children: inner });
1621
+ case "native":
1622
+ default:
1623
+ return inner;
1624
+ }
1625
+ }
1626
+ function FirstFramePreview({
1627
+ url,
1628
+ poster,
1629
+ fit,
1630
+ className
1631
+ }) {
1632
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1633
+ "div",
1634
+ {
1635
+ "aria-hidden": true,
1636
+ className: "h-full w-full",
1637
+ style: { "--media-background-color": "transparent" },
1638
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FilePlayer, { url: `${url}#t=0.1`, poster, fit, muted: true, chromeless: true, className })
1639
+ }
1640
+ );
1641
+ }
1642
+ function FilePlayer({
1643
+ url,
1644
+ poster,
1645
+ muted,
1646
+ srtContent,
1647
+ captionsUrl,
1648
+ autoPlay,
1649
+ loop,
1650
+ chromeless,
1651
+ playOnHover,
1652
+ playWhenHovered,
1653
+ preload,
1654
+ fit,
1655
+ startTime,
1656
+ playerHandleRef,
1657
+ autoPlayUnmuted,
1658
+ startMuted,
1659
+ mutedIntent = false,
1660
+ hideMutedBadge,
1661
+ onMutedFallbackChange,
1662
+ onEnded,
1663
+ className
1664
+ }) {
1665
+ const effectivePreload = _nullishCoalesce(preload, () => ( (saveDataEnabled() ? "none" : "metadata")));
1666
+ const resolvedCaptionsUrl = _chunkLM7TXMLUcjs.useAuthedAssetSrc.call(void 0, captionsUrl, "text/vtt, */*");
1667
+ const [hoverMutedFallback, setHoverMutedFallback] = _react3.useState.call(void 0, () => Boolean(startMuted));
1668
+ const hoverPlayerRef = _react3.useRef.call(void 0, null);
1669
+ const [mutedFallbackBlocked, setMutedFallbackBlocked] = _react3.useState.call(void 0, false);
1670
+ const perfListenerRef = _react3.useRef.call(void 0, null);
1671
+ const clearPerfListener = _react3.useCallback.call(void 0, () => {
1672
+ if (perfListenerRef.current) {
1673
+ try {
1674
+ _optionalChain([hoverPlayerRef, 'access', _30 => _30.current, 'optionalAccess', _31 => _31.removeEventListener, 'optionalCall', _32 => _32("playing", perfListenerRef.current)]);
1675
+ } catch (e12) {
1676
+ }
1677
+ perfListenerRef.current = null;
1678
+ }
1679
+ }, []);
1680
+ _react3.useEffect.call(void 0, () => clearPerfListener, [clearPerfListener]);
1681
+ const hoverActiveRef = _react3.useRef.call(void 0, false);
1682
+ const hoverGenerationRef = _react3.useRef.call(void 0, 0);
1683
+ const activationWaiterRef = _react3.useRef.call(void 0, null);
1684
+ const clearActivationWaiter = _react3.useCallback.call(void 0, () => {
1685
+ if (activationWaiterRef.current) {
1686
+ activationWaiters.delete(activationWaiterRef.current);
1687
+ activationWaiterRef.current = null;
1688
+ }
1689
+ }, []);
1690
+ _react3.useEffect.call(void 0, () => clearActivationWaiter, [clearActivationWaiter]);
1691
+ const mutedIntentRef = _react3.useRef.call(void 0, mutedIntent);
1692
+ _react3.useEffect.call(void 0, () => {
1693
+ mutedIntentRef.current = mutedIntent;
1694
+ });
1695
+ const startHoverPlayback = _react3.useCallback.call(void 0, () => {
1696
+ hoverActiveRef.current = true;
1697
+ const generation = ++hoverGenerationRef.current;
1698
+ const el = hoverPlayerRef.current;
1699
+ if (!el) return;
1700
+ if (videoPerfDebugEnabled()) {
1701
+ clearPerfListener();
1702
+ const startedAt = performance.now();
1703
+ const onPlaying = () => {
1704
+ clearPerfListener();
1705
+ console.debug("[Video] hover\u2192playing %dms", Math.round(performance.now() - startedAt));
1706
+ };
1707
+ perfListenerRef.current = onPlaying;
1708
+ try {
1709
+ _optionalChain([el, 'access', _33 => _33.addEventListener, 'optionalCall', _34 => _34("playing", onPlaying)]);
1710
+ } catch (e13) {
1711
+ }
1712
+ }
1713
+ try {
1714
+ el.volume = 0.5;
1715
+ if (userHasInteracted) {
1716
+ el.muted = mutedIntentRef.current;
1717
+ _optionalChain([el, 'access', _35 => _35.play, 'optionalCall', _36 => _36(), 'optionalAccess', _37 => _37.catch, 'optionalCall', _38 => _38((err) => {
1718
+ const name = _optionalChain([err, 'optionalAccess', _39 => _39.name]);
1719
+ if (name === "NotAllowedError" && hoverActiveRef.current && generation === hoverGenerationRef.current) {
1720
+ try {
1721
+ el.muted = true;
1722
+ _optionalChain([el, 'access', _40 => _40.play, 'optionalCall', _41 => _41(), 'optionalAccess', _42 => _42.catch, 'optionalCall', _43 => _43(() => {
1723
+ if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
1724
+ setMutedFallbackBlocked(true);
1725
+ }
1726
+ })]);
1727
+ setHoverMutedFallback(true);
1728
+ } catch (e14) {
1729
+ }
1730
+ }
1731
+ })]);
1732
+ } else {
1733
+ el.muted = true;
1734
+ _optionalChain([el, 'access', _44 => _44.play, 'optionalCall', _45 => _45(), 'optionalAccess', _46 => _46.catch, 'optionalCall', _47 => _47(() => {
1735
+ if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
1736
+ setMutedFallbackBlocked(true);
1737
+ }
1738
+ })]);
1739
+ setHoverMutedFallback(true);
1740
+ clearActivationWaiter();
1741
+ const waiter = () => {
1742
+ activationWaiterRef.current = null;
1743
+ if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
1744
+ try {
1745
+ el.muted = false;
1746
+ el.volume = 0.5;
1747
+ } catch (e15) {
1748
+ }
1749
+ setHoverMutedFallback(false);
1750
+ }
1751
+ };
1752
+ activationWaiterRef.current = waiter;
1753
+ activationWaiters.add(waiter);
1754
+ }
1755
+ } catch (e16) {
1756
+ }
1757
+ }, [clearActivationWaiter, clearPerfListener]);
1758
+ const stopHoverPlayback = _react3.useCallback.call(void 0, () => {
1759
+ hoverActiveRef.current = false;
1760
+ setHoverMutedFallback(false);
1761
+ clearActivationWaiter();
1762
+ clearPerfListener();
1763
+ try {
1764
+ _optionalChain([hoverPlayerRef, 'access', _48 => _48.current, 'optionalAccess', _49 => _49.pause, 'optionalCall', _50 => _50()]);
1765
+ } catch (e17) {
1766
+ }
1767
+ }, [clearActivationWaiter, clearPerfListener]);
1768
+ const unmuteNow = _react3.useCallback.call(void 0, (e) => {
1769
+ e.stopPropagation();
1770
+ e.preventDefault();
1771
+ const el = hoverPlayerRef.current;
1772
+ try {
1773
+ if (el) {
1774
+ el.muted = false;
1775
+ el.volume = 0.5;
1776
+ _optionalChain([el, 'access', _51 => _51.play, 'optionalCall', _52 => _52(), 'optionalAccess', _53 => _53.catch, 'optionalCall', _54 => _54(() => {
1777
+ })]);
1778
+ }
1779
+ } catch (e18) {
1780
+ }
1781
+ setHoverMutedFallback(false);
1782
+ }, []);
1783
+ const hoverControlled = typeof playWhenHovered === "boolean";
1784
+ _react3.useEffect.call(void 0, () => {
1785
+ if (!hoverControlled) return;
1786
+ if (playWhenHovered) startHoverPlayback();
1787
+ else stopHoverPlayback();
1788
+ }, [hoverControlled, playWhenHovered, startHoverPlayback, stopHoverPlayback]);
1789
+ const handleHoverEnter = playOnHover && !hoverControlled ? startHoverPlayback : void 0;
1790
+ const handleHoverLeave = playOnHover && !hoverControlled ? stopHoverPlayback : void 0;
1791
+ const onMutedFallbackChangeRef = _react3.useRef.call(void 0, onMutedFallbackChange);
1792
+ _react3.useEffect.call(void 0, () => {
1793
+ onMutedFallbackChangeRef.current = onMutedFallbackChange;
1794
+ });
1795
+ _react3.useEffect.call(void 0, () => {
1796
+ _optionalChain([onMutedFallbackChangeRef, 'access', _55 => _55.current, 'optionalCall', _56 => _56({
1797
+ muted: hoverMutedFallback,
1798
+ blocked: hoverMutedFallback && mutedFallbackBlocked
1799
+ })]);
1800
+ }, [hoverMutedFallback, mutedFallbackBlocked]);
1801
+ const autoPlayKickedRef = _react3.useRef.call(void 0, false);
1802
+ _react3.useEffect.call(void 0, () => {
1803
+ if (autoPlayKickedRef.current) return;
1804
+ if (startMuted) {
1805
+ const mutedEl = hoverPlayerRef.current;
1806
+ if (!mutedEl) return;
1807
+ autoPlayKickedRef.current = true;
1808
+ try {
1809
+ mutedEl.muted = true;
1810
+ } catch (e19) {
1811
+ }
1812
+ if (autoPlay) {
1813
+ const reportBlocked = () => setMutedFallbackBlocked(true);
1814
+ try {
1815
+ _optionalChain([mutedEl, 'access', _57 => _57.play, 'optionalCall', _58 => _58(), 'optionalAccess', _59 => _59.catch, 'optionalCall', _60 => _60(reportBlocked)]);
1816
+ } catch (e20) {
1817
+ reportBlocked();
1818
+ }
1819
+ }
1820
+ return;
1821
+ }
1822
+ if (!autoPlayUnmuted) return;
1823
+ const el = hoverPlayerRef.current;
1824
+ if (!el) return;
1825
+ autoPlayKickedRef.current = true;
1826
+ try {
1827
+ el.muted = false;
1828
+ el.volume = typeof el.volume === "number" ? el.volume : 1;
1829
+ _optionalChain([el, 'access', _61 => _61.play, 'optionalCall', _62 => _62(), 'optionalAccess', _63 => _63.catch, 'optionalCall', _64 => _64((err) => {
1830
+ const name = _optionalChain([err, 'optionalAccess', _65 => _65.name]);
1831
+ if (name !== "NotAllowedError") return;
1832
+ try {
1833
+ el.muted = true;
1834
+ _optionalChain([el, 'access', _66 => _66.play, 'optionalCall', _67 => _67(), 'optionalAccess', _68 => _68.catch, 'optionalCall', _69 => _69(() => {
1835
+ setMutedFallbackBlocked(true);
1836
+ setHoverMutedFallback(true);
1837
+ })]);
1838
+ setMutedFallbackBlocked(false);
1839
+ setHoverMutedFallback(true);
1840
+ } catch (e21) {
1841
+ setMutedFallbackBlocked(true);
1842
+ setHoverMutedFallback(true);
1843
+ }
1844
+ })]);
1845
+ } catch (e22) {
1846
+ }
1847
+ }, [autoPlayUnmuted, startMuted, autoPlay]);
1848
+ _react3.useEffect.call(void 0, () => {
1849
+ const el = hoverPlayerRef.current;
1850
+ if (!_optionalChain([el, 'optionalAccess', _70 => _70.addEventListener])) return void 0;
1851
+ const onVolumeChange = () => {
1852
+ if (el.muted === false) {
1853
+ setMutedFallbackBlocked(false);
1854
+ setHoverMutedFallback(false);
1855
+ }
1856
+ };
1857
+ try {
1858
+ el.addEventListener("volumechange", onVolumeChange);
1859
+ } catch (e23) {
1860
+ }
1861
+ return () => {
1862
+ try {
1863
+ _optionalChain([el, 'access', _71 => _71.removeEventListener, 'optionalCall', _72 => _72("volumechange", onVolumeChange)]);
1864
+ } catch (e24) {
1865
+ }
1866
+ };
1867
+ }, []);
1868
+ _react3.useEffect.call(void 0, () => {
1869
+ const el = hoverPlayerRef.current;
1870
+ if (!_optionalChain([el, 'optionalAccess', _73 => _73.addEventListener])) return void 0;
1871
+ const onPlaying = () => setMutedFallbackBlocked(false);
1872
+ try {
1873
+ el.addEventListener("playing", onPlaying);
1874
+ } catch (e25) {
1875
+ }
1876
+ return () => {
1877
+ try {
1878
+ _optionalChain([el, 'access', _74 => _74.removeEventListener, 'optionalCall', _75 => _75("playing", onPlaying)]);
1879
+ } catch (e26) {
1880
+ }
1881
+ };
1882
+ }, []);
1883
+ const onEndedRef = _react3.useRef.call(void 0, onEnded);
1884
+ _react3.useEffect.call(void 0, () => {
1885
+ onEndedRef.current = onEnded;
1886
+ });
1887
+ _react3.useEffect.call(void 0, () => {
1888
+ const el = hoverPlayerRef.current;
1889
+ if (!_optionalChain([el, 'optionalAccess', _76 => _76.addEventListener])) return void 0;
1890
+ const handler = () => _optionalChain([onEndedRef, 'access', _77 => _77.current, 'optionalCall', _78 => _78()]);
1891
+ try {
1892
+ el.addEventListener("ended", handler);
1893
+ } catch (e27) {
1894
+ }
1895
+ return () => {
1896
+ try {
1897
+ _optionalChain([el, 'access', _79 => _79.removeEventListener, 'optionalCall', _80 => _80("ended", handler)]);
1898
+ } catch (e28) {
1899
+ }
1900
+ };
1901
+ }, []);
1902
+ useIosNativeVideoFullscreen(hoverPlayerRef);
1903
+ _react3.useImperativeHandle.call(void 0,
1904
+ playerHandleRef,
1905
+ () => ({
1906
+ getCurrentTime: () => _nullishCoalesce(_optionalChain([hoverPlayerRef, 'access', _81 => _81.current, 'optionalAccess', _82 => _82.currentTime]), () => ( 0)),
1907
+ getDuration: () => {
1908
+ const d = _optionalChain([hoverPlayerRef, 'access', _83 => _83.current, 'optionalAccess', _84 => _84.duration]);
1909
+ return typeof d === "number" && isFinite(d) ? d : 0;
1910
+ },
1911
+ getPaused: () => _nullishCoalesce(_optionalChain([hoverPlayerRef, 'access', _85 => _85.current, 'optionalAccess', _86 => _86.paused]), () => ( true)),
1912
+ getMuted: () => _nullishCoalesce(_optionalChain([hoverPlayerRef, 'access', _87 => _87.current, 'optionalAccess', _88 => _88.muted]), () => ( false)),
1913
+ play: async () => {
1914
+ await _optionalChain([hoverPlayerRef, 'access', _89 => _89.current, 'optionalAccess', _90 => _90.play, 'optionalCall', _91 => _91()]);
1915
+ },
1916
+ pause: () => {
1917
+ try {
1918
+ _optionalChain([hoverPlayerRef, 'access', _92 => _92.current, 'optionalAccess', _93 => _93.pause, 'optionalCall', _94 => _94()]);
1919
+ } catch (e29) {
1920
+ }
1921
+ },
1922
+ setMuted: (m) => {
1923
+ const el = hoverPlayerRef.current;
1924
+ if (!el) return;
1925
+ try {
1926
+ el.muted = m;
1927
+ if (!m) {
1928
+ setMutedFallbackBlocked(false);
1929
+ setHoverMutedFallback(false);
1930
+ }
1931
+ } catch (e30) {
1932
+ }
1933
+ }
1934
+ }),
1935
+ []
1936
+ );
1937
+ if (process.env.NODE_ENV !== "production" && srtContent && !captionsUrl) {
1938
+ console.warn(
1939
+ "[Video] srtContent supplied without captionsUrl \u2014 captions will not render. Pass captionsUrl (the VTT URL) instead; raw SRT text overlays are no longer supported."
1940
+ );
1941
+ }
1942
+ const monitorHealth = !chromeless;
1943
+ const [playbackFailed, setPlaybackFailed] = _react3.useState.call(void 0, false);
1944
+ const stallTimerRef = _react3.useRef.call(void 0, null);
1945
+ const clearStallTimer = _react3.useCallback.call(void 0, () => {
1946
+ if (stallTimerRef.current !== null) {
1947
+ clearTimeout(stallTimerRef.current);
1948
+ stallTimerRef.current = null;
1949
+ }
1950
+ }, []);
1951
+ _react3.useEffect.call(void 0, () => clearStallTimer, [clearStallTimer]);
1952
+ const failPlayback = _react3.useCallback.call(void 0,
1953
+ (reason) => {
1954
+ clearStallTimer();
1955
+ setPlaybackFailed(true);
1956
+ reportPlaybackFailure({ kind: "file", src: url, reason });
1957
+ },
1958
+ [clearStallTimer, url]
1959
+ );
1960
+ const armStallTimer = _react3.useCallback.call(void 0, () => {
1961
+ if (!monitorHealth) return;
1962
+ const el = hoverPlayerRef.current;
1963
+ if (!el || el.paused || el.ended) return;
1964
+ if (stallTimerRef.current !== null) return;
1965
+ stallTimerRef.current = setTimeout(() => {
1966
+ stallTimerRef.current = null;
1967
+ failPlayback("stall");
1968
+ }, VIDEO_STALL_TIMEOUT_MS);
1969
+ }, [monitorHealth, failPlayback]);
1970
+ const handlePlaybackProgress = _react3.useCallback.call(void 0, () => {
1971
+ clearStallTimer();
1972
+ setPlaybackFailed(false);
1973
+ }, [clearStallTimer]);
1974
+ const handleMediaError = _react3.useCallback.call(void 0, () => {
1975
+ if (!monitorHealth) return;
1976
+ failPlayback("error");
1977
+ }, [monitorHealth, failPlayback]);
1978
+ const retryPlayback = _react3.useCallback.call(void 0, () => {
1979
+ setPlaybackFailed(false);
1980
+ clearStallTimer();
1981
+ const el = hoverPlayerRef.current;
1982
+ if (!el) return;
1983
+ const resumeAt = typeof el.currentTime === "number" ? el.currentTime : 0;
1984
+ try {
1985
+ _optionalChain([el, 'access', _95 => _95.load, 'optionalCall', _96 => _96()]);
1986
+ if (resumeAt > 0 && el.addEventListener && el.removeEventListener) {
1987
+ const seekBack = () => {
1988
+ _optionalChain([el, 'access', _97 => _97.removeEventListener, 'optionalCall', _98 => _98("loadedmetadata", seekBack)]);
1989
+ try {
1990
+ el.currentTime = resumeAt;
1991
+ } catch (e31) {
1992
+ }
1993
+ };
1994
+ el.addEventListener("loadedmetadata", seekBack);
1995
+ }
1996
+ _optionalChain([el, 'access', _99 => _99.play, 'optionalCall', _100 => _100(), 'optionalAccess', _101 => _101.catch, 'optionalCall', _102 => _102(() => {
1997
+ })]);
1998
+ } catch (e32) {
1999
+ }
2000
+ }, [clearStallTimer]);
2001
+ const errorOverlay = monitorHealth && playbackFailed ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoErrorOverlay, { onRetry: retryPlayback }) : null;
2002
+ const player = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2003
+ _muxplayerreact2.default,
2004
+ {
2005
+ ref: hoverPlayerRef,
2006
+ onError: handleMediaError,
2007
+ onWaiting: armStallTimer,
2008
+ onStalled: armStallTimer,
2009
+ onPlaying: handlePlaybackProgress,
2010
+ onTimeUpdate: handlePlaybackProgress,
2011
+ onPause: clearStallTimer,
2012
+ src: url,
2013
+ poster: poster || void 0,
2014
+ streamType: "on-demand",
2015
+ preload: effectivePreload,
2016
+ playsInline: true,
2017
+ muted,
2018
+ preferCmcd: "header",
2019
+ disableCookies: true,
2020
+ metadata: { viewer_user_id: muxViewerId() },
2021
+ accentColor: "var(--ods-accent, var(--color-accent-primary))",
2022
+ autoPlay: autoPlay ? "muted" : autoPlayUnmuted ? "any" : void 0,
2023
+ startTime: typeof startTime === "number" ? startTime : void 0,
2024
+ loop,
2025
+ className,
2026
+ style: {
2027
+ width: "100%",
2028
+ height: "100%",
2029
+ ...chromeless ? { "--controls": "none" } : {},
2030
+ ...fit === "cover" ? { "--media-object-fit": "cover" } : {}
2031
+ },
2032
+ children: resolvedCaptionsUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "track", { kind: "captions", src: resolvedCaptionsUrl, srcLang: "en", label: "English", default: true }) : null
2033
+ }
2034
+ );
2035
+ const unmuteBadge = hoverMutedFallback && !hideMutedBadge ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2036
+ "button",
2037
+ {
2038
+ type: "button",
2039
+ "aria-label": "Unmute",
2040
+ title: "Unmute",
2041
+ onClick: unmuteNow,
2042
+ className: "absolute inset-0 z-10 m-auto flex h-14 w-14 items-center justify-center text-ods-text-primary transition-colors hover:text-ods-accent",
2043
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoUnmuteGlyph, {})
2044
+ }
2045
+ ) : null;
2046
+ if (playOnHover && !hoverControlled) {
2047
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative h-full w-full", onPointerEnter: handleHoverEnter, onPointerLeave: handleHoverLeave, children: [
2048
+ player,
2049
+ unmuteBadge,
2050
+ errorOverlay
2051
+ ] });
2052
+ }
2053
+ if (hoverControlled || autoPlayUnmuted || startMuted || monitorHealth) {
2054
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative h-full w-full", children: [
2055
+ player,
2056
+ unmuteBadge,
2057
+ errorOverlay
2058
+ ] });
2059
+ }
2060
+ return player;
2061
+ }
2062
+ function YouTubeFacade({
2063
+ url,
2064
+ title = "YouTube Video",
2065
+ priority,
2066
+ className,
2067
+ minimalControls,
2068
+ muted,
2069
+ // `...facade` rather than naming each one: this hop is invisible to the
2070
+ // build-time forwarding proof, so a prop added to VideoYouTubeFacadeProps
2071
+ // would reach here and silently stop before Inner.
2072
+ ...facade
2073
+ }) {
2074
+ const videoId = extractYouTubeId(url);
2075
+ if (!videoId) return null;
2076
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2077
+ YouTubeFacadeInner,
2078
+ {
2079
+ videoId,
2080
+ title,
2081
+ priority,
2082
+ className,
2083
+ minimalControls,
2084
+ muted,
2085
+ ...facade
2086
+ }
2087
+ );
2088
+ }
2089
+ var YT_NOCOOKIE_ORIGIN = "https://www.youtube-nocookie.com";
2090
+ var YT_POSTER_TIERS = ["maxresdefault", "mqdefault"];
2091
+ var YT_STATE_ENDED = 0;
2092
+ var YT_STATE_PLAYING = 1;
2093
+ var YT_PLAYING_BLUR_DELAY_MS = 1e3;
2094
+ function toYouTubeMessage(parsed) {
2095
+ if (typeof parsed !== "object" || parsed === null) return null;
2096
+ const event = "event" in parsed ? parsed.event : void 0;
2097
+ const info = "info" in parsed ? parsed.info : void 0;
2098
+ const playerState = typeof info === "object" && info !== null && "playerState" in info ? info.playerState : void 0;
2099
+ return {
2100
+ event: typeof event === "string" ? event : void 0,
2101
+ info: { playerState: typeof playerState === "number" ? playerState : void 0 },
2102
+ errorCode: typeof info === "number" ? info : void 0
2103
+ };
2104
+ }
2105
+ function YouTubeFacadeInner({
2106
+ videoId,
2107
+ title,
2108
+ priority,
2109
+ className,
2110
+ minimalControls,
2111
+ muted,
2112
+ autoActivate,
2113
+ suspended
2114
+ }) {
2115
+ const [activated, setActivated] = _react3.useState.call(void 0, Boolean(autoActivate));
2116
+ const [prevAutoActivate, setPrevAutoActivate] = _react3.useState.call(void 0, Boolean(autoActivate));
2117
+ if (Boolean(autoActivate) !== prevAutoActivate) {
2118
+ setPrevAutoActivate(Boolean(autoActivate));
2119
+ if (autoActivate) setActivated(true);
2120
+ }
2121
+ const [failed, setFailed] = _react3.useState.call(void 0, false);
2122
+ const [reloadNonce, setReloadNonce] = _react3.useState.call(void 0, 0);
2123
+ const iframeRef = _react3.useRef.call(void 0, null);
2124
+ const retry = _react3.useCallback.call(void 0, () => {
2125
+ setFailed(false);
2126
+ setReloadNonce((n) => n + 1);
2127
+ }, []);
2128
+ const embedUrl = _react3.useMemo.call(void 0, () => {
2129
+ const params = new URLSearchParams({
2130
+ autoplay: "1",
2131
+ rel: "0",
2132
+ modestbranding: "1",
2133
+ playsinline: "1",
2134
+ enablejsapi: "1"
2135
+ });
2136
+ if (muted) params.set("mute", "1");
2137
+ if (typeof window !== "undefined") {
2138
+ params.set("origin", window.location.origin);
2139
+ }
2140
+ if (minimalControls) {
2141
+ params.set("controls", "0");
2142
+ params.set("fs", "0");
2143
+ params.set("iv_load_policy", "3");
2144
+ params.set("cc_load_policy", "0");
2145
+ params.set("disablekb", "1");
2146
+ }
2147
+ return `${YT_NOCOOKIE_ORIGIN}/embed/${videoId}?${params.toString()}`;
2148
+ }, [videoId, minimalControls, muted]);
2149
+ const [posterTier, setPosterTier] = _react3.useState.call(void 0, 0);
2150
+ const [posterTierFor, setPosterTierFor] = _react3.useState.call(void 0, videoId);
2151
+ if (posterTierFor !== videoId) {
2152
+ setPosterTierFor(videoId);
2153
+ setPosterTier(0);
2154
+ }
2155
+ const posterQuality = YT_POSTER_TIERS[posterTier];
2156
+ const posterJpg = `https://i.ytimg.com/vi/${videoId}/${posterQuality}.jpg`;
2157
+ const posterWebp = `https://i.ytimg.com/vi_webp/${videoId}/${posterQuality}.webp`;
2158
+ const handlePosterError = () => setPosterTier((tier) => Math.min(tier + 1, YT_POSTER_TIERS.length - 1));
2159
+ _react3.useEffect.call(void 0, () => {
2160
+ if (!activated || failed) return void 0;
2161
+ const iframe = iframeRef.current;
2162
+ if (!iframe) return void 0;
2163
+ function subscribe() {
2164
+ _optionalChain([iframe, 'optionalAccess', _103 => _103.contentWindow, 'optionalAccess', _104 => _104.postMessage, 'call', _105 => _105('{"event":"listening"}', YT_NOCOOKIE_ORIGIN)]);
2165
+ }
2166
+ iframe.addEventListener("load", subscribe);
2167
+ subscribe();
2168
+ let blurTimer = null;
2169
+ function handleMessage(event) {
2170
+ if (event.origin !== YT_NOCOOKIE_ORIGIN) return;
2171
+ if (typeof event.data !== "string") return;
2172
+ let payload = null;
2173
+ try {
2174
+ payload = toYouTubeMessage(JSON.parse(event.data));
2175
+ } catch (e33) {
2176
+ return;
2177
+ }
2178
+ if (!payload) return;
2179
+ if (payload.event === "onError") {
2180
+ setFailed(true);
2181
+ reportPlaybackFailure({ kind: "youtube", src: videoId, reason: "error", errorCode: payload.errorCode });
2182
+ return;
2183
+ }
2184
+ if (payload.event !== "infoDelivery") return;
2185
+ const state = _optionalChain([payload, 'access', _106 => _106.info, 'optionalAccess', _107 => _107.playerState]);
2186
+ if (typeof state !== "number") return;
2187
+ if (state === YT_STATE_PLAYING) {
2188
+ if (blurTimer !== null) return;
2189
+ blurTimer = setTimeout(() => {
2190
+ blurTimer = null;
2191
+ _optionalChain([iframeRef, 'access', _108 => _108.current, 'optionalAccess', _109 => _109.blur, 'call', _110 => _110()]);
2192
+ }, YT_PLAYING_BLUR_DELAY_MS);
2193
+ return;
2194
+ }
2195
+ if (state === YT_STATE_ENDED) {
2196
+ setActivated(false);
2197
+ }
2198
+ }
2199
+ window.addEventListener("message", handleMessage);
2200
+ return () => {
2201
+ iframe.removeEventListener("load", subscribe);
2202
+ window.removeEventListener("message", handleMessage);
2203
+ if (blurTimer !== null) clearTimeout(blurTimer);
2204
+ };
2205
+ }, [activated, failed, reloadNonce, videoId]);
2206
+ const prevSuspendedRef = _react3.useRef.call(void 0, false);
2207
+ _react3.useEffect.call(void 0, () => {
2208
+ const wasSuspended = prevSuspendedRef.current;
2209
+ prevSuspendedRef.current = Boolean(suspended);
2210
+ if (!activated || Boolean(suspended) === wasSuspended) return;
2211
+ _optionalChain([iframeRef, 'access', _111 => _111.current, 'optionalAccess', _112 => _112.contentWindow, 'optionalAccess', _113 => _113.postMessage, 'call', _114 => _114(
2212
+ `{"event":"command","func":"${suspended ? "pauseVideo" : "playVideo"}","args":[]}`,
2213
+ YT_NOCOOKIE_ORIGIN
2214
+ )]);
2215
+ }, [suspended, activated]);
2216
+ const wrapperClass = `relative w-full ${_nullishCoalesce(className, () => ( ""))}`;
2217
+ const wrapperStyle = { paddingBottom: "56.25%" };
2218
+ if (activated && failed) {
2219
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoErrorOverlay, { onRetry: retry, watchOnYouTubeId: videoId }) });
2220
+ }
2221
+ if (activated) {
2222
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2223
+ "iframe",
2224
+ {
2225
+ ref: iframeRef,
2226
+ src: embedUrl,
2227
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
2228
+ allowFullScreen: true,
2229
+ referrerPolicy: "strict-origin-when-cross-origin",
2230
+ title,
2231
+ className: "absolute inset-0 h-full w-full rounded-lg border-0"
2232
+ },
2233
+ reloadNonce
2234
+ ) });
2235
+ }
2236
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2237
+ "button",
2238
+ {
2239
+ type: "button",
2240
+ "aria-label": `Play: ${title}`,
2241
+ onClick: () => setActivated(true),
2242
+ className: "group absolute inset-0 m-0 cursor-pointer overflow-hidden rounded-lg border border-ods-border bg-ods-card p-0",
2243
+ children: [
2244
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "picture", { children: [
2245
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { type: "image/webp", srcSet: posterWebp }),
2246
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2247
+ "img",
2248
+ {
2249
+ src: posterJpg,
2250
+ alt: title,
2251
+ loading: "lazy",
2252
+ onError: handlePosterError,
2253
+ ...fetchPriorityProp(priority),
2254
+ decoding: priority ? "sync" : "async",
2255
+ className: "absolute inset-0 h-full w-full object-cover"
2256
+ }
2257
+ )
2258
+ ] }),
2259
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center bg-ods-bg bg-opacity-20 transition-opacity duration-200 group-hover:bg-opacity-30", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2260
+ VideoPlayBadge,
2261
+ {
2262
+ size: "lg",
2263
+ className: "transition-transform duration-200 group-hover:scale-110 group-hover:text-ods-accent"
2264
+ }
2265
+ ) })
2266
+ ]
2267
+ }
2268
+ ) });
2269
+ }
2270
+
1229
2271
  // src/components/ui/status-badge.tsx
1230
2272
 
1231
2273
 
@@ -1357,8 +2399,8 @@ function DepartmentBadge({
1357
2399
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1358
2400
  PaletteBadge,
1359
2401
  {
1360
- text: _optionalChain([department, 'optionalAccess', _17 => _17.name]) || emptyLabel,
1361
- color: _optionalChain([department, 'optionalAccess', _18 => _18.name]) ? department.color : null,
2402
+ text: _optionalChain([department, 'optionalAccess', _115 => _115.name]) || emptyLabel,
2403
+ color: _optionalChain([department, 'optionalAccess', _116 => _116.name]) ? department.color : null,
1362
2404
  className,
1363
2405
  variant
1364
2406
  }
@@ -1441,12 +2483,536 @@ function AvatarStack({
1441
2483
  );
1442
2484
  }
1443
2485
 
2486
+ // src/components/chat/utils/icon-registry.ts
2487
+
2488
+
2489
+
2490
+
2491
+
2492
+
2493
+
2494
+
2495
+
2496
+
2497
+
2498
+
2499
+
2500
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+ var OpenFrameLogoIcon = ({ className }) => _react3.createElement.call(void 0, _chunkLLSUVPQCcjs.OpenFrameLogo, { className, upperPathColor: "currentColor" });
2527
+ var ICON_REGISTRY = {
2528
+ // lucide-react (kebab-case)
2529
+ activity: _lucidereact.Activity,
2530
+ banknote: _lucidereact.Banknote,
2531
+ bell: _lucidereact.Bell,
2532
+ "book-open": _lucidereact.BookOpen,
2533
+ box: _lucidereact.Box,
2534
+ briefcase: _lucidereact.Briefcase,
2535
+ calendar: _lucidereact.Calendar,
2536
+ "check-square": _lucidereact.CheckSquare,
2537
+ "dollar-sign": _lucidereact.DollarSign,
2538
+ // For brand-vs-lucide variants the kebab key is the BRAND (most-common
2539
+ // social-platform intent); `'<name>-lucide'` carries the lucide outline.
2540
+ facebook: _chunkLLSUVPQCcjs.FacebookIcon,
2541
+ "facebook-lucide": _lucidereact.Facebook,
2542
+ "file-text": _lucidereact.FileText,
2543
+ // `'github-lucide'` is the lucide outline glyph (used by
2544
+ // `social_platforms.icon_name='Github'`); `'github'` is the brand icon
2545
+ // (used by `chat_admin_slash_commands.icon_name='github'`). The PascalCase
2546
+ // alias `'Github' → 'github-lucide'` routes the lucide glyph for
2547
+ // social-platform DB rows; `'GitHubIcon' → 'github'` keeps brand routing
2548
+ // consistent for callers that store the PascalCase component name.
2549
+ github: _chunkLLSUVPQCcjs.GitHubIcon,
2550
+ "github-lucide": _lucidereact.Github,
2551
+ globe: _lucidereact.Globe,
2552
+ "graduation-cap": _lucidereact.GraduationCap,
2553
+ headphones: _lucidereact.Headphones,
2554
+ info: _lucidereact.Info,
2555
+ instagram: _chunkLLSUVPQCcjs.InstagramIcon,
2556
+ "instagram-lucide": _lucidereact.Instagram,
2557
+ mail: _lucidereact.Mail,
2558
+ megaphone: _lucidereact.Megaphone,
2559
+ "message-circle": _lucidereact.MessageCircle,
2560
+ "message-square": _lucidereact.MessageSquare,
2561
+ newspaper: _lucidereact.Newspaper,
2562
+ package: _lucidereact.Package,
2563
+ "pen-square": _lucidereact.PenSquare,
2564
+ phone: _lucidereact.Phone,
2565
+ rocket: _lucidereact.Rocket,
2566
+ search: _lucidereact.Search,
2567
+ send: _lucidereact.Send,
2568
+ shield: _lucidereact.Shield,
2569
+ star: _lucidereact.Star,
2570
+ table: _lucidereact.TableProperties,
2571
+ "trending-up": _lucidereact.TrendingUp,
2572
+ twitter: _lucidereact.Twitter,
2573
+ users: _lucidereact.Users,
2574
+ video: _lucidereact.Video,
2575
+ whatsapp: _chunkLLSUVPQCcjs.WhatsAppIcon,
2576
+ youtube: _chunkLLSUVPQCcjs.YouTubeIcon,
2577
+ "youtube-lucide": _lucidereact.Youtube,
2578
+ // brand-only icons (no lucide variant in current use)
2579
+ slack: _chunkLLSUVPQCcjs.SlackIcon,
2580
+ clickup: _chunkLLSUVPQCcjs.ClickUpIcon,
2581
+ hubspot: _chunkLLSUVPQCcjs.HubspotIcon,
2582
+ linkedin: _chunkLLSUVPQCcjs.LinkedInIcon,
2583
+ x: _chunkLLSUVPQCcjs.XLogo,
2584
+ openframe: OpenFrameLogoIcon
2585
+ };
2586
+ var PASCAL_TO_KEBAB_ALIASES = {
2587
+ // Lucide PascalCase names → kebab equivalents
2588
+ Activity: "activity",
2589
+ Banknote: "banknote",
2590
+ Bell: "bell",
2591
+ BookOpen: "book-open",
2592
+ Box: "box",
2593
+ Briefcase: "briefcase",
2594
+ Calendar: "calendar",
2595
+ CheckSquare: "check-square",
2596
+ DollarSign: "dollar-sign",
2597
+ // Lucide PascalCase → the `-lucide` kebab variant (kebab default is the
2598
+ // brand icon for the social-platform names below).
2599
+ Facebook: "facebook-lucide",
2600
+ FileText: "file-text",
2601
+ Github: "github-lucide",
2602
+ Globe: "globe",
2603
+ GraduationCap: "graduation-cap",
2604
+ Headphones: "headphones",
2605
+ Info: "info",
2606
+ Instagram: "instagram-lucide",
2607
+ Mail: "mail",
2608
+ Megaphone: "megaphone",
2609
+ MessageCircle: "message-circle",
2610
+ MessageSquare: "message-square",
2611
+ Newspaper: "newspaper",
2612
+ Package: "package",
2613
+ PenSquare: "pen-square",
2614
+ Phone: "phone",
2615
+ Rocket: "rocket",
2616
+ Search: "search",
2617
+ Send: "send",
2618
+ Shield: "shield",
2619
+ Star: "star",
2620
+ TableProperties: "table",
2621
+ TrendingUp: "trending-up",
2622
+ Twitter: "twitter",
2623
+ Users: "users",
2624
+ Video: "video",
2625
+ Youtube: "youtube-lucide",
2626
+ // Brand-icon PascalCase exports → kebab (kebab default is the brand)
2627
+ SlackIcon: "slack",
2628
+ GitHubIcon: "github",
2629
+ ClickUpIcon: "clickup",
2630
+ HubspotIcon: "hubspot",
2631
+ LinkedInIcon: "linkedin",
2632
+ FacebookIcon: "facebook",
2633
+ InstagramIcon: "instagram",
2634
+ YouTubeIcon: "youtube",
2635
+ WhatsAppIcon: "whatsapp",
2636
+ XLogo: "x",
2637
+ OpenFrameLogo: "openframe"
2638
+ };
2639
+ function normalizeIconKey(key) {
2640
+ return _nullishCoalesce(PASCAL_TO_KEBAB_ALIASES[key], () => ( key));
2641
+ }
2642
+ function getIconComponent(iconName) {
2643
+ if (!iconName) return _lucidereact.FileText;
2644
+ return _nullishCoalesce(ICON_REGISTRY[normalizeIconKey(iconName)], () => ( _lucidereact.FileText));
2645
+ }
2646
+ var SIZE_CLASSES = {
2647
+ xs: "w-3 h-3",
2648
+ // 12px
2649
+ sm: "w-4 h-4",
2650
+ // 16px
2651
+ md: "w-6 h-6",
2652
+ // 24px
2653
+ lg: "w-8 h-8",
2654
+ // 32px
2655
+ xl: "w-12 h-12"
2656
+ // 48px
2657
+ };
2658
+ var ICON_COLORS = {
2659
+ linkedin: { color: "#0A66C2" },
2660
+ facebook: { color: "#1877F2" },
2661
+ youtube: { color: "#FF0000" }
2662
+ };
2663
+ function getDynamicIcon(iconName, size2 = "md", className) {
2664
+ if (!iconName) {
2665
+ console.warn("[getDynamicIcon] No iconName provided, using Globe fallback");
2666
+ return _react3.createElement.call(void 0, _lucidereact.Globe, { className: SIZE_CLASSES[size2] });
2667
+ }
2668
+ const sizeClass = SIZE_CLASSES[size2];
2669
+ const finalClassName = className ? `${sizeClass} ${className}` : sizeClass;
2670
+ const canonicalKey = normalizeIconKey(iconName);
2671
+ const IconComponent = ICON_REGISTRY[canonicalKey];
2672
+ if (IconComponent) {
2673
+ const colorConfig = ICON_COLORS[canonicalKey] || {};
2674
+ return _react3.createElement.call(void 0, IconComponent, { className: finalClassName, ...colorConfig });
2675
+ }
2676
+ console.error(
2677
+ `[getDynamicIcon] Icon NOT found in registry: "${iconName}" (normalized to "${canonicalKey}"). Available icons:`,
2678
+ Object.keys(ICON_REGISTRY)
2679
+ );
2680
+ return _react3.createElement.call(void 0, _lucidereact.Globe, { className: finalClassName });
2681
+ }
2682
+
2683
+ // src/components/chat/utils/icon-library.tsx
2684
+
2685
+
2686
+ function sizedLogo(Logo) {
2687
+ return function SizedLogo({ size: size2 = 16, className }) {
2688
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Logo, { className, style: { width: size2, height: size2 } });
2689
+ };
2690
+ }
2691
+ var brandColor = (platform) => `var(${_chunkLM7TXMLUcjs.platformAccentVarName.call(void 0, platform)})`;
2692
+ var OpenmspLogoIcon = ({ size: size2 = 16, className }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2693
+ _chunkLLSUVPQCcjs.OpenmspLogo,
2694
+ {
2695
+ className,
2696
+ style: { width: size2, height: size2 },
2697
+ frontBubbleColor: "var(--color-text-primary)",
2698
+ innerFrontBubbleColor: "var(--color-bg)",
2699
+ backBubbleColor: brandColor("openmsp")
2700
+ }
2701
+ );
2702
+ var FlamingoLogoIcon = sizedLogo(_chunkLLSUVPQCcjs.FlamingoLogo);
2703
+ var MlgLogoIcon = ({ size: size2 = 16, className, color }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.MlgLogo, { size: size2, className, color: _nullishCoalesce(color, () => ( "var(--color-text-primary)")) });
2704
+ var TmcgLogoIcon = ({ size: size2 = 16, className }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2705
+ _chunkLLSUVPQCcjs.MiamiCyberGangLogoFaceOnly,
2706
+ {
2707
+ size: size2,
2708
+ className,
2709
+ originalPink: brandColor("tmcg"),
2710
+ originalWhite: "var(--color-text-primary)"
2711
+ }
2712
+ );
2713
+ function LogoOpenframeIcon({ size: size2 = 16, className, color }) {
2714
+ const tint = _nullishCoalesce(color, () => ( "currentColor"));
2715
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2716
+ _chunkLLSUVPQCcjs.OpenFrameLogo,
2717
+ {
2718
+ className,
2719
+ lowerPathColor: tint,
2720
+ upperPathColor: tint,
2721
+ style: { width: size2, height: size2 }
2722
+ }
2723
+ );
2724
+ }
2725
+ var ICON_ALIASES = {
2726
+ // Production `/api/docs/commands` keys (multi-platform-hub contract)
2727
+ clickup: _chunkVX4E6YSBcjs.ClickupLogoGreyIcon,
2728
+ slack: _chunkVX4E6YSBcjs.SlackLogoGreyIcon,
2729
+ hubspot: _chunkVX4E6YSBcjs.HubspotLogoGreyIcon,
2730
+ github: _chunkVX4E6YSBcjs.GithubIcon,
2731
+ openframe: LogoOpenframeIcon,
2732
+ newspaper: _chunkVX4E6YSBcjs.NewspaperIcon,
2733
+ rocket: _chunkVX4E6YSBcjs.Rocket02Icon,
2734
+ briefcase: _chunkVX4E6YSBcjs.BriefcaseIcon,
2735
+ "graduation-cap": _chunkVX4E6YSBcjs.GraduationCapIcon,
2736
+ video: _chunkVX4E6YSBcjs.VideoRecorderIcon,
2737
+ headphones: _chunkVX4E6YSBcjs.HeadphoneIcon,
2738
+ calendar: _chunkVX4E6YSBcjs.CalendarIcon,
2739
+ compass: _chunkVX4E6YSBcjs.CompassIcon,
2740
+ // Figma-canonical aliases (node 7363:205938) — kept for Storybook
2741
+ // fixtures and any older feed entries still using the long names.
2742
+ "clickup-logo": _chunkVX4E6YSBcjs.ClickupLogoGreyIcon,
2743
+ "clickup-logo-grey": _chunkVX4E6YSBcjs.ClickupLogoGreyIcon,
2744
+ "slack-logo": _chunkVX4E6YSBcjs.SlackLogoGreyIcon,
2745
+ "slack-logo-grey": _chunkVX4E6YSBcjs.SlackLogoGreyIcon,
2746
+ "hubspot-logo": _chunkVX4E6YSBcjs.HubspotLogoGreyIcon,
2747
+ "hubspot-logo-grey": _chunkVX4E6YSBcjs.HubspotLogoGreyIcon,
2748
+ "github-logo": _chunkVX4E6YSBcjs.GithubIcon,
2749
+ "logo-openframe": LogoOpenframeIcon,
2750
+ "rocket-01": _chunkVX4E6YSBcjs.Rocket02Icon,
2751
+ "rocket-02": _chunkVX4E6YSBcjs.Rocket02Icon,
2752
+ // Announcement-bar legacy names — folded in so resolveIcon covers them too
2753
+ // (was the separate `renderSvgIcon` map; now ONE resolver everywhere).
2754
+ "openframe-logo": LogoOpenframeIcon,
2755
+ "openmsp-logo": OpenmspLogoIcon,
2756
+ "mlg-logo": MlgLogoIcon,
2757
+ "tmcg-logo": TmcgLogoIcon,
2758
+ flamingo: FlamingoLogoIcon,
2759
+ "flamingo-logo": FlamingoLogoIcon,
2760
+ megaphone: _lucidereact.Megaphone,
2761
+ bell: _lucidereact.Bell,
2762
+ info: _lucidereact.Info,
2763
+ star: _lucidereact.Star,
2764
+ package: _lucidereact.Package,
2765
+ // Generic v2-native keys — useful fall-throughs for slash commands that
2766
+ // don't have a brand-specific glyph in the design.
2767
+ search: _chunk4GFNWALLcjs.SearchIcon,
2768
+ ticket: _chunkVX4E6YSBcjs.TicketIcon,
2769
+ book: _chunkVX4E6YSBcjs.BookIcon,
2770
+ "book-open": _chunkVX4E6YSBcjs.BookIcon,
2771
+ bug: _chunkVX4E6YSBcjs.BugIcon,
2772
+ layers: _chunkVX4E6YSBcjs.LayersIcon,
2773
+ file: _chunkVX4E6YSBcjs.FileIcon,
2774
+ "file-text": _chunkVX4E6YSBcjs.FileIcon,
2775
+ chats: _chunkVX4E6YSBcjs.ChatsIcon,
2776
+ "message-square": _chunkVX4E6YSBcjs.ChatsIcon,
2777
+ "message-circle": _chunkVX4E6YSBcjs.ChatsIcon,
2778
+ "bracket-curly": _chunkVX4E6YSBcjs.BracketCurlyIcon
2779
+ };
2780
+ function resolveFromLibrary(iconName) {
2781
+ const tokens = iconName.trim().toLowerCase().replace(/_/g, "-").split("-");
2782
+ if (tokens.some((t) => t.length === 0)) return void 0;
2783
+ const cap = (t) => t.charAt(0).toUpperCase() + t.slice(1);
2784
+ const candidates = [
2785
+ `${tokens.map(cap).join("")}Icon`,
2786
+ `${tokens.map((t) => t === "ai" ? "AI" : cap(t)).join("")}Icon`
2787
+ ];
2788
+ const registry = _chunkVX4E6YSBcjs.icons_v2_generated_exports;
2789
+ for (const name of candidates) {
2790
+ const Icon = registry[name];
2791
+ if (Icon) return Icon;
2792
+ }
2793
+ return void 0;
2794
+ }
2795
+ function brandLogoForName(name) {
2796
+ const words = (_nullishCoalesce(name, () => ( ""))).split(/[^A-Za-z0-9]+/).filter(Boolean);
2797
+ const pascal = (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
2798
+ const registry = _chunkVX4E6YSBcjs.icons_v2_generated_exports;
2799
+ for (let length = Math.min(3, words.length); length >= 1; length -= 1) {
2800
+ for (let start = 0; start + length <= words.length; start += 1) {
2801
+ const Logo = registry[`${words.slice(start, start + length).map(pascal).join("")}LogoIcon`];
2802
+ if (Logo) return Logo;
2803
+ }
2804
+ }
2805
+ return null;
2806
+ }
2807
+ function resolveIcon(iconName, opts) {
2808
+ if (_optionalChain([opts, 'optionalAccess', _117 => _117.variant]) === "brand") {
2809
+ return getIconComponent(iconName);
2810
+ }
2811
+ if (!iconName) return _chunkVX4E6YSBcjs.FileIcon;
2812
+ return _nullishCoalesce(_nullishCoalesce(ICON_ALIASES[iconName], () => ( resolveFromLibrary(iconName))), () => ( _chunkVX4E6YSBcjs.FileIcon));
2813
+ }
2814
+ var ICON_OPTIONS = [
2815
+ // Brands
2816
+ { key: "openframe", label: "OpenFrame" },
2817
+ { key: "slack", label: "Slack" },
2818
+ { key: "hubspot", label: "HubSpot" },
2819
+ { key: "clickup", label: "ClickUp" },
2820
+ { key: "github", label: "GitHub" },
2821
+ { key: "linkedin", label: "LinkedIn" },
2822
+ { key: "twitter", label: "Twitter (X)" },
2823
+ { key: "twitter-x", label: "X" },
2824
+ { key: "facebook", label: "Facebook" },
2825
+ { key: "instagram", label: "Instagram" },
2826
+ { key: "youtube", label: "YouTube" },
2827
+ { key: "discord", label: "Discord" },
2828
+ { key: "figma", label: "Figma" },
2829
+ { key: "google", label: "Google" },
2830
+ { key: "apple", label: "Apple" },
2831
+ { key: "windows", label: "Windows" },
2832
+ { key: "android", label: "Android" },
2833
+ { key: "openai-logo", label: "OpenAI" },
2834
+ { key: "anthropic-logo", label: "Anthropic" },
2835
+ // Content & docs
2836
+ { key: "newspaper", label: "Newspaper" },
2837
+ { key: "book", label: "Book" },
2838
+ { key: "file", label: "File" },
2839
+ { key: "file-text", label: "Document" },
2840
+ { key: "file-code", label: "Code file" },
2841
+ { key: "file-chart-bar", label: "Report" },
2842
+ { key: "file-dollar", label: "Invoice file" },
2843
+ { key: "folder", label: "Folder" },
2844
+ { key: "folder-open", label: "Folder open" },
2845
+ { key: "clipboard", label: "Clipboard" },
2846
+ { key: "clipboard-list", label: "Checklist" },
2847
+ { key: "clipboard-check", label: "Clipboard check" },
2848
+ { key: "memo", label: "Memo" },
2849
+ { key: "paperclip", label: "Attachment" },
2850
+ { key: "copy-01", label: "Copy" },
2851
+ { key: "files", label: "Files" },
2852
+ { key: "box-archive", label: "Box" },
2853
+ { key: "parcel-01", label: "Parcel" },
2854
+ // Media
2855
+ { key: "video", label: "Video" },
2856
+ { key: "headphones", label: "Podcast / audio" },
2857
+ { key: "podcast", label: "Podcast" },
2858
+ { key: "mic", label: "Microphone" },
2859
+ { key: "music-note-01", label: "Music" },
2860
+ { key: "camera", label: "Camera" },
2861
+ { key: "image", label: "Image" },
2862
+ { key: "film-hr", label: "Film" },
2863
+ { key: "play", label: "Play" },
2864
+ // Date & time
2865
+ { key: "calendar", label: "Calendar" },
2866
+ { key: "calendar-check", label: "Calendar check" },
2867
+ { key: "clock", label: "Clock" },
2868
+ { key: "alarm", label: "Alarm" },
2869
+ { key: "stopwatch", label: "Stopwatch" },
2870
+ { key: "timer", label: "Timer" },
2871
+ { key: "hourglass", label: "Hourglass" },
2872
+ // Places & business
2873
+ { key: "briefcase", label: "Briefcase" },
2874
+ { key: "graduation-cap", label: "Education" },
2875
+ { key: "building", label: "Building" },
2876
+ { key: "buildings", label: "Buildings" },
2877
+ { key: "hospital", label: "Hospital" },
2878
+ { key: "school", label: "School" },
2879
+ { key: "warehouse", label: "Warehouse" },
2880
+ { key: "shop", label: "Shop" },
2881
+ // Communication
2882
+ { key: "search", label: "Search" },
2883
+ { key: "chats", label: "Chat" },
2884
+ { key: "message-text", label: "Message" },
2885
+ { key: "messages", label: "Messages" },
2886
+ { key: "email", label: "Email" },
2887
+ { key: "inbox", label: "Inbox" },
2888
+ { key: "send-01", label: "Send" },
2889
+ { key: "at-sign", label: "Mention" },
2890
+ { key: "bell", label: "Notifications" },
2891
+ { key: "megaphone-01", label: "Announcement" },
2892
+ // Charts & analytics
2893
+ { key: "chart-pie", label: "Pie chart" },
2894
+ { key: "chart-donut", label: "Donut chart" },
2895
+ { key: "chart-bar-01-ver", label: "Bar chart" },
2896
+ { key: "chart-line-up", label: "Line chart" },
2897
+ { key: "trend-up", label: "Trend up" },
2898
+ { key: "trend-down", label: "Trend down" },
2899
+ { key: "presentation", label: "Presentation" },
2900
+ { key: "analysis", label: "Analysis" },
2901
+ { key: "activity", label: "Activity" },
2902
+ { key: "network", label: "Network" },
2903
+ // Finance
2904
+ { key: "bank", label: "Bank" },
2905
+ { key: "money-bill-dollar", label: "Money" },
2906
+ { key: "money-bill", label: "Bill" },
2907
+ { key: "coins", label: "Coins" },
2908
+ { key: "coin", label: "Coin" },
2909
+ { key: "coins-exchange-currency", label: "Currency exchange" },
2910
+ { key: "piggy-bank", label: "Savings" },
2911
+ { key: "wallet-01", label: "Wallet" },
2912
+ { key: "credit-card", label: "Credit card" },
2913
+ { key: "hand-coin", label: "Hand coin" },
2914
+ { key: "dollar", label: "Dollar" },
2915
+ { key: "dollar-circle", label: "Dollar circle" },
2916
+ { key: "euro", label: "Euro" },
2917
+ { key: "bitcoin", label: "Bitcoin" },
2918
+ { key: "percent", label: "Percent" },
2919
+ { key: "receipt-01", label: "Receipt" },
2920
+ { key: "badge-dollar", label: "Price badge" },
2921
+ { key: "sack", label: "Money sack" },
2922
+ // Security
2923
+ { key: "shield", label: "Shield" },
2924
+ { key: "shield-check", label: "Shield check" },
2925
+ { key: "lock", label: "Lock" },
2926
+ { key: "unlock", label: "Unlock" },
2927
+ { key: "key", label: "Key" },
2928
+ { key: "fingerprint", label: "Fingerprint" },
2929
+ { key: "scan", label: "Scan" },
2930
+ // People
2931
+ { key: "user", label: "User" },
2932
+ { key: "users", label: "Users" },
2933
+ { key: "users-group", label: "User group" },
2934
+ { key: "user-check", label: "User check" },
2935
+ { key: "id-card", label: "ID card" },
2936
+ { key: "avatar-circle", label: "Avatar" },
2937
+ // Devices & infra
2938
+ { key: "laptop", label: "Laptop" },
2939
+ { key: "monitor", label: "Monitor" },
2940
+ { key: "mobile-phone", label: "Phone" },
2941
+ { key: "hard-drive", label: "Hard drive" },
2942
+ { key: "hard-drives", label: "Storage" },
2943
+ { key: "cloud", label: "Cloud" },
2944
+ { key: "wifi", label: "Wi-Fi" },
2945
+ { key: "printer", label: "Printer" },
2946
+ { key: "keyboard", label: "Keyboard" },
2947
+ { key: "microchip", label: "Chip" },
2948
+ { key: "microchip-ai", label: "AI chip" },
2949
+ { key: "power", label: "Power" },
2950
+ // Code & dev
2951
+ { key: "bracket-curly", label: "Code" },
2952
+ { key: "terminal", label: "Terminal" },
2953
+ { key: "code", label: "Code block" },
2954
+ { key: "bug", label: "Bug" },
2955
+ { key: "package", label: "Package" },
2956
+ { key: "database", label: "Database" },
2957
+ { key: "browser", label: "Browser" },
2958
+ { key: "puzzle-01", label: "Plugin" },
2959
+ { key: "coding-branch", label: "Branch" },
2960
+ { key: "coding-commit", label: "Commit" },
2961
+ { key: "coding-pull-request", label: "Pull request" },
2962
+ { key: "robot", label: "Bot" },
2963
+ { key: "blockchain", label: "Blockchain" },
2964
+ // General & status
2965
+ { key: "layers", label: "Layers" },
2966
+ { key: "settings-01", label: "Settings" },
2967
+ { key: "home", label: "Home" },
2968
+ { key: "eye", label: "View" },
2969
+ { key: "link-01", label: "Link" },
2970
+ { key: "download-01", label: "Download" },
2971
+ { key: "upload-01", label: "Upload" },
2972
+ { key: "trash", label: "Delete" },
2973
+ { key: "share", label: "Share" },
2974
+ { key: "life-buoy", label: "Support" },
2975
+ { key: "rocket", label: "Rocket" },
2976
+ { key: "compass", label: "Compass" },
2977
+ { key: "star", label: "Star" },
2978
+ { key: "crown", label: "Crown" },
2979
+ { key: "gift", label: "Gift" },
2980
+ { key: "ticket", label: "Ticket" },
2981
+ { key: "tag", label: "Tag" },
2982
+ { key: "cart", label: "Cart" },
2983
+ { key: "thumbs-up", label: "Thumbs up" },
2984
+ { key: "flag-01", label: "Flag" },
2985
+ { key: "bookmark", label: "Bookmark" },
2986
+ { key: "pin", label: "Pin" },
2987
+ { key: "check-circle", label: "Check" },
2988
+ { key: "check-square", label: "Checkbox" },
2989
+ { key: "info-circle", label: "Info" },
2990
+ { key: "info", label: "Info alt" },
2991
+ { key: "question-circle", label: "Help" },
2992
+ { key: "alert-triangle", label: "Warning" },
2993
+ { key: "hash", label: "Hashtag" },
2994
+ { key: "pencil", label: "Edit" },
2995
+ { key: "lightning", label: "Lightning" },
2996
+ { key: "globe-01", label: "Globe" },
2997
+ { key: "scale-balanced", label: "Balance" },
2998
+ { key: "certified-01", label: "Certified" }
2999
+ ];
3000
+
3001
+ // src/assets/fae-avatar.ts
3002
+ var FAE_AVATAR_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAABAAElEQVR4Aey9WZDm13mf93773nvP9EzP0jMDgABIkDApiZLlBbIrSpxcWJVKJJVzIboqqZQrF+Jl7khdpJI72xepcnJjqUolKbEVSbGrbIuUCUsKtdAEQWIfzL73vn37muc5PQ0DJCCCwHSDoPQfNLr76+/7L+f8zrv83uVk4q+Ot0Zg8nNfm+mWuzODceHZSW6ykhvH+YjMzCQmKzGJmUkmM+ObM/7+LsckMjd8OTOZ7PCmHX7cyUTcGGXjZmaUuZHNj2/Uf+NnX/Q9f3UcjADj85fzEGzN8vDZcSaezY0znxlHPPdewHrkIzSJFwHoDb6+zbmfr3fzL2Z+92cE7F+64y8NAAXcfnH0XDYz+dvjyPzcsYHt/UIKUGYymRfHk/i9Rj/3/F8WQP5IA7Dzi/9mZTjO/xKS5jlw4NfH6Xh+nI3fK07yv1v5rZ+58XG68R/kXn/kAJhUa3H4yx9T0L373CEdx7n4tR9FMP5IAPBQvWYyk19mBp9791n8kXn1+Ulm8mtTv/Wzv/qj8EQfawD+J2mX+WLEZOZHYULe7zNkDjzu53OZ3K98nFX0xxKA+7/4leeYgF+aTCZfeL8T9qP8PsbiVz+uQPxYAVDgwcd9CTA996MMqA/6bB9HIH4sANj5xa+tDCfDf/5XwHt/0Pw4AfGHGoDJxisNlXjYeMd/EAGJMf88MPz5zd8nhDoykcXNzmRhE3md/0UWRpuffOfBa/6Nf35+MhlHPpMPT5Ve4/cs//KTHFGTgyngbOnTj/J/HwcgPvqnfkQj2PyFr/4yE/plpuzInQtB4eF37MoYxiiamVasTbZikB9Ed9w1vhbNUYu/DWJcBEmFSRQK5SjVqzHm15n+TNSjxif5bLkb7Uwndvpb0eruRTFXimqUIjMY8v9y5PKFmIxGMT2ajoXBXMwMpzhdPnL8e9RA5Hw3xpnxr/ywes0/dAA8bnX7dvDtT1qxmtvkaz12xjux3lmPdmc3xpNeDPu96HfaMQI4OcA4EnWCFkk3yOWjOjMfp+Yvxcm5U7G6ezfWNu/G/u5mFDLZyA2HMex2o5DP8IXkyxViemYmGlMnolFfjOnhbJztnY7aqBr1cS1Jx6MAIo7Kz/ywecw/VAA8TqmXwJNkXsRu7MWt7IO4mb0T26PN2NxbjR3Bk0VrtnvRaraiB4gEXa1cis6wj0rNxHg0jn0A2R4MgoSDaEzPRqMxFVtb63ymHfViITLDMTIvolooRqWQj1IhF1O1WpRK/C2bjRI/lxuzsVg8F8v583GyuxC1cRWJyN8f/vNeH9kxiS83/u//7Fce2fk+5Il+KAB4HFJPSfd2qaJt1o1e3Im1uJ9ZjWv9a3F772YMup0Y91GzfO1u7kSn149eIRPVajVyAHCrvR8X5xZir9WKrU43NpBseyPACSBPVesxXy8lW+/mzn40ikjGQinygHe6VIzFei2mUdkjADtBHZ86czpyvKfb6UWlPh3F0kxcmn0mVvbPRXlQSCo5h52ovfj2e/+Qc+65bvywSMPch32YD/t5pR5m+m9xnic/7Lne6/NvB58/41HHVmY37owfxIuj78RLnZdiffsu4OtGDnBsb2zH2s5udIfYf7lMDFWjg1Fs9zrxiZMnYwPptoNKHo4msdvvxllAtQoYx2QSrDQq8djcdEwj6TLDUczVyki8atza3o4Rzkcxl4vZ6UbUAfTqxlbksQcXTyyirrcjg4ruZPait5iNyqASxdGBXXh4/48QhDMswC/8z5/673r/2yu//qfvNW7H8fpHJgGPy8M9nLxD4A1wI/ZxMF7NXImXhi/H/v5WtPd3k4wZtDuxsbkdO+1uTHKox2ol2n2lVylavVZcmJuL9f1mrPG+09Va3G63os4IdgDqq3udpFJXqqX4u4+fj9ONWtzhXK3eIBYa9WgPJ7GJDbm514pTi/NxYaoRjUoldpCk5Uo1ScON+2sxc+JE5HLlWD7zyZjbmolTOwuRH+cjOzmQgo8QhAlf3P4/GfTyvzL7EaWDfSQAVOWOxsPfgYF49ihX2dvB58/tSTe2J7vxZ9kXUbnXo9vGwej1IpRuaxvRQ91OcCg6jEoO+2y72cRJaGCPjWMZqXZ/ayc2W52kTtu8dxUp+OmZenx7Yyd2sPX2AeIUku/HTp+Kz52ejxogvct5J9iKs7OzsQv4huNh3Nlv89iT+OS5M3Fqejr29pox5nonTy1Fr9+PMqq82piLuelzsbi7GLObtchhZB5QNwdgfJTj9lGqZEzn4z2a/+Brzw4no28dB/h8MoHn0QxolcxGfHXyR3G58xoe7X5ShyWmdR9gTZB02UwutrHXAjAMsesqtUrUcBzOnVhAvY6QcIXkxWZRteuA7xJqNIvtV8nnos5XA/W6AAD3UdF7PTzfXhfPeCbKnKOPpJtB6tWQehdQwVwg1lq9uImqF5wVP4earqHOhzg5mewkdjoPYmN2M7ZOdmKUR2lmxjHIIMOzw7eeKz3ch/wfY7Qymoy+1vwHv3+kAuHdbvNYAdj8+a/+0mQ0/BawODZuz4feA363cw/iK9k/irXB3cTBNaZn4OVGsfVgVV6ZCSeHHtCh62IKT7cP4OpIsMWpOh5vRBtAre3vxUy+hBKfRIkPzZWLgGUUs+VybCBJl3A0GoVC+nkdaVdCtdZR4xmkahlbD7cZp6MQ1UoZW3I+Wnu7eNt7cYV7mAOEBYDfwyGZnpnmfuS7x9HL96J9ehh7pwcxKI14MaKfA9x8JRL83Wb1A7wmCCejzLd2f+HffvEDfPwDf+TYALj/83/wJQbsVz/wnf4AHzyUekxTrGe34k5xNf4o8+ex1VxFko2jWqtDr+C9bmwkaiSLR1ytNaILv3dyaiba2Hgz9XpUANo0UquLc9Ib9PGCJ1FD0u3wex2wzQDOHLxeAyD2AO8pgDvL6xUk4RpSsIfdVsQLPnvqVOQAZpHP5nOAFnRVoGEuIll3ed9upxMvXb8RJ3ifknjQ7bFI+lFjkWQzo+gVB7F/dhzDaaaLhVIgOVDwjfl6lCB0iHG3/vH+z3/lSz/AcH+otx4LAAVfZMZf/lB3+gN8WIrFydnK7cVWaT/+rPCd2G1vJqqkUK7GLJTH7toDjPtRlHU2cDKamWGUkUCVUhk1WIkKoLq4shL9fkc9Hk1svwLE4BS0yZBoyRRAq/J7LY/NiOc8WyklFVzkHBdmpxNhfWt1LSqzc9FAVRd4/zT2XoP39aFgOoMJnGEdEM7HbquNxz2OVy6/EadWzsdAmga7cXvtXpRn5iJXykdmuhg7T42CgAtC8JCWOQDgowYhF/jycYHwyAG4/wtf+cdHCT6lnYA7/K7U62RwNrK7sVVuxjdKr8bO/oPIApQqDsXJpVOxdetGUqt6t42paQAxAgTdWFlaik6/HVONRszyeq/TiuZuM6noIqpzjvfnAZ12XwngFrK5qBaLgY+C8yHdPEm/t5CQS0jHHSTpgBhxYWoqTp09F1kkYw31W0UtD4iGtJF0yycX4/zJOfjFDup8HLfv3I6TvHeELVpEdXd31qMAlZMHwBCLsfcZ1DR1ekrC5BljTGvlflxBeKQA3PuFr/5zxubIbApB56FE8Gf/dbLEbTlgLuKVxnX4vFu4tNCd2GB11evGagxxQMqAtoIE2oFK6QOoabi6GtKpjqosIOWUWk0chwqgExiYhjELCAeo2hM4ClUciwbfiwBR4CkJs4CiipotIz0X5mf5DFJ4bycaC4tQOmXUcT7mTy7hmCzgYbejSZQlC8hOYmsqiSfc5zZmwd7OdnrfBAk9QD23H9yDL5xEEZJ7OIuz8kw+RlUiMVnKqwAgZmGyDf32SA8kITytc3hkx5EBULXL2vzCUd25YHPoD1b+gT3ktQpjAv081Xemr8fdjauJVkH8Ielmkr03wPAvCLiZWYhhJhXbb8D3s4uQwQCuNNOIecDjpFLfi98wIg7cjyrgmGugSgGaHu8Ujoc2XY4vExiotksSS2a/iGTkV1R2Pu49WAN8eL9I30Ukm+ecm56KxbmZFEPewgteXDoRnzp7Kq7dvpuAd/W11xIPWUX9ArMYdVHRu1vgfBBFeMbxqVK0nyzEqOJNep/8j+uNXSWP+GCcv9BUix3RcSQAPA6bL4HPUXfg+ZcDdf7r5yCFa7fi8t7ryTHoEVqbQ+JMAZ4BMdoeAKxji+VQnWOAcv3evTi9MI/XyUQzjw2kUQm65f79OwlQgqiKFJxGqqluSwCuAfimkWiCLwESiQmmARyA5HsZSViv1JB4qEy83CH23MyZC8R968SCi1FfWIjzOBwVft7ab5E/g+REZT9z8Vx869VXY/mxx+LGK6/yvkXOWeIRybGBY5ywEArYg6TURP8cjs8JwP8QGAmER+CUeHqu8cWjsgkfOQCPA3wHg3I49Hpu+LEMfjPXjpvTG3G1cBsaZZBI3dnZebQvcglOrrOzASgKMQXl0TeJoNuPBskAc0ia7b39WJqfi9OLJ6KDJMzhqWaww/yut1svZlGterJ8HgDWseUyOjAAtIxU9Lw5AO2A1sv4zxDOC9h+JZyS1ft3I8tnCiViwSeWOI+RjuWo4+wYitshbrx09nxMs0hOEEFZXV+PBotm6+b1mDt3jhXGs2JojpCA43YTegcE1nPR/VQFVexoHBxZMyIUhnw98uOIHJNHCkDjukfpcLx9UB9aPoy3sdpRdHLduDG9HuvlndjqbpKNshelYjlmCJ8ppfo7W9HD21y68Fj0tL1Qy1vYWp947AmA2MXrJRx2AqlUm4q1u3cgj8tRLpaQrHirTPhJ4rUlfi9BtWj75aFfdCoEYBYg5uXwHmbLFEaAHwdjAbVeQBo+uH4VCYnDMreYOMEikrRG1swyERNJ6D425tbqOmBbiXPLp2Pjzm30OIDm/EOck7kz5yCy8cY5x5jrZiCqKzgm4yUooU9jhqj3v/s4IhDK5X73pT7M748MgEY4sBf+yYe5mff7We0/1a7HCPC1c51Yre7EfgXvd7xPpkozigBqEa9W73VCwkBrcz2mkYY1AGka1cbWVizLuzFRG+ubcQKALSwvA4QHTDJ8HV8zc7PJyZgArCm8YjoX4EnXk2oVHGWiGtI1U3xJQPfIoKkg3eaIdHT292MKe7LO+0fN3Wit34sCarukiq8jGZG8Z86cRfrOIDkzOCv7MccCKPH+88un4s61K3jP05DVJLRWIMNxVsbGgwXhZIQ52Is8z9a+lIn9T6KK3zaT2p9HdWBz/+qjjJi87bY/+C0b24X4+p0Pfob3/8nDsVXyCb4+YamdSjs65UG0csRn99djgK00NTtD1gmTiwTrb68T+oIo/sSnYu8BlAxgkZA+dXY5tjc3U8ht6cwZ+LZS3L99E5U7S3x4gMQDXDNTeLMZ1GYlAbcGeAqAU6omi8qtoIpz3JS5f3rI2oxFJFKF/42IjpwguaCCBN25eTWR1mUknuAtFSvRWFyCcjlLMussarUe1199PRbOX4jTOCs5Fs36XbxfnKfO7k5MoaLHSNYRkZeMHjdEdqKEkIi9z9ei9RgXfbvUOxyo9z+07/udREy+lub8fX/ivd/4oQFoVotxRKTSyntf5tH8Rcmne6nna1x0hOOwVdnH7spEy2gB8d5mdydqSJesNhx202TQjaG0xvIKzsdsSrnaYELPY+j3kVg6KQuowgVU34Nr19JrNcBQlnfjejUkaRlyusCXHnHKC+S8Fa6RQyKq3gVhFjWqXVgA3ENsyDnsvxax3ZNI1SKfbeMAab/lcURyeUCLc6F3PHfiNLbfNMkHjdji/bOqaezCS08+FQ+wAfuockE41gHBY5eqGRAtGRGZyQD4KTJrmnvr0X1uKtorTKfe0NEfMyRV/M42c/9hL/WhAdikaOg4wOeDqi6T6gWHIwDYzLcxORFWBOq3ifjefHANlYuBzrGIBzlGTQU8X4bUzuWnn43m+iqELhOPZKujJpsA0Zy/k6eXk7e5ee8uano2eqjPeZwR8vGjDjgq2H2SPnnOrWpX7ebzRSRZHs4QpwTOUCfBpIOs0RTU8Axg7HHtAt+L/M4fonkbAhy1XcYMKCJRVat1zIKF5TNJcp5C+l1/+aVYPHcJ1d2IpVMn4+6br0WG84/JRSyVa4CT2hJUtlk7GZ8VrrDA+UfjZjR/pha9k1JTaQiO9n9kMhUOCsY+1HU+FACT03GERPPhkyn5/Kdtk5wPBriHuu0WUJPjYqyVd+N+5z6EcwYJ1o05MpYzAEtjvbu5EYsXPgEZjHdL3l+TFKvzlx5L8d1d7K4ppOI0gJjgiHSxHSsAY4THPDU3bxlRAvEUtpk0SA2brIjzUAJ0ZQAi2AR0tQJFU1Kt4uxwzQbqv4oEzeMJ97HhpheWAEU2BgByiD1YINkADHEgYVkoM0uno0FNSQmw3r99OyrcUx4VfQrJPGjux73X3ojpC09Ed/VuKlsqEEockWeYlaLBQ25A63Q4d34qH9vPlWNYPxy5o/3OdHzxwyYvfGAAagNwA18+2kd897ObDeJRHBVRvb24FXehXXoxBiSqy1kAgI5K1EuWirTlz/xY9Js7yTaUi6tABHcA3z7JpdPT5N0BzltvvJ4kXAEVJ383BTVT4b3YtlHAMTh0QKRQGsR3PQ/yLmW8WCcyDXiUgHKDZaIqBWgbX29hY9Z5v6lcbSRr6/Yt1G8xikjaApI4qz158kRMQc9UUMl17mXjxvWonVzmOotx4vQZVPlGjImIjOQZub8MYM5yrS6hwiJOjM9d5RrtrY3IzeZj86f0lt997B71qyQvfOnD2IMfGIDafazgD20DvP8BQWTwn6rX0kftwOIwH9eLd0kS3SClfQd7rps8X4Y/eYkWBC0+8QwfmxDSIjsFp+DSM5/Es9yPJhGInLQK4FJytZB+BWibDhJybnEhsry3TKjOyEUZz1VOsIjkyWKfqYbL2GN6yiaPVlCri2TNVHEMSkg+nQTBOwPICKOgfq2aQ7Vjz2mXth7ciTw2nxkyxpWrOD1VpF4J8nrh9Pm4d/VqVAnZaQueOX8+tgDk/TffjLNPfSY2kJBjbMCidqHn49xFnC1tyDGSuwhIMxeqsfcJpjZJ2fc/wh/wnTMPmwZ8oI9/IABKNh+X3edTHXB+xgNMOpB45hV4h3WoFyvZlDpZ1GIFMDUAAp5GchryFYx8vEc/v7+9FRVUX6FUwfYjUQFeEGzFk598GjU7TKp5Cskof7hIwkIPiVllYgVgEenWx56k+1YCUAFAFpBW2oQwOtFAXTcoONI71gmx2k0VXQfAnJzMFkJo2JLe+wQDrXnnZmTxjAuAVxI9z2fnzq9AERGxQRJuYavurEOaA8wyiQuXnrgYD25cif17D+AdATmv6WRZTddHRXsTeeiZ+vw8HvM2CykXnU+XYvA2ktpxPMLjuQ+qin9gACZxe4ypVYeDdpj75g07kXrBb1Rukvsyjg5JnFBjqCtsLb1DJpWcKVTbckxQT0U80juXX4snfuzzsQsQ24Tj+tAZdaTGHFzhKoAwOdUaX9Og6kREBkjAPCq0DO2Sw+HIQ7mkA+MfFBNDho4h4XQMoCpT84kfNAXfuLB24Zj3TOHh1sx82YdGWTjJ+apI322kIx4rZHdeW1CVyr1XuccpiOsinz352JNx7+XvRAOeUO/31LmzceeNV2N3axNvfjl2oYpYC4C6mhaiZgPrICrz2LloAgcjP1OJ1hPc6/FIQUb8g6niHxiAB6r3YC6O8/8C7vBQ/d6tbcTaaD2G8HUZUpvMt2sgUbTZVK312YWYXT7LZIxj9erlmKGarYDtNcR4b23vQP4W4uyFC0lq9Y02QGfsbGxgDxp/xbrjq8frOUBlqWYFW6sPKGszODi4AlnsNwGVsp1RrwJIsElyJxmNRMqjpqewzeBScHLaRELmU1y4CKh3r1yOTIVoB+dJ9cFI3zqe95DFtILN2oaS2bl3P4pwhXq5F598Mm6//lLskhlTYdE4BgWooDzXHOIJZwChYHPRdalphv2MuDRFwsIxIZDmEB9EFf9AANz7xd//wnGq3kPA+d0BTzSM35EyVwM1hsqDT07GuKWNygHjseXqFOpzLvoY/VViqlf+45/EhWd/Ikm+DraehLGJp8tPPJnIYmpkmTuylwHuHFJoAtDqgGcMuHN8t56jfvIMmShweKjwPDFdQZjn5xwZzsXaNOpT4JKsgClgAbugySI5Z85exC7DO27jcS+dTfwdYo9zVWP3BiE61PsY21VyvEZuYAWPvIBknpBH+ODNy1HhfnRaLjx+Ka6/+C2k4E6MULNykgPs2AL2p95wc3Mtva9G9Ma/KSLp+hGjxWPyRg4m6wdWxe8bgKpeEiC/9HZQHPfPSkGzPjaL1FIU9qBGYAWhIYxK1AlzaQuVMeQrSK0iE6MK3YbbyxOrnSeeOqKSrYUKVtWWsbtOX7xAZVw7AUXvtkXNx+zCfJJ4qsyhyQiqUzg407ZyOimt/SiRTaO0KULLZHnNNHtTp2p8ye+lZFLuQelsBnaJxSDI/LmM+t3FW61DjG9++1uRIyFBOmeEYyRfuHBhJbosgHm4ya3bN+Au16LMIhLYmhgD+tS8/NWv4PVOI82R0ABYp2eMpNc2URLqEVt0la0SJXm8/O6x4iOaPFXxD0JQv28A4nl+6aOQflwzZboIvCFp8/3sIG4W7iV3xDSnAepN4tc0pyyqWADUUHWdzfWkRq+//K248JnPpkSEfSZ+B/Xb749i4dTpJAXtUFCEWC5iz7WQdFMS2ERIyjgNiDdwhqxTggFeJZsVawU83Al2VnIikFyisYLDMHN2JdWbCMAe73MB5BszmAckL2AiDLvUAGOnKdHyANRMm72b1zEAARHntmBJENq24+Rjj8cOuYSv/+EfwhuS0cMiuvTEY3H9j/84ahfPxM6rL5Oub8iQWhVDgoC/RZmBYcOK947tOGZsOqdZl7NM87Fp4pj5QQjq9wXAxPl9RN1IBcBE+48BNAW9WWjH/fwqv3PrrHrToBbw/oZMRBWbqA710YY3qxBh6OJsmFly8ZnPJuM8y/vtTFVGqi2fv3igxpAiZdRhC+N9FqeghIQSDCMANMSbriHtMqhSqvm4JnYW0smohpImD1gsaFItS5mUsTvr8zgSgLmNl60dmZOmmZ7nXTQxwpbUbuxi32X4Ps09PPjmn6LmKcU05YpnKuLJt8mWzqNWVfGrN25yrt2oIcHnSFw1zctS0Vf/wx8ksA7gMovTRkiKiVqSDTBCI7iNd2dr2LKn8+9IVjgi4ffWaXmSL75fbvB9AVDp99bZj/kHbT9Vi18CcCNHv5Z8PwYARJDUkEam0OeQfpLDWZyLIcDTDnqAob903sIiIiJECtbXVrH/8H4x+Mvk3ZnuPkICarvtbG9SGI64YOLy2Ic9eMPk0ACEHIBqtkgsBZAdExsw+jHRUL9UFfP3EurZ1PoqDkoRydYAyCOuiahL6r56AgcICdbf3+b8ONEAV/qkfvFSDAB+xwIpVDFcDzZdKRHl1qOYzaMUvvXNb0YFekbi+syFs3H3hW9FEVuvxeKSi3SICkj+IXam0lfVrDkwoXZZqdpbppBq6vhEoBB5vw7J9wXgRyn9kvoFeUpB6x/892bpJo/H79ArTohUyoQeLVNIvCISo7l2P6nP5vqDxJ2d/9Sz4AgOEXvM3i/ai9PwbQXiqmOcGaWS+Xy9TjNmIX/tlFDCthsNe6jOMlIUj1mCGVtr2GtDz7RYDNwRBPIEgJkehX6EaiHRAG6wduJMCvvplcvJWddRxp6sEY4bdvZwaHagT0jX4m9ZpKCe78Z3vsnPRe5zCLeIrYe0a2P76ST1AP7VF19gsZADCK2j537z1VdSVvetP/8TnoM6kR1yHymizxG+27uDzcu4FOEgbSlnqC5Tx0acYqq/72wLnUd2PJdaKn+f033fW/qopJ8Oh9LPdWvCqR1I71W3Yi+/m1Z5JvFyOBOoU8sqpTK02Iy9YqDFzt1b2ECjmD+Lo6HnS4u1IkmmNaSV1XEWmw+SA5JDQgI2fjdklng03idXmFNqIYkKRBv6AEHwaNdlAEmaWNR/osYZxRY1G1lOKnmsGq9AtfSI+6q6+0jfxvlLAJ1rwQNOaI5kjuF4QJ4hariFs9GTGOdZ5SFzgLELT1klYWIKIO1rSlx+M0qLJxOneQpnpIt9uEHZwIhnMFVfZ6lKTHiPfMYsEttYcxl1PkJqZ+bgIs/iTFm4d5zHQT/vv/CKfyEAP0rpl3QVt+6kDPK2PxvH/TK8HypG1SvILG9U/Raw4UqotebaXQzwRkp92l69H6cx5FWjvR3iwKRCjbGfNOZNJN1dv59eK6BG+3i22nJ6xm3S9kt8V8KKfnHe5bO8gFplspEoOiD+3XYdvo4oZQEQ4YCjK6H6sqRz1U8sA8hCem2EM1CozcTMucdQw5upWeWASIueawmpJjA3XvhGUrdKzCIgl2Ky1s8STQvjH7z+MnYj8WYk6cWnn4g7OCFLK9iQL/w518OJQcpX8JYHLjZKTCcwBFW4S8Huc4ynUcMzPMzhwWvHcHxfKfgXAvCjkn4OTJKAfD+QgploF3qxlicozwRJW7jCK1AuqklVr8mhI6RVZ/1Omlg7FtQlbAHLkNdTn2Yky3jURY0iFXi9hx3m53vQL0Y1qnXKNnFglHYa+xnOoaodQCKP6VQgUIzfDvkdgzDRPgJU29AU/dbqnYTYwvRi8nLLxGtHFLZ7/R4hvtryhQMnZJeFxOtdKKEM9qd5fs0rb8QIL1yOU+clT4ZNC6k4d2Y5zpIVs/3gbmy/eQVn5DzRkDOoWbxz7mn7xrXkCY+5J6Vzh2fq7GwmAKsZEpWExB5XMBP0hj0Enyv7GA7Yi1/6iy7zngD8KKUfJlaiE7QBB2S+ZFC/t6t0r8oZckPp4RSbj2f9rR5fERuts3E/EceO6z4RjcYCKVR8bmgSgg4FEk66ooSxvkt6vN2v2iSqWljkpKmWu4TM/F0pOCJ+mwdsCcAArIuNWAIUNpScIIWTDcjrLgZjvYRUuNY+tuA26pBkVm6kiu1n5nJr8x5SG6nEe+cefwYAN2PC+VTHI2LMZagf1fX2q9/iunjgqNRpQNZGcteRYgUaEu0g0XevX4ksqr08ezLOwWHeee2l5NA0KbTnRjFFSIhFK+xZBIUdOMEZSRk9xvqwMcYUMr1lBx6PBGQYJl/4i3jB9wTgRyr9AIu8n2M0IOW+ne3F3ektnEQ8X2wqnQY7V6n68pKwcHQ9IgEtvqaWzig2YwO+z/oNk0InOBTSNFa0MbtIFiIJVsnhNTohAybKfMEtJlhvcoDEUqVmcubRHKhc634rEs9cD2MTSQzokJKqUePNGv7ajB2cH2+8AFBMiBUsSs326m3s0N0UnmucvhDtzdXob61BUHNf8HZZpNfu5ZdTLqIJEItkwexh+/Xxks8//Qy3Se0LJkYHSVg5sxKnH38qSTrPvXPzCmKYECTXLyHFW4BVTnSARNWcGPHMtPBKABwf5OsyshzHBMJ8uf/Fgwt+7//fE4CM+3Pf+/bjecVxMd1+xKTn2DJys0ah0WA7kc5mnNuBoACY/G5WcR8HQENfcBiZKEKDbBC4Bz9IFkJXJBqAGEKyrdjjdbNWJgBoACgla4d4wkqP9p4ZMtSZYPOZbq80lXge8V6pGaMhyQnhPUpI35tAiHQTCIhVrtVM50MsJ4pGVV/AKfFeB00kHqqyOEXERLV771oMvCZArkAqj1D9Awh0PfYSqV9mt6iG7dtvVkxr40HsEb4r4jlnMDvmiJZs3L+FE8VCAKx23p+jt0yTz+h0ZVHvRVqJjOUwy3yv03au9t5TfmSzO8n+8ntJwXe9m48y5qvtJ983IOohEPWA75XWyF7pMenYf7wm9ZEDbKpI218MyHQeIwFq8yeZTN5PsbmJqdpfA1rndqFPrA22w0EbdWtUog8HqCOhg6B0y2KsC1Dz9cb8LPWi3TiElhmjas0bNIJxUNCEE8JrY1Sxx5jryAMmqQlw+wKNSTdXb5IcJs7HZ81sGaGmR3rdALCPc9HBHBirkpFwput31rBhOZ/Sdwqp7OKoIF0Xl5fj3uXXY/vaFV6j+o5Ei6ULl2L/zq3UQHPj9e9ojMY0SRc2SG8hXbOcjxUEXYS9iAQc6QXrh7iy/Dq+YyZXGT33bpd7VwB+P8Px3U70qF5T9SbyGVCofvfKNHssYsg7oYBL8KiCzQw2904+zaiDNRJV1K+5fTffeAPwID0FJwATqBabq46NDni04fc0Jrs4B9qDAzxhZd6AyZciyQMYSd0+4M0CXnMAs0ihDOfSm1baCHZkNVLNuhMyUvRIkK4moQ7hC/tIyS42nSR4Sy+cFaUD1BOEOC1tgKjTM2SRKBnlGNsPbgJInhfHqExa2JhnHfIMPoetgAVrf5NIz+kzxJPPQ9XQufXKq4CZ+hgWi7mLdtTqIkkRu0hVygzo4jqgqH1UBnXe8rvOuqNydEdmnHYy/Z4LYNC889D5gMV+7p2vHs9v2ltafr2sOX1+H9DtoEeLDaSNhj5/T/FepJteZ5JASCK9VeIXSUpdfe07vBcJhdrsAiqlnjyfE99hglrYi1nsriQ9uYZOgBKwDX+YVDKgrJNaNeT1rnUX9FupzBG/xUs+5B7BdQIfgpqDcwCOwogUfdUu0nmCFLSuxOaVOxvrZGtvpUwa07tANNEYYtgmUiDVNzZeiWd+vJG6OGzSzm0Wk6N+EfKb4iNrmDUr2nKMLMA69Sh79+8l79k0rDw26fy5i3HnpRfTc7ZuX4/qpU/AfZ4nFr7BvViH0qYIapGxoGmT9aNYCjp5mjLHfDynGv7uXtTfA8BRZvhzxyye3zEOSr9E7jJWfXYpalLzMQCAKDomhcwOZt209+SJ4nnqQCgZJ0isMh7j/SuXASP8GhJSCsI0/SZANNX+Pr2Ym3RH2CVZdYnrlJCaNqPs8z67I2xt78EtEnrDIWghbUxAqJL02cAxUfU6oc4cH00g1xSQMhlyTovFze0DhUx0DilHXe/9+5DIezQouh+bmzQXIky4T9bLJu/f2XfTG8DuZ8iWOUn7j2vr2K07rVh48lNRItvZuHEFKmfvKo4HzkSFpIXb1y6zjQMc4h69q7EtG9qDTFhr9V5swwrUVp6gqu58XHn+38Z5FqJsASIYzVGIPpqkf5IY9iZO3oEieMfYH/UvD52RL7/9Ot8jjBEAv/T2NxzXz4d8H7LrLQqmnxtZ6Yv6MKSkWqS9rbYYq9ffu4DKAnLz+RqE17p0O1Ci6Rnb/kKbbJecwH0kXpPOQzfZ9+P2HskMfD3YBoxIoRZA6QCEjWYnbm/vx+1NAENPwKt37qdOqE1AOOY8KVua66ZcOwAGBvliseCJJ14QGCittOWGTHwTkOxgh23TDq5jmK6AE4EZMOZeZ6n/OEl3rFmiHNuo5m+++jr30YlNrnuFYnSjMDonVvQ1ls+QqMCCQrWPMAdaUEodquOkZbARok6kp0EIcefmNe6DceLv04KSxTowjMiCGZL8YKGVqOs9Qb5iw4V0IAn9fmzHJPu3v/ta75CAD9Xvs9/9pmP5XduPf46Htt8wd0DFbGS2qV7bjxpen6DKM/mIwaQCC6zuQX+bgacTAtGHPSiQAb2ctQcHSLAO6mcDibOHlDPHbg91vIukm8VuaqIep7mYKrnJxN0j0XObv6PQo7uxlUJzI4BXROrYub6g/cn17ICWvEqkoXeboiEmHSAWs6jIIfaeNScdOT5swxlAVuMc++0+bX8PCpakbTIZ9paDe5ziXixoynPizz/7Se4V+5GY8YCwHkZIVE4tp6InQ4RGasYsjH2KmmY/8Uzs4ZBMXXqCupeLcflNiGxA3KGramnpbOot06UiL4MExTAGgIwJ3nJ+ljF7HGn+bUwPEnvS4aC7oo7+eK7zi/9mpfJbf+/G4aXeAcCPVv0e2H/emJ6wuX/YotEa4SEioYxCGNrSAQEBjCl2Iky/pK2ea45MmH0Kd4wwsPwT1WKCaRtOrw0obM/22U/QIq1sMSUgRkqlQnJGQOdgYZEyyRYhLRwJPeYyhLNVbhLJ5gHqvJi8kFYI4C2SQjXi/gyDFSkCyugcQQHZrWBAQkQF0tptF8omMWA29LEnLVLPch6dgKx2K89krYmpUwKwMT8dZ8gdzJAVo32obTrAwTKZYe/aaweeNfd659qbceFn/svYJr9x+omnSFLA+0c77N25QULrxSgTBrTCrgtoq4Tu6Aes15WKrEaMRW+F59qCHrqF9uiJPo5jAiEj9gWu9mW+0vEOADKPf//wD8f5/dD58JrSL7oUvnavSD+/7m5KOLVkUvvLPdo0xZgdAvFNvzF2qBntOAa8izSkXxqga0cDb7WM4T2/NIu0MXcPBclrSrRWE4ADpGabGC9AqtJ6bXqW3D1VPKpUWkcwSnhbC5JqT7ySGTAAVOLYixeRYtI1LgDTs7QFTWoQYPZx0Vsugdtq7UBaSsEY2mtt7uMY0BtwhMnAMxUFPNeuTy2kRAZuErWvNISGIQlh9/rrLBpADGg3HrAX3cYa0RkaV+Lt1qniOwEx3bx3C6eDbB0krLUo6zfejBOf/Cwe8j5tQUjGoHiqbVRoHmn4BB59Hy1zF2pr+BCExzHp36WG3wLgAVH40Xi/h8+tGnMPjCyeYKfUj80C+XNkjCgpTJmXB3QCBZJxTnut2ACoQtZxG3VzSKV0UalyfF3ojDohqBoSyoyRJr+rzjdJ8Nxv42SoTpFqU4BvFicAFyfZcRU8Xtut6c2mInDsL6vkUjdUpKtST9LZhIEMtp1APZDO2J44LAUokh70hzZpssu4b2mhFiBoEl7rYAbcW93ATOB1Hl4+sEoL3gpqV5W9RF5iA0DXIafHgMTqtzGrzpCkTZK2d41536fj6pl48Nqrcfan/gbFSKdi/aUXokdCxOjSUyyCmbjzwgaLhKVMooLFUmWkeRtbUF0zOQ8X2mLh7EDf7PGKN3I8xzu84bcAmCuOnjue63/vVZRgHsALcDHZ0C/bBbfEupcmqETSp2lNOhewYrxbEcigIvW0pwSoqVItVFIVimZvdx8BQhIpFWY1JkAebg/P0yaU93A0NgA1zHAyzD0388PGhO0o7WMf7nfi1JJSiPAYAOywnYMxZBtJDrhe8nS9TwAoJ+jfUgSG7xCTaH/uH+k7QIL1tVV5XYepg+S5c/sOzs8+YKSpJTshNQDDXTzzXrYW67x/+87dmM1sxRPYo0uLeMa0j6tzH3nsSUsEbHYkQ2BCa5uEg7lP0MDo638Spz/346nFR22RemZeH+H1V6FoelJXRGl40CQZK0hq49FKbFirmJypRn8dUvt1tIb84DEdD0np3/VybwGQ+/r7mjgf1ZHoF7kBbqJHAgKtJhksJhyJY86fnqUd5m3YyNQndWz2i+qyycREvsmmMw/Yz0OVGgCtGSehJQpEAO7RJneNSb221UqZwh2kjRTK9Xtso4C6ttv9Ml5pLltiLzi7F6zF0plyUscDwDPEQ85yD7mySwTgCzrUreWfEtZGQZJdwG3pJQ+heZpI2B4OkX6x0ZgrV27EVovISWkaqZuL/+/1G2l7hzYLqIVUfwyp+dizn4/XXnqJhpbr8RkWjJJ8iciGqjrHApzgSLgo9vH++4Bc23gTyb9z4zpagLJOvOE28fDe1npUTP1ioZmQoBQ3jcywo/HiHBGaMTYpRnAMH6Mc4D73ua3TdzyzT8nDc1zpnQBERXw03u/DZ3Zlm/Nnr2fV8HqW1CuM8QmErBEPPU/DbmZBW0iUpB8DquFvrW+b1CbDZugcjULoFDg1JGkZ52LAnhyXd4fsC1yIKzfvpibi586cowaEwvQSg89Hdvc24OdKsQDIS2yVWoBAnmdVyuvJ1+WQVNb5ugH1BODJO475yqCuEY/gj/fyPhdQu4vnDmgzUETGkR/chY5pMuEkur5w7Xas4yWfXaCWpTqM7W427vKxq4QPv335Mu3ZKIofkop1v8mG2aN4GqroifNkZON49ZBsI767g9Ietl8ePqpLQkWTGHGlepHPQbJzTyPi3yleTnq/zppOmXwlhCrmDeWcLCqjRDl2fWfDk+g9Dan9J9iO3MdxHGgwfY0vei1GLeJhoPgjA+ABB8jcpSUIX5e7G90xq57BNN3KwbSL6BBpoSpU6uGW8jpgwLZLeYDEeH19CDi11bZpaesm05dReW+ymWAVKmQTkM4AmJ/GZrr46c/FwsmFePqvPRX3J3RAYJtV92lbbbIzOnRFHynWQv0y3ahSiqH43UgKSdapgGgCMDOkwGfwWrN8z2ILKgmH2GltjPqhHc8hnltNurNKDQHcqxDdy898jrT6E7F0jpqN+nx84gnS7B97Ov7Bf/8/xec//9OxBffXBiitTCWut8dxHaktUZ5iw9A1dvySexwh2STjdY6uYfvZdctM7CLe7xjpKPASN4q01MRxbSgJjSAZpy5C6WRw0CYmKZxiER/mCgqIIz646sphckICYL48/OjAh+Q7+McAwQVadnmvqvdLKzMGODV8lHJJagQFiBebOkRh37j3Lv4FGS7Eg1FzBu0lbQUppEnqVl9CXY5RW2vUTcwCls986rPx+I//dMyQuGAjoHYXOmbQjkVaWdgd4dM//lMxqs3FGmCxHYiqVQejB6C6gN1djvAdmFDJaWw+aoIzSLZUoMTP44xZMQeq2RQtZHXKN3QL2L/3hf8xtVJ7khYhW80J5DfSFy/bYngyY+O//of/KP6rn/zrUcSTXseJ6XGNWUB3n3vJsjjqU1X2lEPV0gpO79itG8T56q1bbDtG/TCLDIFJzBuvF+1Rn1s8cMykrnSEAJ6LetcwHbQRqUY4VDhSNaTghbfnaR0xAjn9IeYSAPn9uaO/5Ltf4dABETCMZayWt2K3t5ZsK721aSrYzI9T2h2AkK4DSQJK1wBdgKg0YAfOJCnckVLv1n09POEuwJSaySM1zhGkLzMx1NDF059+JjbWNtO2DH/nJy7FmeXZuI+ktDJuiTqNzR3a/a6TKZ3sSGxQzmkzcZ2LEbbVEClpmleqDcGelJ7R4dBbNdZaqRIWOzFFWSg5fL1RfOqv/x065J+KZcJkW5u78Td/YiV+9sdJuYJo7uBAPfn0k8ljPw+l8nf/2ufik/MLsYyzYZf/cytnw+zqmYuPxdLFlTiJg2KCwphECstDmyyMPcjplJalx4uYHmNXzlKD3Ebdc0uM4YGXUdCW5f5MtDC1LIcEzALo0Rz3z9o5roO1nYTegRMyic8c14Xf6zrW/hqGu1ZiiwXrYomDytPZzXRfLgw0CUKTPMdIyZQPiGRzuwUH2LzAAQPvVgr7e7TSSATyKE7TQcC63eaDjbiFca790/lX/4Ja4b9GM/CzceUeTYKwkYaDDDtYrkSHWLLRjMfPnCKtngliX44sTkOPCVV1aQYMCIlNSDbIlLgXJFWSfrxH2zSLFJR8zkzwwi3hRMrVubetN74Db8cmiNZ4tAbx55exzegkubF/K/7m3/jZGNH56gpJBVdff4N7HMTf+dTT0ViaI5qyg7MA2T1H1R8jVKmRgsXztYglu6dcAZW7u3uVe6JR+ysv0sLjKRaBaw8Ok/qYezffgNwmLJe1mo/FizS0bsQSAflKaa5xjcRe7GzVcGHtmAzByCTMHQAwYuW9gHGUr6t6lYCHOYDr5d243b+RMkfaeH7zJ08jZQiPwZO5q7iq1foLQ3JyftpG9mZh1nEO6BPN+ewu1UcKNEjEPImBXYTfyxQx4KFkhkyIiQYV9ly7eeUluECSQxEHdQA6g01X4pwTaJsanynZQBL1OIYyQaYAfsxOwKdXOSbOS4807pu7BxzSLBP1MveXlUiHqB4rgekhc/anPxcdTIR9ecq7V+LNl/48it0h3u0ianU+lunyevUP/yA2cGwuLJ+KSyvn2DYsRwf95Th5ZimVAKjKjeBMyDOcAOqlC+do3Us/a+7Fzl09nKw1quHsytUjN3Jq6uxBiBBQQVIxhXi+LMgB0p+lwf0xjtiGWUDNxpvUJPP7DPCmcKmwxsI4nuM5L3MIwI/GBmSlMrv+l0B4rXIrxXVz5I1Lu0yRFtViwO3zIpErfyUQDY0xbrS94O9ra8nBYA6wAw8yl6UvztTYNpXoQrkMOJmYco7kTj6jPSd9InfX69aTVMqhTqt5PER0p42B9HbHiJFO29f4PEkReR0hQDaBzDZHz25XE4Bh/HWcwes0EoKHaRjPSrtOqUE/P5sIYSfyc6kKvTPci5PTvG+wFXWk6D7e6hzXqs1PsV/J4wzEMM7XllJh+wyllzpeOh1l+hSaWj/h3hDUeNfUCNNZyxSyaUJ+bZyjTeLXS2fO8kxQRgDMfjFmVrNCWSA8BwS22T2sGaiomdT2w01zfIYiWmPMopxU1NUHc8L/j/RgNpMjkm/+t7/P/h4fzfGW/Yf63WeXowfZdSYK1UWkokK+Wwn7awN1OLU4fXCDADC1M2NgBZASscOYaXOZVGrrDVtTdFGP9VlalzGBMF54fAAQqTbBVsMUTEA2r3BM1MENa4ywlJEknJTFwHv43veNXAObHdWqHEF9cS1B2jUJls/niNdaexuoW4GZxassFkihQnI6ptOnKSwCGFlSqxqUX8ITYZtBdPNlwyNpozrAtax07vRp7pecRkAm4CTXcxhK2msm4VoSoArNzpKbiBnSgEK6e/cWURJ6XLNQN1kIC5xvyAcME7JejRTixPFMANZFJ3AtVlqkJ/X9y28gldcoFV1Jzp47L7FKU2tfLJxjOcrl7kweo3nFPJSP4tDxADZp0T2oUcdAT7vUEo2JdwNpJz7FU7F9GEF1IBIGbouBNhKhE6KnrJNivW8V3quDNNP+c0No8wbLeI85Vv8YjzVHxkyGCXCZ21iSk/LFWaBZtNHNbDFR1PQuJ894bmYIpcF1kyPEew0F6knmy7TjgIN0Exp0NnwlXGCZ2g8yliXM0eSEznCeuB9VtFxiJm+cGXUIks1O8Weze9TWtgfxSxPChAWlqU6XZaM51HzqvFqcjwnmgnygrXhTDXCRfjg4Xnq4NRwfN8NOYg67s4L9urFOvQw2X+p5iKnCRfmzzhuxcxId5lZWkJokJcgT8syTEp/HLjyOY5ApPEsyxmSFhfWRHIf2n3Uf1wt3kiENNJhw+FHsEzsapMFk4pVwOWw799boof6cgCH1tebEWVDUwz7T+N/B68WEwnkhLpvsxv+Uwm/iqsDQZpzgeEyQOORuodJ5UenGXmtZiqHEphSPKtEU/5SNLQj5x0uAmJ5+eJ7R4/NM3Gj1ZhTOPU1wnzZuANy9PFLvQhbBZI79iHGqHGKjJClrhsWiaDNsJ9LB+4HEYxUAD9xtvHb4pTzNljQZjLakHoYuOpoNEQQGMEauyTUlvCjIGsSLBxDySn4letrMhnGdpq6kiydcIkfQXeIl9CXxNWsk7/vkKhrlsW5kAmDdgTPHsB/HkR1PVtBamZXjuNh7XcPox065RZRC9l5pxJw+XPHGcO1mpQRJgMCAUSUlqaAtiHOi1MoxmAb2bae7hcE/W7UDFlKKiePtSCJAhVrOorqyqL4sqqjAhWQd8qo54JHnPvy7u6KXSAooZTkvKjOHDZbB8TmgfqSDlI4QzdT1DkmGSMRbhutQ55HyBQG28WGzVmqAsV4jskLjIZsO2TlfNW5yqVu9Gtmx+bmJDzkWkPeU5Xo+fx4Vn8CHZNVc8Loml+ry23ErV7a3TYamSluAMcN+dvAEmB9KUaWtC9ecyAygMiUNgxCvHlNB1ALdVMSOJDWDSK2inTiZktd0xI7n0A5kOCbnj+dy73IVBqObpy6iSOkk1INqNY0Pg1dgIGweaaE4N8mA6nia+sQ7kFgCQ0ml+WCLNnCE1DgwyKegT1J7C9UN4EsF6bxHlZzF+M/xZbE3vh+goyQT280d0Evu9YGILCFds0ijLFwbWEzqV5Wlz+5+IQMSRo2pmoxgeeaQcsoRgDTnTr4tgQWpbIFQCQlnbmANCVWhI5d5f1kkkyo2x3v1wn2WAl85bTwBqepFypormCI//G52t4PD/xP3l8EEaGP3WdDUQ833BDP/SuQpCj5TzGx0pF+xvw+pT2y5QOqY0i951diEDA5SEO8c+9WoyIj4t5shHteBtTrt1WaO64LvuA4jqfQTOa0C5ZNMrIMtsequlPJ9LnjBo31iwoAb/blSbcNmKn6GlW4bXFOqzJQRm0Oohpr2HxLBlrtuk1VQwnCyHGAso9ZMSxriXWfbWwAPMJBziNvB61LUGIMANIs6zSV9jVrkHKou7T94oCQNRz0A19ujIP4OaVd3SIWnaRIShQdJYElOkQuFe8xhMthGQymbQ8Vn+Gxhwu/QKkX6zRT4ex4pm+e9edRnembCe3lAyF2nhelC8/l8bstWO9htRmN2SMSw4bo2aAppMobGgzPamDy/z75HCpqdwZTcMgnGrU0bc786zZwOtqAmQ1A3bI+Z4zq4XyXg8QOQoUySzBVr5svuGMmhCGOATP50u4Qusd1kH/Ga6ojRTm3TnJwyXp6dDVIeHlJIcNkrWWNdlVpmMFVrGvRSGVh8TIRJn4TIkIqqetuaJXkr0FG1qr6MKpj36i2aSCCopTJMMjXmKtd3eD4TAsZ+hhFMzhLSjwcgNk0LDt8LYLOAKY8kKmA/JsnL30p9uhUonXBWin4XeEjUPJLJBAHlvfaepsfB82HzsXB8flPP/FmHSE2wD+BbSL8MKnSW9CujNHZYNeXKBaMd6Fj1MDusCnQha86AtmSr2l7E8+mRm/E9QQry+Md2MFUzsAoUJxzzIfD8b4idZe+XVp7EUTxJB9AUI/fgtYrN2XUSzBjWHnIfDWOgqio0IJIBMCEBrVZLtg+Toq2mx5ikqca4Uoi/m4KkF93bXj3wPlHXEreep+B5AJlOikmudk3QWxZ4NoD0MNQmzeMu50oVVaWTZflkoUhCQg5pxWtZpREpY7q2mg+CQ0mdh1gvAooSNmLJe0Ly5JSWPA93x70xILzPhpd23ueEyXzIcD7tTNen5pnfXRSbdNA33ssNRpfn7pCtU+GztupNpQOcywWtjezed8npfwhgY+n2wsl6Qr6sSbYRuwQ6NsMxoiEzc5xX+54H6xX6sZ9FPQEQ1Yb7vJnJIoAsxPZQbciDaf+phmzDZnaMtSBGIgwhjQUENI0dA8wdVLPnCN66eUvRhAEmUW0qvSFQfWgdGW211FUKW01qxdoSQaPKzSU7UAFBSw9TYABLDQmqCk98XalO+7OTeN7sH8ciKBZojM492ohcu3OMbeb2Cd6jzc0L8IMT2mVkuO9klxJJyREpSV0eBDf3nyWzQLBaVyKYMTCTxBJ0ZrcYdwZdLKKtWL15jfYlAJzxAEaJjJ+S5MaGs5zASIzPIm/qgrIDmF0aHEsr/A4cD2I8XMvmTC7OHJ73qOrZju9AY01Wju9y77wSQj/26Pk8wQ6z84GcXp1J1ChOS5Zlm6QcNk+d4LztdJNni9pi5NQeSa0OmBS2D018lybMkCSBxMEBQqDKRANKpIT7xpXJ/ED+JKmJVZeai3NSJon59i8JmHiQACiF2HhdqVZmsqtEI6pkKFeYRMscS4TS7MpfBMjFuRNRWj5/oIJxnlKjTJwhy0QPiD6IczxXF9G4hc3JdfxZCel9yfmxIpJ54L1PkG5K4fR+npWVmQDpQ7cIuzWRoCOui4EQI4C2S91x5alLaRGxmpPEH3EO7UDj6W00iuNX5N6NiBgdcilqWnB2TEtIan7OzWDuZLhnxvGoD55y5SORgD6bm01rNG+x3YI7iRvstxFQHU/Rfijp4O96uHYcsDeLeX8VSFe7DvBikk6pwwE/O9A6ICYndBngdCj5BJC/cFF4pwREJaQAT1JRWwsppZeZ8g9Radp6qf0aoDXnzkQl6WsLfro7kDajEAAAQABJREFU6wCdftH8PMSZSH1cOJFZWEOyWrQN86Q5STDbs0ZYp44L/OSi0f5UImqHmcZlLDuPGs9Tx5sHzKakea8Cjw8gmAAi96c09EsvdocidHzm6KL2VynjtA+OO8MbAjR0lz7t8/Jsgt+u+XZ6UIom6ocRUfonyc31StzTBD5QgGbmjzct6yMBoEJ+zKRtlclbK4zpRM+eZ4IOYOgBO2GMepqsgx0lJZWhNOCx/HuPZAA3jekSCzW0ZJaKtpqThd5JNbiqXR2BRF8gEd3LQ9vThkHaQNpzeoI6CslO5G++ropDeSUVr00qeVyBnmF+Afwo9mj7trexQYIBX/QkHDQ3cTrs90cd8DZ2GXxgFm9dyqfDnm9yhQfkEohQjXKPOdS0ibbek3weIjDdt1LQbvcZc78ARkpw0PNGMqmGxaRpVhs3b6QGRFfuPkh5kEWTLzANjBcnZ0kQM7OqWoFcw6mz8EnwJseOhSWmQW7aToIpoECaonnMnkEZovr4dlc6EA5c/lgPJV+rSCUYTYszTK6gsI+L4FJFpBa8opFBKqiiUHfaXQJmCG1hX2QH0m1RtRHNbWNMcUCkcHLUXhw0GErSAwPerOnkmaqz+ZxH1kiIak+bUPUm4DmHEsL36xC4hVcG1U7cHwCO4rWbd+Lrl2+Rf4e5wPt6dDDosxjsTfPV5/8ofvtf/MsYbN1lIrFrUb9DPOOxUhCTYYIEkuqQnkkxWb9rd7Jgsia0eg9Oh+oXKax5kmwMpRj3baqXTIHJD/vYbHKQ8n/TjMkSKWc268xiD1qq6cLzPOmcODf6GoY0BTpPyXhj6wHktP8JC2I8RfiDODCEIVkyfMFyHddx7BLQxWnvvyJZInuZJiG32dimvsH6WTeLTm1lBUwCFJ2eWNlVpJ0d31MjcgECGAWA3u9BOhaPwYSWEVMSv1uEnFKMmFFUaqXlroPBpAoykT3RQ+UcaadNgKGkTGqXTJrU+YoJd+L3aJchab1PLuGV//h6vP7iG/HGK28mJyXjc8BJvvFH34wXfvNfx9d+81/GnW/++xhv38KbBnxI0KGSBdB4rSTdkHB2x8+ayg/oVMcHvB1KHmBYCir2/BJ0KeHVz3L/llYqAW0xZ8q/nJ7StcJzSzlJvndwNly4adNGFoanMkKkJB+kcWUMeNbm+jo7fJr1g1p3bAB0liSK4YweOB86JmS47I71MLfO0VU57NUQ+azUDXrkuSprZP1qc/l3225IFVjT2qBNmQF4dza3QkyDHPiglomVojZL2FDu/+HGLk5YB6/VZM0SE5f+MSF6GV5TUI0pBjebBh2YJIM/J6AyYQikpAL9bgP0ESvm8q31mEVPff6zT+EMZ0iLb9CNfiOWz55m4quxhIP0D/+Hfxhb994gJEZ04cG1WLvxEqnueu7+49raf9SN6BCJCpNYtfcyfE/3Jv2iFGYhpcnnfj3EgdQUb+Y8JJNiB+/jgOwg5R2HmrYBj1VD/WoHp0yiM0hVNIlS3PzHyZ4OG84KUlA17Jax2pHLZ88mViGdn5tKrADmaToh43gchzzgjeO4kGo3fSGCLDzvk383pFvAKuDTXurhQFSQdnakdyCUWmPUpwNWkrPCs0sBftSLrdJc0bbTdeUqEeTRdCI01PtMXg8QavfYns0JT9KFb+YZ6l2m2KczhzRQKgvMFG6TF8ORkJIoEr81yN8nV/3yai/1k5miyu70Yxcx+tk3bpfzk1w6/9ln4+RPfT7O/a3/Itqjhbj89ZdTEoP7gcg1SrsIrAwRGHk7VWlKROC57bKQQAj3afTC0kulM6KdZAsSULm1VMvLipB87pJ902VxbWGGGO+em8G+Qyo2SDdLEtBoTKJfADYawjzAJvUwLgNDcNwKi4w66lQ30iWtax47GE3gonABMIbDBEIufMQH93TjWCVgWlOuev51itge1OeOyFRWlSqBVL/dtp4knhmGvI6F3luSbEmK0OYEOsENYYYUYIOQpC6NIFgTojQ0e6XHgHZQf7M50vGdeM6XKBWBxuQoFVXncmAJ1FzbLJWU4eLcI/lUw/wfyYLU4vNTtP21y8EsfVjOfYYsZ3r5bVy5Sqo7ERfy69yMULK6snAplionIo/URjwCPC6q+SAYtPOcZJ5LIKa2vgmQ/O4qAHwJIZzTVVOwWOnh4edNQ2vjBO23MROQ1hbKlzFH8jAKJ+hDkzM5FcmYRSMIMv7ANUkh4/mkrw5sYmxJ1S2L3CL2HJt62xBT8Dk8jtWYDvzHdcgDkl9+HAcPCAIPH61fHMbmiI2cSX2/c/M6A2Afljp7fdxKQPKdwIbEVFLxWbkG/HMnTkQT73N+5TE6WLGRCxO0f/92knCCRPspte8AkMZKD1tSGBlIqs3HFBDafGYZeAWAi4jhO6ofyekiMYSVaBnem+e1qsDANzZJ4NTy2Zg+dZZcPFjExjYF6HiXAsv7JM1+0iKGO5w94PAEu1ga4ekKQqSriyQDZ2PirGBMXrqvaf9xnyl6gupUQroIUlTEUeNeeHva+b0tzcSJ3aDRPMgps6rJDjflfsjiE3yGLFP9NOeyi2w5ed6YHBLOPhOfsf+029EmuzNdQ0GA9Oc5uWm+jvqY7HilYwGg4Et2TNJ31CLTeqM/IDyFOu2wAsumGDFwerR2dhIeJqfOLJ1J0iplMPNajfdpd4k6d5y0GCdlyADgvnFVzmGWcwtpJTnt3/wSWqrtFE3wd66Txjmp+yQTeYcgdm4F6EFen7l9iGZsKcjnpJKJXJKwada1O2F2UfX2gVEajRRkGPIZpGXOTGkAkuNeM6ZKARBpESWwNqcgSWBT2gHMBETh74yINI1QCXLvynvgZpVkO1A7PpsE9hTPb43w6bNnyPieSm2IVd0jAKY6l/e0jNS0tkTEcy0XAAORIn+Wvlawm627Se06vKz/wPdxHIz1Th677GYiP4/pil5GW7BJ72eTN/dIlrRr6enTy2lwJE9dhQ5ShghBjoE25ukWCaAzTZ7JlEmQ+T+lKgPrfro762yHqu3GhO4DXqvqDLGmVc0p00oHAAJRNZTAxmQx+slrFCCprJLzqa6SHc71lYx96I0CfGIQc9185aXYoQ9fB6HpVlg7r3wnps6txIjnUe0KnLFqlmtw9jT5yQu2AoiLqj49Z/KKuVcfJnGWSQXzgYfsOX/hswmRCbx9Ktk26fLvdWpsx1Dk5JaNWs8s4DdeeyXZ0WmPEEBsIq27h6bF68mUioxthmdTNduo3ZBj38QOxkDHzhoYbcLjOAD9Li3ossciAdMDJTEIIPjeGR9IPTtF6RjUqc9Iqe9IjXQwQWU3elZqKQUEZeKyHtpJSgjGyaHqSJ0wfO4SWWLypWP25epQP352SCqUYFOKeAvJqOd1Y6aJ7BVpgM73q35V2UMdICbMeO5wl8ZFu2wNtl+K9purMVmn9Rs00hR5dgs4KJVdAH1nJwoPIKGbxHptEeeNIW0sEPK7X0ot7yNJGV/z7pDWXlub0C8dkIngdXE9/FxKtWI8mlursUoceIe+M01tYRIHpthPzr2P4VrYgEebrppaxrl6UjY3EjCPI5LIbxbugM8pYB0vJb5jkmxfzq+Nqm2YJDV3d9QH43ADs2Zyg2sfz5FQAI6I/Y7BWQfVIAeljWdMVRzIdYEMiF8232PgVNFyYKpOVaMcWg9jvDK3wOAdpG9ZiaaatUzTVHw7JOwA7L5SDJCVUVUJeIy3KtBvaRLSD9yP6lO1pHQUfIdfqjo83cIWxe0UqetZ08ksZZ0snFmKCf2c+5lurN16iWIiyGAKhaYoMM+dX0YdA2B6r4zBX4rjYmumXDyknM+YjH4nWwxwM2mROQuqY20DbzDdpEjm79zjLtTJbYrnd3E0THZYoXFRBZNk5vSZ2HUrWp5Br1dAq94dE5M2ikRbSrzPBTBkXJSCRpX204KEnjHyxGW8j5z2acdrHv2RADgeZW6kXLyjv95bV+jkCHEx0B2yQxyYaXaYbGDDpIA4q151lAd4biI9BxiZsQPpyBmMjBjgT1kn/C6H5abSMvsMH7thVlPn060mMWFUNx9MA65t5aSkwwlncvxsoj74XbtJqeAkSt8M8DTzm3ToX6OXID2lJ4Avh1S05dqANLK4vZomtwPAK2ShFJF6DbJO+i98O6pv3orK4+cj/+R5ioS4juCD2vEayj2UIxN9ALr0u9Lu4V9chWn6kUZyh75bdAygTdZuXqff9SBOATzDh21aipzBIcvRC3DzxW+kcTNrKOUCsig1Wezgb49reUEXGSKZMcF+RjKnRFteM4VfyZdCgVw81z0eicR93ciPsoMX8xRfH+fRwcqdztVjrXc7lk6fg9S9xyAcKAXJ0kSRYMMd7McLOACXHqHfrWvo0XzbjvgDCnK0wdwfTYLa5MvRECnJyjacuomHusjnCgywUifPYKvmU+q/dg6TdOA1M1FMMn9NDSx7u0iY+2QRr5lJDIhRYwVsozLhOz/WpWl6kUm1Rtlehge5gd3Y3dgm7Z2AP4kFe1//RhRffzPKT12MODVN5SaAshWcEtiMG2s0sHGTUmCReE8JbHrU3IsAUwIKx9Rc8/7tuEX3BIGzT/7eNBzj7MxCnAaASjwpFR0M+byyBL4Y4n/CV0vUmLpbNTi21ZxdJ3Q8ZA10xhgzpSbvzdIQKdPlJMdwZDNjeMBueSdoUXYchw/oofpt5NgcEFVq51Fz+Gz8YyGQaqCKOk5Gv+rX4Dz/FBJ96i4KkNV2By0W6YXXvAMgoEqYQOPCiVYwaYFJ0qu8tbMfF5Y4P8DThnQL0ywxT+/D+K0Jpyl504lm/t1Dbu3GffZ1Ixl2h+yRDudl4gS/3fTd38OkzRLZO7ucJEus2IlWzcO8kXRKs/SF2Vilhe4MttmEpunl+3ej8thyTJawcctsy7B0MmbOrKTrJVuL8yTuTbx5X8YKE/gcKTCkxMVU2bx9jZ7Q21HD6WiiAeZm5+imOhWLn3wq1l77Np/DNCBTSNomj5pPjAL3K4ilkWaWz6UtzdzDDkwnCQxiucJDAp/viXraJfHheARg1H/jZ1/Mu3HI3i9+9QZe0IoPfFSHnu+ht90nC7rUQZoombBtbKkmvbJPdokrXJWVmudYesgMp/lwXgBCGS9T6kH1MZQKAaRu12CvZotwTNC0IN2s5W2kl00iJbOHA1K6kJSIzAMj31lgcrjAgRTiOqr2LYrir9+hcWWf2mRkRwFnJs+ENCCZ7T5l+97C0gl2MaI81JxBerRUMKGKUDE5CNxMliwYuiNl6e0nyPe4twd/+PW4P9yNT35mJZ782z8Jh8geIA1qfJOdxogrfbiX9M/Jd0E4XvzTQejB421h4+0D+CELzppiqZxLn/nxtIhu/sdvxKlTc3jmawl4BezRQ24vAZIxs1uqSa4J5CzGg3IDSwrgNx3zh+OR20LiH4MXzH28KNYe6t7xf+CpV/j9WA7tnxFtL3h07DVUAysccz21zpBctUwypS25kvUMUReSuNpEAjJtGkN9o9kspi6NGbABDoNd6CcG93nd9h22N3uA/dZgq6oCRLPqJgcVkjKfU5wDW8zz84+WLmxKMxWf/oln4+zydqx+h8WAyVQTeJyvgWRJgGRxlOgh2L63RVYMHRiIxtSZwApp+fUTi3RDOEsEYyHdh83Ih6jrRcJnf/Nzj0f5FBKKk+b5jBMv8GRclEIHi9NFwa8sCv6YxmCI7bd3/1as0f01C2dHf65YprWcFXOPfebTcfeyiRFaE0Q6GIcp4ukprYzzKE1TeQKA1GyVhLaqL42DCbE8l3stC/R0PS6bW3/owfPKUR6IlZuePwEQj+xFnvmXjvKCB2Lm4Ap9Rl2VZ+mhbc46RDkGcFJ9VnudoPqIIh0Hx1hvqnZjotICxcbRkJap14Ew9822Fi0kY4/YqMVMTR7E2LKDOk1k5ZX17Th3krR5PL0c77d2NvFchK+S3c/7VO+mqHtTyp3SyqnIEOlo3WR3ox42EW+ww0IDqqgKyUy7UyIP0zHtObme0rsBDVJ/5skokBo19vmwowRbBYdhduVEFE/wOlJoAPlro6DUocHHgk5yQSj10jNyrYQ/nlNaqYttt377Rrx+8zbUkg4Di5c3fppGlwXiv1f/4FuxghOibNPOK9luBLrFc0k3pYwbFtb+nZtRgNaq8zcXt2raHMvUQRVYcxNcFy+axAU/e9QH85skIEPA9SYH4vBIL8oDHh4a3uQjwOST3UJDca0ypVYPEDpg5v05H36lWC03mFQE/zc64mt6yIbuLDmsMxECVU+uRL2sOYWGokyr3+j048oqHQBwYEzp0p6zyaWS1Im2ss0SUKxy7oMX3OaUa8yuzEftJNGZkt1OASNpTu501MOQz9NPGv4j3afdC9zIMHeSrRkAd3d9jdoPEgKIvlWeWYniY0grNqjx/A5BGUrESA2oTsMhUZ5Gxj/ypXnhjQmMRDzfvhmvvs4umYxTFwnnLvETOhSdpBFRG9V8/+WXAR6lBhDRJc6dtotwwfKcSjVOT+LsRrKBHc8kHbnEAHXeY3PEQ5PnYDC4BezeYzqe9zppFIbdfELjUV740P7zGpq+RicWKgupZFAR5EC4gpVwxoUNnkvHSF14JMKYiZEoFpkFQObul35O20ZVo2SwF2AJCVPF3rNXoKWYf3qbxAG2NtDhsd5E6ZmSEzh/ircqAJQWXMdiJavwzDSZenwxSmfhz6iXbVO66RYLu3ii7siecuuIJ0upqEeHJKb2797mfLThoLAne4JmSA0835Rwy/1rgyUEHIAiheG4H+GXMnNcEP7jnlxkfUDcxIn59jf+NF567U1216RyGQ3hrp+n6J4/c+pkfOU3fzPm2dzGc/k3eYQSVXE6N54rxZe5Q7fswnBhbHlOtIi2tBnoh5riIAyopJcCS8vBIT/S4xBzCYA6IhitN470im87eYEeLAVssaURsVSKwJVAOh2WVNqnxUGSvU+GMpPklE1SDYnigoFCSibeCuOniyTZXt/AMMcQUoUyfvZBtv2FDoh9AzlZ/NHrt9gqAU8Wx8V6jhGA0h6S4JU3c4811X7KVOEzLpIK3nkN77V0EdvtBJ242DqribnQerBKMsQa2c+0X8O+65Eg0dvb9K8xmGKiT6DmaHPBxTkfd/9QFfpdyBoGVEKlhkbecAIevws+1TQ5f7vsjP7tr/9x/NmL34497s30famS6XnCbiySHAts7e7NlJBQIkxpHXMRE6REeYPp/lwU25AFDTBV5WYbpbZtDIc1NcbQU74lgkDtYxrWBHs6Y5+7Iz64hRcPd81MAPR6SP/fO+LrvnV6eUf3r53apfxS0hd1s69KRZW1zQdEldn9oFSdxg404C5/58AwodpwhqoYOElpUATgUL2oQvk1U/cLSFB3Hiph45RZ1TWA9CY7E33tlWupf17qP038+SAnkNMKeoHKOdNEIVF0Tgpcq0qRVH2e/d4u0d732RMRT5Gxcxbv9gSRifl+7JyYxO75bOw/SbOfC5ReLgNW+i4rFd1qCx0PvvjyZ2U0dpbUCohCFRAV4dlTyYCAZEG483uTrb5e/bM/id/5N/+O3n+DaBDPfUAGcyoyQrpZVH/5hW9SBwInymfKSP19OiS4e6bJD9p+KbYLIzCiUMq98+x+oKZxsVn01fX5eWZbi6RMIW7JKrpUj/LWTB3VD5m3NC5L5eBgTJ7nfn758Pej/O6OP2nh673iSSoVrGUoYRPaM880dTeKURKkQdHE5uYEjCEobaPq3CLqGTsH0Khy1S8Fc9uQkG5rWgeQu3irdsqv0CCyDKBeuIUniWf4n//YUwnIJjkcUCdwgqgnW3ckB4fzai8qaZSsWWpXrDrzPmOe//M+fzYNvsaiMaymKZDXFgX01uImYpm3exymdyGakN6qR9Y9E36gJgGFC0APlcXY3tyI3/9/fzf+9Vf+fUzjKPgeAcPtxYnFpfjOq6/GT/6tvxs3X385ZeCcgJD3WibzVubm6agFAI0AIRFlDToUbpm84ViqDZSK5koO+X0WOkkQpvgv559AHXlfR31g/78l7N4C4Kifez5/TIR0DiO6MIQDhw9UBVr3scnAz+Mx9gAis5Qk4NrV16I6u4DaocWYkoLBss2EfF2WgSbwmzjEPImYYqOKZ7pJulINTrDMNl9TSC/bj7ll1ylyCV/HoL+8vhON167G55++mLpRJfvHSUCaCgzVf+qAgDSxHbCpYWNTs5w8JEmyVZE4eCaJb7QsAEylmLU2rA4Bwi8B1HviY0gjpCGSWccHIci1ACCqEeQk5yR59Py+f+9O/Ppv/Gb8wZ/8WSxwHpsklfHyM0RgCoUhduw2TdsbcQIy+/nf++1YObUQM1A+XiQtCeuBMV1cqKm4CjD1iBaZlFAm85lVxSWJnzPG+vtma3tLNlrymEBCHwcAR53c8+mC/O8tFfxQJ7/1h8M3HMX3HHUV02SW7NKUyCRPVWgH1auHpgRDHqTLTgBAa2M1TZS2mzNtbUiGjBeplCKr3wxp7UcHzsnvcR4LyOvYSD24QaMiSqomaVTTeIqe/f72brz45k2aWbGlF0Z9Ks72/F7bGXFYUFfW6uqhF0mAqFSnkMozFE6xF0cOByfPa0WBTuwZyVvgd1t0WCSlJ6qdp02pver9Jml38FgHKhcpan8bbTQpqK1b1+Kf/Z//LP4dpHWFBSg/WmVhWrvbYtE1oH92UMMr51di4z51wXCMUyzAKjah1XsFchNL8/CP3LrZ2Q6I+xhr6/UZM6VomfsaIBHdVeBQEls7kyQy15zIAR71kYnnD+0/L/UWANN1M/Efjvr6TkSBeG21Rw/nLkQztpoepVJkjxXupoRKG3uVqHfsEW22sh6ado0eolnAdqu3ZsTF2yXiUWYClAJ6uua0TUGTzEOXuM8wWNImT6s9VZnx+x3itt949QpUBpPDZ/TKU1aM5xUc2GQHiaOAHRDZjd6uVJLnBSSSdmyewvA87TV4JRVR5bG/8nQszRHjzRPFQa4e3LcXT1/aro6AlsNBFormxCrbr/6r/+fX48atW5zbKaHBEluM2c8GyzA5IBmSYM2S9nmaW+tx8sR8qlepUFUoxVRhW9Y8ZkvycqWVkqdLhwZUbRa7L9VUwxG6EbZMwEF9yME9KKWVoplVgXu0x3f7Gj7tWwfm6a++9csR/aDtZJ9lJ6Heg78qIJWQZtYGb66uRh2y1M5QXQq8jdO6Ut38z4ovJUXKEGEiJHKzAGeIxOliR2rkJ+cFoHSIHsyQGlXlfTwTk83FQGHaJw3EarNpN3VQ6y+8cY2qvM3UumKIQa6E5BaZD6r2kL4H9hkvAHLpoRyet4SNE+h9GrZKOyX5XBg3vkeYZiCMLaRSvaaDm9DLVcIecHxk2RAnfvOFP43nv/rbmBbuqo4G4FIzSLsaqfI2qpSbdEsu49ZdJF0NFVvg5yWkfwlnJI99574gZodbaWchvL1ljB61795KibY+j53DXEipqwQq2gWvpkk2OM9h5Ci7Lnd4tAfb8f7u26/wDgDOHuxk/fzb33AUPxcmhI34l2O063klhpICCUgygBVw0i97G+uEscwVRK2qdpnwjpSHBrmSEBJVL3MPdVST+WcANcTrtikDqCdOnohp1TCRFjnClJzKpFSTahQcfAEyE05fv3477tBloEV2tiE9W1SYldOYpShIY94Fg+QyxT3xkUpZYYZU1myQXgEtaYJdYHq5SiLmmHfxO+dSImmLGb/ukFS6fvNqvPzC1+PGjdcAMjXNFLKb6JDF8ZH7bOJsbbkJI0JTU0LnwY1oXJDSR9NIvjr9aAjyWiGQElGzJCoMYRNSN1dAunfr+oHzQeZMHXrGRkzb99iHBamodHVRpywjzue583aYO8KD8XjxIcbeuso7AJhePQY1nEeVFcckjg4pe5ywE5KrnEk00VT1NSRctcMGfO4PklQKkonljs0GpQAY3ChG8jmP9zu3tJQyrCWWlZTT2EFNKAdVDjQcNIx8HvUcgNod0r1W4vv4KYHwoWRcZ+KuE+7agGRuAXiJWiMzmgfalQKINZO6GoC0g4njerIr6cvBS6BzMWniK2GMbPAxJJKOk1J9l0yeq698M6698RILicRbJJPNg6wItMd1yqLhQyUkXSLlPRH3ekB850jBYhtWQGzDzln2CLbDaYXdlbIsvqTc9YD5qQdPKZmdUrQAWp1d13tsC9HcXE+ZQ9qm0jUdnnvEsw73YAS6LpkjPX7tu8/+PQCEof4n3/2mR/27EsWvGhkq02OKdRjgjJMh7cDK3SECYMxTu8uVr2Oio5GylRk0yWp3ITItapr9QO7fuasJwzlQLUxoypFDvc4TI10kWdUEU6hrVr0qUnAAEt8P+FS1RhL8m5TNvQdr8YCskl1Cb6p2s6o11DX6VV+qKu/HDBsIuBRSNJMwwY2/2ezbY/Iw9Dek02qX9hz71HLcuvxKvPrin5LgSmdUFpROk3Uxtsiw0boe9k2ub7KCHayM4lTQCDIATZ7h4sVL7JJJD2wK9Ifce5XF1mcxNliEqmDzJRmd1A+7SY5ll4VcZg/hKouxubtJZGUtcYlF1LsUUxpPbWo+m1tlFo5YA3+3+nWcvgeAx+UNFx9uTNbI1KIxTWoStlIFVbrFRD24exf1S+pVjSwO6Qsmto8USvUhqLc9qJZdJKRhsxlsoQZANNVccEmbLLAnhzsTnTqzHEsLbFPPZxtECQRPAXXnwL+VAfxQFQvIQxtxnQjHTVT7Oqpyj8/6+Q7pVmbtaDOl9C4mus8E29t6ACDdXsuIg966YE1Z1UiWFmB7cPc6IbU/jNvX30jqsYDkzqMu8zhgycFRAuI02ZjTtmktnKt1OutrAzbJMWyjwk2nP718BpAMoKbYxQnPW3uygs2c5bPYLfShgcRncdqzpoWjMiZBoru9ERVqmbtohRbSsoazpqNmnqWL2oReEyJyqw9tVVFxFIfe74GJ946zv8UDvv1V1Nw/JU3/ube/9ih/VkYgd3APJjHLv/npZfbrxTtD3XVQswb/zRxO2ofvqi9X9xCUDFnxyetjvASmHQrmqA/poUqMFNjirMGWBNsAtAIdswBvNo1qc0M/e8xkyLtKUQ/Amr5zftCYvlTJ2li2BG4hgVr37nJvbARDEmc108bWpJPAhOgM92Otik5L6qKAipdOGrEgogv9gvMz4D0t2vA+eHCLPs6ECrkHs2lUuToqiW7ieXIQ3AU0gTbqPKn9M+yIuU31nY7ava3dmOGecb1SC7WTLKaRmc+AZ/mJJwgBbsbsU8+kCJC9YMYskAnP191GgmNPm/2zsHKBrW+hZBjXDjbu4rOfQ21vM07uZbeRFkCPa09vptF+lNP8jnNhHvzaO154+Mu7AvAhKb3De2be7UM/6GvaJhrmSigPf0+eJBZ2o1OK+cl8vM6qN+FzCxvsxIKXBaZIP7tYuVL7NHW0eq7LwNrnWUO6yYpePHM6Vq+8TqMdgv9EE5QsI6iKxTMr2Dv3E2l7Co/4FpJkSPzZYcZUOzg953chpEsBRGkXj5Q2b8QAKbSFNGkj2apygRC4dSRhBTAVAbtqNEc4MXU/4DQSu8Zb+8SZ3f+uoyREhRcgyisQ52n7BcOHPhrOj8VPetLWt7Cq2D9uIRrXVuPGFgXjPMcekYmnkHAD48CMwzQLKk9amI7SHAkJ4wwtS1LyKbQU96XnOxr3Y/fODbpc7UXjJPXC5y/FJlGTIYth5swZklZX0zOXaelx/+rrqGLKGKD/Si08+iM6sLtvNH7rZ3/13U7/PSrYNyU1nIl/+m4f+H6vCa6BdhwbTl8Z3o//Y/Mr8Y/e/N/jv3n1f4n/9c7/RWbwDn9rx86EvdImVmixxwU4N17pXiB6uW4ik+wu1Jmgs12boTGzX/SUlT4G4uX/8pC/lakaNg4JAdTqTrT3AIg9B7NwdfO0zThH6hInhkxWzRkmwwPkWmaNpKyUQ2kIMNxRyL8VUdVFQKCkkhqxo1efBkXb0Y1Ndk/aGnXo7ICzFDwLMmp7wteIGhJajtjREnghCaFrOJ/3q7mgtDbG7JemhRncZv345XuqLKJFNraZJrV+F36yxbVvkYFTBLynFogIEeozHessW766KWFx8bQ3nGidARyqfF8H1bvN2FQbc7GEdNy6eZUxIY0M0Ba4hilcbnCYVgFioCuXukdb5P67QuH7Tff7/Hv2+fd647tKQN+sM0Jo7kvv9UFfF2xtVtzt4UZc7sBp9e7Flfb9uN/fjPtsgdBCXcpdad9pY7344I347Xt/HDNGDJiYMtTF/1/emcXYfd33/cw+w+Ey5AzFXTNDkaJIWxZpx/HWNGKBIHrJ4gAB8hYyyEMeWtQC+lL0ISQQNOib9Jo+lCzQwkEN10riJXEcT2NZlmWKGtokNaRIzp39zn5n34f9fH7nXlVILIlmSIl0/+TMvfNfzv+c3+97ftv5nXO+2PnptHeFYCrxtCnUi+sxL6K+YiFw43h836QckwSM6k/CEOfBujzFyBCzz44cSy179qa333wjPXGwM5ZFq9+5h5DDSqifubFiau98Kt0ZGEkT2DtL1CVSuBgTNhZoKEUNHKMW8Z1z2lNUWAfBaQORPKC0Qj2b4GCql6n5eq16sJUMGpoYdqqxxEgIAOgulu6cF6VlNW3W9qRAxCUmAHHDTWaXO8rsEiCGhXa37kwz13pxnthrGEdoBbt4ZaUmHT12LE3goBw9zjg2EraOvYer8HwdK9fjdf+RdXIj3TfYuOSODrZ1RUssjAyGh721bTfzXXpDym9l9MSNDqd5rrXjGFKX4T572UM61qrWzr9f0e8LQKXg7B/83UW81T9878OqsMXN5XR5pTd9f+pK6uJnaIYpisa6ICxmWVYxEDVWmYcJ66ijSMIERJNzzG+4OwWLEis7taR/KLyWnpjdldrZUNCFdbbB/FFsFEcydgCyVYDkrDQnyuiELCL1+gdJl6eAGQz8mKiDp+v47/jIQBjxDdtb49NZ/yuo6Sdad6cj7ezTS1xsA6kI68uSDgloz9Bz5TNmhgH6GAGhhqbkO0xou4wXrgJGZYdee+TcITmdvC6IZV8AVYAJaHIFTXzwWpZ8eURFAGp+2KEQ+8RCsfc4p9NVw9DfDtaw3gJgZ2i7Oy/RL8NOXCarpe3QMSIFOVZYhW0oDTcYijS+t8p6hNp503TKtqPPpjokZv8P/h5twJp/SMZ57MVKJvkWJjT13egJyb5lmbnM/Q9T/VZd+HnOB1WP430B6FXYc4GPP/S7Rz+S7s/7/jK9Md3D+nSMKSq+oYLDRbIlFrWBWdpVepzm5Tm8JRPyGKu8jkgcDCDWhRoadq0TVOv2zkPp9vB4+nT7gTRRYkNlhndrRkYYmkNFWT49XckiQyYZw30Ce8idy3t6rqcTzzwTNuBwf186dBjjfKQvNXceIzu5mLa3d6ZSoZCOf/KTpDThObN0xxwqyda5BiH+QMYfoLHmoZ4DdLSrlimcazpDvpfOBQDXDFJHR/OcaWL+0OIsRiUT3wEk96DhyxLW8W7ULT+CLYLa0gH70BWyNEMEuqlYe1n+rXNvS/pud086eeyZkFQtSM5a7NudzJ1GNqcaUuyrMSdi42nMDgfsHPedQN22PtmZthw4lAZf/0c6GYFpTJclpKsrd81iJx49cSo6T5HO2HbgybT1OiGgeYjwkI4Pkn6+8gMV/7av/kYX93Rp0/3N7KX0e1f+LH23/w3SnDB4VU0Q339BaJjnIfigPerKeB2SLyx+pJcM4RoOWYDP7VGLjHaskO82hb0zzGy0myPjqY+plHgjLApJGIR17ebIW8sLDWGL8bATkSY4v0Dy5Bo920yXSe6pY1TAeR0jxRGWbiMtHpDV470a32vEu2xmYaFPf/ZX0y5UYRvgree8tp7TLmPrBofYyk6SWS8mMOQdJgGm76W9EbagQ5m8EHVRKttebcgAoCimjbQ7xpIp3+E106GcZuCeImH7AbocINb+YziNeJ+S2HPNOlMA8xChE9duOXX0SPrEkSfT5549gcsGYJl0tI6WMAlDZwOPhJy/mVS8cS1tJ5toR8eRNPLTyxEtqG0meM9U1jHpDEC3Uoc2ADpy5zZJFQ1pjBzJu+NmwMCUh3AowD5I+vnKD4X+Hx3/7b5/2/sXZ/7rrb9mWKucLQGx/Cd6rXuOq+X4WhCS61xGbuRDQz5GH2QSDwhVTY5It4d5q4QQlu2pqFu3HNgGcAqMSpiDJ0CaNN5htfcJ1gXU8BrltEDgnewGeeVn3Wlf55GkvTfFFgb7OzoxYsmEYYB+Da+6jv13XR5ty05UMxLIIG0j7xGELuqoLWdj3nUaAEiAkp6lWg3A8al01N6LtCxAoM1mR8vB7dyxnGLq8JbgVuI1EfR13Di2ZUUiaQeC1qAHpfNO1J/0pC6+S5DfJm9xhQ72LDujHz+wN/3a8aeJ/7G38N5DxPbI94OCK8T17jKyUrXOvJc7d9KuQwfTduKfxWvXAC4dklW6xgYHCFizxQWg7ifR4einP0fYqD5dvfRq6hkeS//zhz9O35p4I/3j8g0cRqYtbDLiQ5tJ6gphQZApHMWJTYQCRz3qQr7f67Fetf7l/3L1fxhNed/jA1WwTx392u937dl7oAviPC+4HMHI6jSrq00ym4WiYFLCBQB5TjUVAKW+PqNwyTYSTGMoTrUtA0NVAYrZeaJd3DMPCJcwnicJqg5NlZikPhoLDm2ysgB8JWzQlFqYozFOeGQO77eBk663XBgZQwKgvq9fTX13bqWnjh5Lq1OjrNm3N60iFWuRHBvYSO1HjvD+jTQ8dCfqsMH+cGsYmHXM56UyEQM0TmfvEUAmpK4AmrwDZfS2mMvslmI6JdXmQQhErEPbS4tijNVrkZ4F6ASsK1QJsgis8x6gFo5KpqVd1XfqINXTvm3pN/c9mZ57qj21ung4+9DVt+7FJKAs3rWOB7zJHJRqQFkaHkytgFQ7oudHP+BdOY1rCS0B8omtrjFRvpgOHDnBhIG6NFm4la4UBtMPbg/GRPsJaPzTjVvpO0hzR4YcndlJmtlOkkSYQZNmVwnAI5F3kNT7K7uPpy80P50OsG/xzprmdLSORTGj1VT/nxzQ4UOln498KAC9iWqdJUGqV/2pCrXHomdoND2C7/6JhlL7hCQxuyVOAkKlo0FaL8kc75H8nMZzy3E5VZw3xPgkX/uHRrivCi96JRXw/MzjW19pxDEhawM1tsZGfw5TzbK6aivrLq/B3J5rV9OX/tWX0grn3+q5SVJCS9rDd8MWta0MWRWHmTOxIy0zFtpOMLYJL3OUQOzk3BjqMmephDMBSGSEDon1jLAJ7bSO2rgh8fhbSeG4tOrWtkRn4lysSsCndAnJB6BizULtP38oVwrovJgd4/Jr4TFDAIQeUrku/ZtPHU+78XCXJkfpjIyZsys6v7Cn3UymOi1g95FTzyaJrF29b3eM747imNWxLkwN7Z3Dex5hdt/ASDHtJBBf27wrLeHg1KLSf/jGG+lrP77CyBDryTDi44oU1tWgvvzRJBpJmER0hjrq4tIlhovmiSsOTw2nb1R/D+2AZkKdv3Dwi+k/tP5Waqv+58vqf5jtBxHigJIffswzHaxxy/ad0O7zAkrAeVhp/9CrC1hxTWbYEM9X1Er5dtRuXIT83o4ElMkwVUZLBJkpkw3yugNkEwByfFbmuz9aM+pyEXBP44TMG4aZno317+5y/wr3TzKGe+zEiVRkvHSUYO5uAtBuLFOLx2gQeIO5FnXEB7UdtwHKauwj8/bwpegojpBQbUEEwMxM0UGIidyMTFg3bTSdBcMzzjnJ+9KZSECIhfN11MPkCYHsGLber50sx/4AH5JU2jiEZ6byHOlns9R5cXyS5UawW/H+axj2q2ZUaGZkMHfcJuxYhirVFI6mLGM+rDCuu4ET2MyoyQQgK7Ji1gpj57XMiBuHJgXs6Je++b00zoJJk5grO9AC9TgtP3zt9fStN7sJ7yyko4cOpAIdPXIs4Yu7ZIYAgdbyC2UDPTCr5BmH7XcAQNu2wRQ44q3vzAykV+YvIfHr04mGA8E776WNF3b85W9e9PuHHfcEQAshAfJ1Unb+hKyVRp0LwaUhbqVipj2El7iq2YijcY8t8ayc5S8OJUv+O3YpD0AKXm1E7qTXteDpjUxOoYbYdIWyXHl0EUkosxewbezhV/qI/xGL60d9zKBiXOB8kh5vrp4jC6QtpGFU+BoqaI7hp+WZKcZSDfaiksaHSNOfYfiqCZtpL7tSUTY1iMW5edL65QCxXqvJEdqAjqLk9jQIKs4rBWxn/jTgjIMRNKAsaGOH0suWPtZJJkG0OJ93O2d1MGKa86z5vAAgpgGD2T5DpIVNTrMSPst71BJO0kY0dcrZcnbVJUJPTuRfwta83juYrk/MQIPNtO3A/jQ4PZe+fumt1HXl7TQGwB3jLQHA9v170qUr19K1vsE0CG1pUjhnOngZboJMvvDBL80pJ3cJushGonNrRjj06DClMdyw37lXJ/DVyavp28s/xVzYkTrq2wqMAp39MNvPN3ncMwBLpdIycy6Y2X33hQw0+giEVrm6jomGeJ7TK5EpGXDG4ju0TbCGSpJB0VZLEIwBz5CkbiwINSJm5b1N2l40vJHPWeKDbr+l1DvIRJqegcE0RtDV9y8CPsdTr9/pY5ZYUzCmbVdrugMjGRtLm8ztuDmE1KAsvce7lKfD4xK7s6zrshUQukGOqfFhHtAfVLOCzPqoJh2nNQPbNgrOepIJYghNcHCvQLTNqmHvsb2ml5lYYCyvhrHicGBgHpyPtjtaU+90SiTnHJ1lFomC7EsLpPvfmWVMF5W5nTy+FSINy+QGutJp3+BQ6hkaT//9+6+lS6xfc7kP0NJBDx/uTHPkBb7Wcyt18zNGkFm9tEib9hDW6aP9AxNTqX9sPNpkZRegaUXtyi7ZopSQJ/LOz4pzaScMwUGpageD9C4FsgYg1VYeJeKQ3556M/3NQveL/+67/7nLc/dy3DMALWxxYe71rVu2Pk8P79B4DhULcyS2jQoAUvFwMDhnT1Nl2ZNsYiSGQlDvjUbzaY8LqUnDHGOdw05xS9RlCOtqp9pn2lUGpw0GtyEh3y4MBKCUNEtIsGHU11MHD6Yrt25TB5bKYChrBZV90wV9sGluYB9NMyIzprShUvbeReypJVKllghjLEdPp05c81/s2AnQwizg/Q4LaszbZifEq2rz3mwOpWVJ6WdkS9MOQz9+V4rEUBvSNnZF4lqWgn4IZjx86rqV5TzqUPnv9A9T17Fogxkwy9CnhBotIilHUas3RibTxe91pT5st9k5677KrDwWmsR4vDHAs/2DrBqCJyvhg7RoHvgzMDYRCa6aF9LadgUHuCe+qZU47EB2Qv8y5qrD42BCSGBo5GgOzEQokDxhDJP2CFT54pa3NXerClfffutsFHaPv+7JCXlvWazbfHZ9feUtmNCiLUVHo9JUmTaH6lGFhTHBCU5mkKrasudr73JvDOXAunaX/3hGyTFHIFYJueRQXEiXWlahZ5IRTJcgOiWDpEjplTVj003h6Tn9cpYJR/MAbAapdmt0PI0yn+T4k4dYJ/puGuy5kdoYFZjD35rCU76B9DzJ2i+trcwjpu7VsxNIgg0YCXGjDTgCSK0gtoyU8IBvrQE1zHtjoxfsoFiXBtC5tId7e8RhpyS+JJNd2zCyc6injJIOrj/N1bBppVnAnfO26x/efCtd7mGiOecNkTxByOgAtuc6Un/JMXEylqdmiItyr176DFK8ahnbdKw2FUYn+dtxdYEjPzKItJ1LJM0qfW1b/BJd5UMgWgd5AoPiWe8JoNJGHsy85X6943BIaIvlhxSkgxkak1eG2lar1k9Xyr7Xz19IAlqoDsk2VXGqesHk0YqtoFRpooeo6pz6pwGrrWiSqZJRJsRQEG0Nhth4GKUSj2EoGhsg5Rl7sNt2CcpFGuhzZpUooVpRryV6ucvxiqDwRG08BDNbeAp1toBdYl7wIEb+IqptN+OgNxgNcfGiSZjoIuZbiSHWMFxmB5LgAhweUHdUJ5JJaW0wWmkmCCU630I1R4IB1zgVdXQPXh0PbUAlQi12onmJkZUN43RmHB3x+QBBSBzeCV1KDJF99X+/kv7q1bdI+WpIN8ZYdQvbrL5paxpnm7AS7XFawTgawBQxnZ2Y0YbTYOeVDkvSBsAbQ4ycScJK0h9Ch/aIDgHtrK/PKOkqRwgIeBJnBCFgDD7RZtfv8XtIa4SGu1G5dqOJui7OGWt6U5b2IUOx54f7e79RKfdeP39hAFowKeuvQ9znMbA7RP8qw0SZvPao3PhQXzZaYoMpbSpXrZeRdRArGk4jZbAN8zN6LyW4vp/7XXjO4TwfUqXGs5SzyBalUJjrGMp0Al4T11tRz47ShDTFKVH127nN6ZsgblhSgjAiMEua1f5djIESR8wJCeXwCu+zE2hSmBKv+rT6RErivHM3tAEbGNmw3W6ebX6fKzS4zJmjHa5aoLRwBCQcFMEnMMs/UCd4o3RyFuBffetb6evffyNtJ0GDtFNsQSQblHBuiw1TshgqMSsaRzdoIIhsWGRyQw/HrrWh3fBblctduSMIQEIpedwZQsS7eU4A8qMUtl4R2fCa57ktQFFus/dqKnAFemeb13KasK/dYlcpv7q+Whga7P1yNOwX/MVr7u+oq2k8i/QrmS7lYUPUnwZu7Yk2V+PexW4kmH/H0Bw9SmkRwPFBrqmYBIvnpYArkUp4bRyfVNVH+fzlaIw9MIbFzP8LVWegtyYNYusIbKgfxPS7PXgIW1DjmYv8x55EqlwpDIVk8R6f1Qs3JCQA/Vt7T0nhQphKM1fi2sIIzbbtuyK2WI8X7vJxSjd/BIGhl9iClToZEDborHftVhM6M85l0fBXW8wQg/zaK99I/+vv30C1VadWHI4laEnLo6xoR/ylzZodvga9auq5ptq3mdRT9Vpr+hp0yZ5pprdaxvZWzglLaSptwjmkbYJKkNsJKTZ/53rcx7MKFbWTAXmFRGUlW737GTxxBQnmS4lk8NMWdT+Hr72vQ1XM8hmMGG28YKxLkZ8zmbOLbq9X+mk3GUKRANoQThRfdf6HlYcCMlkVbU/T+BepYQzzxe1X7Z2qEFW9IF7ASdFuESie57EgkEFTQe0hoJWCQUju1dPcc/DJ1IL6XiSg6nDZHOqshbq0tBCopn7RRaivxI7pjtqBfI/FMClLgPndRZNiBS2kgt6vIPB5x3Md7YhQEKCrQyK6X0ekalH6BrYbRkNuA4Hib377m+nr3wN8LKPvIvG7CbYXsV1Nl3ecNjovgKmYH3Y4O3uW+GgHjX7MG+kgiJBCgsHW5mvafRBHGkQ4he/S2PsrAoEbwuYWqHY4zZmQ+MED6QdtkfgCzkMeS29/5JlfWHn1P46O9H0nbriPX/cNQN+1MD/z+rbtrTsh4OeVbo6fugqnol1QBrkhTth8/CUxJKygUtop2fjKBYEj8401ZXXsedoZ0lDHxNtCcnJvSCmI4RFhAz6DuDwvsQVoENlC+K+H+pnPPo8ka2Gl0UJIC4m9xHhxK6MrjahU74mdOnnGDuMstQy0CqgEo+EU1TBg4x7fHRIIsBlucSElpzpGyAVGe59ZyqpAs4L0pF1j8PKbP0lf/earmANuK0F+IaRapt3aeG6ZsJ0VGHIHy+1aJg9SmtmYDCbKpi46S9JmDU9e1es179EmzdTL9yt1A6iczQjK5UozaRzn/AB95TNxTmnczAiMqr2R4c5FogaaHs5erKPjrW2uv1wc6j9nEfd7ZC7e79M8R5LJOaRHt/ZaDQ0wcKyUiz3JZBA/2iGx+n30IO6GmPaiUHFcFy7GmbSLQvWpPqhZBaiC0nJVt/ZCpY4wi95DWbH0LOAOlQQwlA6Wn4kJh/i+yLZgRw53RH0yoVManl4k62YsDQ0MR1xsnfSuFb1OvHGDz1liGEoxOcEZbDgmerUwId5BmwVbOBiAQRUu2GS43nEsiAkm1gigz5FsO9B7M/3kRz9Ir/zdq2l6AVuP57WjdtABlvB47cS21VBPVDpaIL2UTJop0idLfNvqe1cAn/On7dwBKPkQnTPbj9JTYlBCmcu5jChIQJeBbflUvFyOMIYrlK+k0xkx1hv2OhEKeYU9Wmioqz5XLvS+P4KH9/00Dxqgrt26628b62rO0KhGQSRxlG6OAmQPDC8VVawktFdJLBmoVLBHqbrDFoPQgqki8i1L222drGsPjXrLUbrao7VLIgTEfWE/QkylqOCUsP7IgAYk1PBIX3rnneuxgZ/qTGb5zBDB6MGJ2TTBEBaKiOE/JF1cY5FKhvDctdNOlFe4yqaGajanW3Ev9dLckMmu9eJ4tptK81AstCQoZxga7L11I12+dDm9Rp7fLXZagkiBMeCVDqB+h3GMXKbOtm1lnofle0irFZ0L6ux3pV6WftCWc6tkw1AEPxkgkDA6C2gN8CghORX0yhIvahztjwtejC9+5sN9RRqoh7atNuBOlvxYJJxjBrtSFulfqK2uP10o3CLa/y87fuE44M97XalYKOzu+MTp6aXpt0xRrzA4DGbnRkQnzAzXDgxQ0hD7pQSSeXGOhvvdTBrttli9lHMCQLvNtfC0BaWZtlqAgL+QNTxP+e4WqASQuczh0NimA4dEqGbA1zm6MeeDZx0+DAOdd5VIaqibmkvXiL+1saLWc+370rMd+8kmds1Bg86sV0N8L3hF+dZvAy/AFewdo66upXNRLyXIOhnYBrwP7t6V5y43tqSrb/ekSzcKxCgdNtMSVKJRDmrzCVZEGMFzN+1scXEO+8/Fw3kXL7NzrTPCIdO9V5tPUAjAdSx/58rwSmhIR7NylEmEKUtL6Bq4zOSN62oPpbMX1DqC1s6mtDOu578QIHyuQB/H4pXoRiBi9yjOKW0b6pu/XHjnWoGi/8XHAwGgtXincK1774EOPeP/tozECgJLHf7LdAEVe5fRWCWhxBFvSivvtV9mNZI9N6clqiolvhJnDRWlkV2Dxwc78jOUE5LMNVlkgqVJYMpVXUtMppRbvQAjp4ORqjpuDyaH5IW51CbKnpxdYiHL3nT5zhBJobfTyafbsYPIPuYZdyW3vm3NbvTiPGBzGA0A4wTAQJe3ML3phz196fNHOwj3zKFql0kdW8IE8IUa+xkgZXZHZnfP5AwB3ZwYqoSzY1lHAaNzYYfO8ck8tyScDaILFZUcQIqOR/k0EqrY7aNz2z47tzQWduZhemRpyB/8l3L+VnUbv/AWVXbcy7OhddAsaiqcoBcBX7dlPIjjgQHQyhSHChf273+yA4D9qUQREPAlVKUxK88odbAKg3hKEud2iD6xGoTg79j4BSfAHl5NCr0SbVWqQPT8gG/jPgAZBj/flRAuVIlhzDvNTIENbsnAtYgnwggnj0eyQah1oWQZ1AfCO6baisQbY1kOJfYMNlqpUEy3GP6SWSuoR0MrjbzD0KRzM/YzejJK0HiKKZ9KZGOXtsWwSNf1QoCo0hEFggpbE8HJ4xEh4D1KM7WCdRAornYaAKDNqsEZgCkNzeapJMkuEyu0o2leeM12qCVCCvJd6ZVtO655kbJtQ/xhX/MJ/wwJ4A358HlNJKxeURy0ifr6LPVfWFk+PzE2/FLl/gfxabd4oMfwcP85jPbz9l4dj8gGARD2qFUBQyudCxJUFnSBPKGae51tlQygJpgpYQWQ6miVCayCLuwQys/OhiraZtBTYZapQpkx2HCqziAqSQ4yjHIFfeWwTgJEZi3BtF0kM8goy6tIjmWkmokQDn8JcqeCrjOFschWDT9jr5ARHJllJrCsMx6rOnPLMQ8TGAx46FQ0Yzu9m/bkNd5nmtlhhggHyFqRRrHCF9dMA9MLd6F043+aCnrTkdqlDaw65FwFbIJKWgedBSFlSCNtaSlKMdDJ9mh/S1nusI4u39wAABK5SURBVOz4S/pzMpghBSU+JzipHS/IpbFCg+iF4Dvn3Q/yeOAAtHLD/XfOMUD9soyU6RIkGAozHKbTsLXXq1YCdlDToKeufTgOnFXtSCj/jvgaBPReiWHIQRXl4fUoG9qpmszQELAyXjAZGJaonstqyGJlTK6bkiicI6SSMa9sE/EI99QjnTxkjPcrid3MUKmllBPA+Vq2YTUkbFdl6NF7jQxQFAdtCTvWTiRN1mMJXtPIDK478C/T/edwpgDLq4ORb8g0S+czO2faMI3FhXNBnWw7r40frTlrG2YIn5Zpvb3fc9LKI37HrcKxDDulst+5f8MxesoV/PJwdW3l/M2bV8/Fww/4l1x9KMfSwtx3WlpaO7EfTto0g8z2ygbSjEzyhNMZXBAppKC14JyTlVSjZWjGOTNqZIbMDYMb4qkaBERmNk4FoK4kT0pyh9OksXl0qseQdBA5050aOV4dAIJRMN4LBoS3oOrmYbTPVDx0VaOSQDXkjdl5scI+k3fYNBvEzpUlriDgh/IEjuO1WWX6dpvERCmmEyrVp0ii0O4zM0cHZCsjLqpj2xW2Kt9jh1AlGu23hKADqLIFdmbrphNkVkqINN6tPS2guYU65vukHX9EGVGPoDKPiGYLpn1On5DWqnvv3dLYfLG///ZXvP9hHFL0oR0DA7fP4IyetwdW7B/Tqxw7hl30Mucg5PWXbb8/QXQ+JaZqRbWnxAgGQ5AgMIT0nIcN8JrvkCHhxcE0bTaBDS/imkx3ZVXvU515wRSocIgozx4/ze6abuxXcWBC+soU3qvKUhrUoIoFJCVnEFsgNc/1p6PxHk/57gadJ0BjXQWKnUJJb2C3jRGVIiGgBuKLDq35lGGOrCqzA2IHa2QFVsHkejgRmOG777CzaZ7YLn98adSLd9kZvWZ4SPVr5YLRfEZnon52TztL5SdaIR1oa3Rs+ES9X775zs/OeO1hHVGvh1W45RbHBs8R7zsvgXUO1gVfSIvMTGOBHhLCQ5UFb4PoslUQhCsh+ASD1/kvIMKu83QQDUmhrQljlKAyTWJL/CjHZ8p/u1agUtmyK8OIEt6x23BYAKH3KrWUhN4jsA0r5aU8UM/ca+jHd/gsD+bhRd8nCHiDxNX8MCYawOQ+61JDHQ272Oh11W9ZUpnAap38sZHOuxassbcdIPOsPypOlwvOnQqQcU3P2XF3pbMdUalIuJy6WAd+5SK5EkVHGaF5rHtcs1NTBt8j1FV99/z46NBDk3xWw+OhqeBcfP5NfKtr+87dcPju84uMCrjjpapLZkTgmIZnYuIdY39IfKAQxFDSyExVgupUAgXTuUfJFyBSbcNk2Rsz8Mr3yFjDJQazYzxa28p7BHIwPff2/wf+LN2c77HJSe3JOoAWYOTFIXFQs1lKZ+BFwJjynEwkt2W2zNdsEKCqUsu301n3lbWl1M7qplMkms47pEW7HDNW0m9jNhxFRfnSx8xt1zz0n56zzLL+dgY7ip2Br/FjapyTwQSVnd0x6LCXeX/5qUwbABedTSrz3Q4fHZVnrKjP4h2fHysOn+OWh348dAlYaUGh0HMOD/hFGx0/EM7mRmwJpsm4MH5h1CpgcjK8jIthH/52Zp3qL4bjKDSMfYluj5d2clemQFDjY3Kb01IZhgoeAE9ruRL3RyqRKgzmO8Mu5rFw1SSFXS7YSD1URao6zYR4Puqj2vOFePN4pdpZMVUVRms2VOxQX2TnsVr1qkPea0zP41BrS5om+J3TuXAw6EB2FpMfrJ9ArqHO7h3i3wLOttk19a49rE+s7q+Kl1bc4/sErtI4Gmk1eVTa+FNhtvRXTkohr8sJf/zNzu5nH4a361t+3lGp08+79sDP9fffemlhZe0UQCzYq0EKvTbbd7ZeQMYwGwQSeBIqCMg9Sp1ImZJsMCvsO0ELOJ0sE6sYwEhnrLk0ms8FWfmi8S1j7N2QGP7gUHCOpVtiOMt7M9iIWQIiR1x8v9JGgCtpZajvlJF6l3GIBb6rEgWQUjyypgGO95gt7OH71ihTkPzK00+lCUI7JnbGTk+qdyVPuRxeAbqY7EOihIBW6tr5fIc18tBpyJ0T9lmnoENWs7Yj6sLd3Obd5adQ99IlzlR+cdXGUxhtKzHH+9Tk5PgFrn5kx0cKQFu1tlDqrqm/exoiFwIP9FYJLPAklqAQLNo1BnzDwPZGeV4GpWPFwTAY5L0C1WRXR0PqzcNDUkp2Jan9OjxKbM2K0R7AgmkyI6Sxn0iULWR+uEzaJBkrh5gEpBSMERlrxvsDBGVJ5CiBgVz+8wZtL8vwb+ruWHEwFvBRN2SUF12LKP3G5z6T+hl7NgQVYRfOx2yzsvRTillG2I28S0PF99reYFbQh4KoUJgCvMeOIX24Jdqjg+czgstz0jU6odSIm/K93BCdghvYrnf9FOP63d79UR4fOQBtXIGjvqblFK7Cy2EbyVQZxuemq0pF2MUVqSCcoQ1YGKolKKOBDcBgdoXIFankFlpqKwnuT0gsvilJwu6rED8Ib4aN6qsswVDDZvc6kX0DALuXnePayC2eVywpgfjnC6wqZUWdAItMFVAxnAbDAxhIbQGvlDMJ1p0pnzq0h8ndLGzOPwHpDkiuArHK/GRHQDxtx/PHcXDf44/l62BZC8Wa9l9IPYCXnS0vAFI7Mdfjk2uaNFFGfhBY5rrmgnLn5lUvb242nQZ8BUv5qI+PBYA2slDoLo0O9X8FKL0IhdlPFDgJDH6CuRCZL0EP99swjBMRfSgq+FRrMhKSRi8WDKsSHfUXUk2meQ/A0L4U3x5Kl1DnXNsklWlplcwUvUdy9ZocBuO6OXr9zDx74Uu/Ck6yA+MKpV6T4VEO9XOMVOdBSSl4dHEiVQsga3e6b/EGHUgnSHD+/r/+9fS3ly4FIE33ckuwRQCo95mTOPB6uU+pq/S2Q9JJM4a4N77RLtsS3+0YfBeMFbrZ1ngmeqKdVwR7W9lGpPJBnwTNq9KLqNyvgL1SNOpj+PWxAbDSVlJ6XsLfPMXfBSmrDeNUQ1WyQWlVh1g0GVLiyn4JKMM8lHJBa++DojoBIZn4KzzjwLAqmrigYKQw1aNhEL3bGu1LrgncqSlWCkAqulVEQ20Tk7gn0+efew6JSECW1CwnKVWh4p0jUU/MLq96mofJlGiNLBwkeLVV3e1TMBr7M9TUylqI88zFXQRgLnSuPFsGfMpfk1mzhLaDcIY2GaS2PfmffYS6csbl8GxSODzCynv5F20ud1jBaBkhKfmuwxJk4D4POkoXS/mempgYfSlOfIy/PnYA2nY0cqE40t+5sbZx3jX/XPhHsM2yhIVsqKRdhTPA/RIzJnzD4CAuJ2RCSD+InckcMsLiQ5AaktjG0hXPfPbXWF8GqUQssBJvC6mGNDMdfpkNcBYXZ9SF6cdXr6cvfOqE/YL3aNwDKNU0QDMjOnLzmDNiYLueSUV1fEa9AKjlu+CRE7j1fr947Kn01z96HRuYGXs6JwDWmKjtVO2DIGxBTAVq71xlX8ot0a4yeqiSLUf682ls0HsqbRBsev92zsp5kzokhvTQhqUVSLrqF6cnRj82lWst3ns8EgCsVIgV5c8xTN8JbQvG4Ay2BgErRORGJQRUD1UqYe35EWuL78A1NKRw9GqcDACZGLEEuHax3MXefYcBU3Z6fIE2VwyvUbbqzLm4G/zgEqefdHenU584FupVRGQ7SwcpZ0XLeM85QaeRqZSm5BtQtp4CzPHbOjyrLQB6hFStUOOhQLPEdvx6C45PAI5nlFVmfyvt9GLDLKEZttFkDtV81FVEZXUgdiPOKMY0TSqglAKaHJYDArsaNmuQeiMfu9SjNu8ejxQArZXSkCG8TgK5Z1EvhaxOgBPU1XZTWjERBqJDVRkG8/OMN2UH6ot7BFQEpCnPjGSvRNwQ9TdeKqZjn0Lj85y2lkcwWWbzL86pxuP8Zrp0/UY6uncX83dH2XxmmYWRWMcayaz95gR6A8CrSKw1bMnF+Wm2ZBhPG6jWRbYVWyDBlDenZ/bvS6/fuBX18n2q1ZzLh6Oi+qUzKP0MKSm3zX62NpEkar14l5LNtQ0jS4Y25sOScnn+jhAM9ymxo/50VP65vdSLpdLE6SKZw+UHH5mPRw6AFcoUhwYurK1unobyFyW+hrrL62ob6TnTtbON4wOoOwmu1FE9SXafEV818CqCrnClGo3U3tbO9l04G3rSXA/1y7OWr925Ss5g2GOUbzjH4bkrPTfSsYMHiA+Sao/NqCcsuNwEGn3KfBIWEwecMakJ8MTqCZSpJ+tOn7tIZC0wZTQv1g5oeK+gNwi/FXUeEpz3ixzbkW3d7HREuAdA6cFGgmi5Q8V90U46GOdsh+PN5T4V5XP/y7y/c6o08UhJPZr47vHIAtAaluixw8OFM9uad3TCrIsmfCrPHKtUUgXgUIGN2maAR0nh4H8Y5Nznv4r0UC0hU9LN3iupv/daPFttoJF7Igit/aTksFwhjJRR4QnASzdup+OsPaMz4aR5gbKCXSfUY7iL93qOtKV362SAXaA9ybovt0fY85g/6uk4OWBt2ln2eF1NQjAq3S3D+SuCCIuTv6WC7+M3VbVzWVdP5/YIWM7Rmfzba9KFkZEuVjfqnC1N4uGysMwjfDzSAKzQjWG8wnhx6AwjrJ14lRdVRaGE4ITMMHfQFCLtH2OIIdXgG/9DpSkfY6yULSBmWC11qHA7AKbHajl5f7ds0PuMIRRBLgj9Z3D8Zyzt0cnmMIIjCubNAkfQ2ikEgVIXBIaHGhKYOm0n62WCLBvvMa1fwAomHg2pW8Mc4HV2UDdI7bNOeTQjmwd4Ircg7F7Kjvdxzk/bHZc5bwDcOxnv7kLqnZ6eHMfJePTUrVX+p8djAcBKpQXi8HD/maWV2U6ofzGfh+GARAboEMj4yLbh7wxSmCWT4JheshKiDoY1ESB2DDbCPDg7MYZsOYZqAEmMXogSDxAzwiLqbazepROggxCwo1xtN5AUiAqAcE50WZ929vwYZRk5s2gEroD20P4zLc137jn8dPqtP/jjdOSTz8U9Oi4CUYhp770LOp7x3RZcrlUGf37dBe47PTTUd7pYHOyKlzwmvx4rAFZoWiwWC729PWd2bG/qhAsXUU0FvVBB41is8iDsJaUN//QE4V+oZ/dwc5zV8WKXERFcoc5Q74LUww8B5JfYHZ2yndHRywLoHbtZ7pdRkngGoBmOEaeC3IeiA9ARHK9t594iK3f5DutRuWZShaElA9hP7DuYDh44kg52HKWeAJqsacvJqjTXRDBWpKD18gfTokSJ57dt27JzfGz47MREsYvTj93xWAKwQuWenp5Ccbj/TF/f7U4achaGdAnEcChgstacKFLyeZgQoKrcwaKVAsJVrrQRTQHLyQdZlWYVB5vhfzAbaJvRPUEMTykYGTAAzPvedXooPzQnYDOHZX/brjToKqX0hDwWTElINsEY2dvhVNWl3fva0/69u9Oln7xKCXYcpWn8j+E9v+V/lM/7yBLqQj5/ecf25k4823MEDR5pG0+6f9DxWAPwvQ0rDNy+MIIKWl3b7MQJeRGbsFvGKXWUIzJS75ITkWfnCMUWgscCDISGAe+N+R6xEq4IgMBbVcSFeq9OP+0fTCfYjVObM4DhNQphccbwcnV01pg8dZgdPAdZuznmhHDNWlRSzwJUiGRnuh1rP5p+zLYJC6ycYNxRWalI9b2aAiE776YuHIzzLJi/0zayFvY3HnfgSXYP4hm/XAfauUCLDDu8xF7CHSyU8rtg6XfAxfOgKw/yl50Yl8BQImpbVdTjKjFG5x6HvahjAVC0+YwtOkdkmYnibma9n1Xmp8iaiXFlrkUEL0CZ0l6WVnN11gC9vwUpwIqMasHl8B8VcmSGNSbTPjaYcXjOBYxcAk5o80ZAV/t/qmrXLwC2AgX8Uh6/dAB8L5eIQBT4uwJGNgpJzyNVfhfJ9RyS5WSAjZlwjnzkWBqMd/QFaRcZNDwMPkI6GquLzGrsxgJ7Ez97YH+aYZRDaaV8c36ydp0B8j1sEXEZzMSGi5QVyazcd5dhmpjzISD538omO0rMyTH2cUs1hbWqjVeqq+52kR3T9aiHTyDLAzlCAz2Qkh6zQjo6TrZs3Vp7sjRfen5pfu455t52kM51UtWrrSZQ1pFKJhg4q82s6A2ko/N+nfQOatOzxAavsBj6Kpk0rUjEaVaw3/9EG8vs1qReEhkcu1b6mem8SFl+NjHFcqw0VsAQ7Np39PCV9me/0P3n/+nfd5/q7Hysbbn7Zf//twB8P4LtPtBxsu7uRsfdqroOVrfqYBPtdsZmWwgYt+Bht+jObKmr75hmS4WD7EG3jUSC62yms7WhgVVMlwqfOXaCxS/fKa2vVZUAaoGhwJmG2urC6to6OZCN3SzExt6Jj7fj8H60u5/z/xeapucAQmXKXQAAAABJRU5ErkJggg==";
3003
+
3004
+ // src/components/agent-mark.tsx
3005
+
3006
+ function AgentMark({ agent, className = "", faeAvatarSrc = FAE_AVATAR_DATA_URI }) {
3007
+ return agent === "mingo" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.MingoIcon, { className, "aria-hidden": "true", focusable: "false" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "img", { src: faeAvatarSrc, alt: "", className });
3008
+ }
3009
+
1444
3010
  // src/utils/image-proxy.ts
1445
3011
  function getProxiedImageUrl(imageUrl, options) {
1446
3012
  if (!imageUrl) return null;
1447
- const proxyPrefix = _optionalChain([options, 'optionalAccess', _19 => _19.proxyPrefix]);
1448
- const skipDomains = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _20 => _20.skipDomains]), () => ( []));
1449
- const directHttps = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _21 => _21.directHttps]), () => ( false));
3013
+ const proxyPrefix = _optionalChain([options, 'optionalAccess', _118 => _118.proxyPrefix]);
3014
+ const skipDomains = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _119 => _119.skipDomains]), () => ( []));
3015
+ const directHttps = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _120 => _120.directHttps]), () => ( false));
1450
3016
  if (proxyPrefix && imageUrl.includes(proxyPrefix)) {
1451
3017
  return imageUrl;
1452
3018
  }
@@ -1469,7 +3035,7 @@ function getProxiedImageUrl(imageUrl, options) {
1469
3035
  function urlPathLooksLikeSvg(imageUrl) {
1470
3036
  try {
1471
3037
  return /\.svg$/i.test(new URL(imageUrl).pathname);
1472
- } catch (e3) {
3038
+ } catch (e34) {
1473
3039
  return /\.svg(\?|#|$)/i.test(imageUrl);
1474
3040
  }
1475
3041
  }
@@ -1488,11 +3054,47 @@ function skipsImageOptimizer(url) {
1488
3054
  try {
1489
3055
  const hostname = new URL(url.startsWith("//") ? `https:${url}` : url).hostname.toLowerCase();
1490
3056
  return hostname === "googleusercontent.com" || hostname.endsWith(".googleusercontent.com");
1491
- } catch (e4) {
3057
+ } catch (e35) {
1492
3058
  return false;
1493
3059
  }
1494
3060
  }
1495
3061
 
3062
+ // src/components/icon-display.tsx
3063
+
3064
+ var BRAND_MARK_NAMES = /* @__PURE__ */ new Set(["fae", "mingo"]);
3065
+ function EntityIcon({
3066
+ icon,
3067
+ size: size2 = 20,
3068
+ className
3069
+ }) {
3070
+ if (_optionalChain([icon, 'optionalAccess', _121 => _121.url])) {
3071
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3072
+ _chunkMGHIV4L6cjs.next_image_default,
3073
+ {
3074
+ src: icon.url,
3075
+ alt: "",
3076
+ width: size2,
3077
+ height: size2,
3078
+ className,
3079
+ style: { objectFit: "contain" },
3080
+ unoptimized: true
3081
+ }
3082
+ );
3083
+ }
3084
+ if (_optionalChain([icon, 'optionalAccess', _122 => _122.name]) && BRAND_MARK_NAMES.has(icon.name)) {
3085
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3086
+ "span",
3087
+ {
3088
+ className: `inline-flex${className ? ` ${className}` : ""}`,
3089
+ style: className ? void 0 : { width: size2, height: size2 },
3090
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AgentMark, { agent: icon.name, className: "h-full w-full" })
3091
+ }
3092
+ );
3093
+ }
3094
+ const Glyph = resolveIcon(_nullishCoalesce(_optionalChain([icon, 'optionalAccess', _123 => _123.name]), () => ( void 0)));
3095
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Glyph, { size: size2, className, ..._nullishCoalesce(_optionalChain([icon, 'optionalAccess', _124 => _124.props]), () => ( {})) });
3096
+ }
3097
+
1496
3098
  // src/utils/escape-regexp.ts
1497
3099
  function escapeRegExp(value) {
1498
3100
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -1526,14 +3128,14 @@ function isSameOriginAbsoluteHref(href) {
1526
3128
  if (!/^https?:\/\//i.test(href)) return false;
1527
3129
  try {
1528
3130
  return new URL(href).origin === new URL(window.location.href).origin;
1529
- } catch (e5) {
3131
+ } catch (e36) {
1530
3132
  return false;
1531
3133
  }
1532
3134
  }
1533
3135
  function computeIsNewTab(runtime, href, targetPlatform) {
1534
3136
  if (!href) return false;
1535
3137
  if (runtime.navigation.mode === "embed") return !isSameOriginAbsoluteHref(href);
1536
- return _nullishCoalesce(_optionalChain([runtime, 'access', _22 => _22.navigation, 'access', _23 => _23.decideNewTab, 'optionalCall', _24 => _24({ href, targetPlatform })]), () => ( decideNewTab({
3138
+ return _nullishCoalesce(_optionalChain([runtime, 'access', _125 => _125.navigation, 'access', _126 => _126.decideNewTab, 'optionalCall', _127 => _127({ href, targetPlatform })]), () => ( decideNewTab({
1537
3139
  href,
1538
3140
  targetPlatform,
1539
3141
  currentSource: _nullishCoalesce(runtime.source, () => ( ""))
@@ -1599,7 +3201,7 @@ function EntityAuthorCard({
1599
3201
  renderEmptyAuthor = false,
1600
3202
  className
1601
3203
  }) {
1602
- const hasAuthor = !!_optionalChain([author, 'optionalAccess', _25 => _25.full_name]);
3204
+ const hasAuthor = !!_optionalChain([author, 'optionalAccess', _128 => _128.full_name]);
1603
3205
  if (!hasAuthor && !renderEmptyAuthor) return null;
1604
3206
  const effectiveAuthor = hasAuthor ? author : EMPTY_AUTHOR_PLACEHOLDER;
1605
3207
  const formatted = publishedAt ? formatDate(publishedAt) : "";
@@ -1701,14 +3303,14 @@ function EntityPortraitCard({
1701
3303
  }) {
1702
3304
  const { src, onError: onMediaError } = useCoverImageFallback(imageUrl, placeholderUrl);
1703
3305
  const [measured, setMeasured] = _react3.useState.call(void 0, null);
1704
- const isWide = _optionalChain([measured, 'optionalAccess', _26 => _26.src]) === src ? measured.isWide : null;
3306
+ const isWide = _optionalChain([measured, 'optionalAccess', _129 => _129.src]) === src ? measured.isWide : null;
1705
3307
  const onMediaLoad = (e) => {
1706
3308
  const img = e.currentTarget;
1707
3309
  if (img.naturalWidth > 0 && img.naturalHeight > 0) {
1708
3310
  setMeasured({ src, isWide: img.naturalWidth / img.naturalHeight >= MIN_WIDE_RATIO });
1709
3311
  }
1710
3312
  };
1711
- const edgeColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, isWide === false ? src : null, "var(--color-bg-surface)");
3313
+ const edgeColor = _chunkLM7TXMLUcjs.useImageEdgeColor.call(void 0, isWide === false ? src : null, "var(--color-bg-surface)");
1712
3314
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "a", { href, target, rel, className: _chunk3ATAYP36cjs.cn.call(void 0, "block h-full", className), "aria-label": `Open ${title}`, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Card, { className: _chunk3ATAYP36cjs.cn.call(void 0, CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col gap-6 p-6"), children: [
1713
3315
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1714
3316
  "div",
@@ -1791,7 +3393,7 @@ function EntityPortraitCard({
1791
3393
 
1792
3394
  // src/components/flamingo-logo.tsx
1793
3395
 
1794
- function FlamingoLogo({
3396
+ function FlamingoLogo2({
1795
3397
  className = "",
1796
3398
  color = "var(--ods-flamingo-pink-base)",
1797
3399
  size: size2 = 120,
@@ -1821,7 +3423,7 @@ function FlamingoLogo({
1821
3423
 
1822
3424
  // src/components/openmsp-logo.tsx
1823
3425
 
1824
- function OpenmspLogo({
3426
+ function OpenmspLogo2({
1825
3427
  className = "",
1826
3428
  frontBubbleColor = "#000000",
1827
3429
  innerFrontBubbleColor = "#ffffff",
@@ -1891,7 +3493,7 @@ var PlatformIcon = ({ platform, className }) => {
1891
3493
  switch (platform) {
1892
3494
  case "openmsp":
1893
3495
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1894
- OpenmspLogo,
3496
+ OpenmspLogo2,
1895
3497
  {
1896
3498
  className,
1897
3499
  frontBubbleColor: "currentColor",
@@ -1901,17 +3503,17 @@ var PlatformIcon = ({ platform, className }) => {
1901
3503
  );
1902
3504
  case "flamingo":
1903
3505
  case "flamingo-teaser":
1904
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FlamingoLogo, { className });
3506
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FlamingoLogo2, { className });
1905
3507
  case "openframe":
1906
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.OpenFrameLogo, { className });
3508
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.OpenFrameLogo, { className });
1907
3509
  case "tmcg":
1908
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.MiamiCyberGangLogoFaceOnly, { size: size2, className });
3510
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.MiamiCyberGangLogoFaceOnly, { size: size2, className });
1909
3511
  case "company-hub":
1910
3512
  case "marketing-hub":
1911
3513
  case "product-hub":
1912
3514
  case "revenue-hub":
1913
3515
  case "people-hub":
1914
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FlamingoLogo, { className, fill: "currentColor" });
3516
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FlamingoLogo2, { className, fill: "currentColor" });
1915
3517
  default:
1916
3518
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Globe, { className });
1917
3519
  }
@@ -1921,7 +3523,7 @@ function PlatformBadge({ platform, size: size2 = "sm", showLabel = true, classNa
1921
3523
  return null;
1922
3524
  }
1923
3525
  const sizes = sizeClasses[size2];
1924
- const colors = _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platform.name);
3526
+ const colors = _chunkLM7TXMLUcjs.getPlatformBrandClasses.call(void 0, platform.name);
1925
3527
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1926
3528
  "div",
1927
3529
  {
@@ -1963,7 +3565,7 @@ function AdminContentCard({
1963
3565
  const [loadedUrl, setLoadedUrl] = _react3.useState.call(void 0, null);
1964
3566
  const displayUrl = imageUrl && !imageError ? imageUrl : placeholderUrl;
1965
3567
  const imageLoaded = Boolean(displayUrl) && loadedUrl === displayUrl;
1966
- const imageBgColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, displayUrl || null, "transparent");
3568
+ const imageBgColor = _chunkLM7TXMLUcjs.useImageEdgeColor.call(void 0, displayUrl || null, "transparent");
1967
3569
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: _chunk3ATAYP36cjs.cn.call(void 0, CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col", className), children: [
1968
3570
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative aspect-[3/2] w-full shrink-0 overflow-hidden", style: { backgroundColor: imageBgColor }, children: displayUrl ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1969
3571
  !imageLoaded && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 animate-pulse bg-ods-border/20" }),
@@ -1990,8 +3592,8 @@ function AdminContentCard({
1990
3592
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: _chunk3ATAYP36cjs.cn.call(void 0, "line-clamp-2 break-words text-ods-text-primary text-h3", reserveRows && "min-h-[2lh]"), children: title }),
1991
3593
  (subtitle || reserveRows && subtitleRow) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunk3ATAYP36cjs.cn.call(void 0, "truncate text-ods-text-secondary text-h6", reserveRows && "min-h-[1lh]"), children: subtitle }),
1992
3594
  (summary || reserveRows) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: _chunk3ATAYP36cjs.cn.call(void 0, "line-clamp-2 text-ods-text-secondary text-h6", reserveRows && "min-h-[2lh]"), children: summary }),
1993
- (Number(_optionalChain([platforms, 'optionalAccess', _27 => _27.length])) > 0 || badges || reserveRows) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex flex-wrap items-center gap-2", reserveRows && "min-h-7"), children: [
1994
- _optionalChain([platforms, 'optionalAccess', _28 => _28.map, 'call', _29 => _29((p) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3595
+ (Number(_optionalChain([platforms, 'optionalAccess', _130 => _130.length])) > 0 || badges || reserveRows) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex flex-wrap items-center gap-2", reserveRows && "min-h-7"), children: [
3596
+ _optionalChain([platforms, 'optionalAccess', _131 => _131.map, 'call', _132 => _132((p) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1995
3597
  PlatformBadge,
1996
3598
  {
1997
3599
  platform: { id: p.id || p.platform_id || "", name: p.name, display_name: p.display_name || p.name },
@@ -2134,7 +3736,7 @@ function EmployeeEntryCard({
2134
3736
  ] }) : null,
2135
3737
  meta: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
2136
3738
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 items-center gap-2", children: [
2137
- _optionalChain([entry, 'access', _30 => _30.author, 'optionalAccess', _31 => _31.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3739
+ _optionalChain([entry, 'access', _133 => _133.author, 'optionalAccess', _134 => _134.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2138
3740
  _chunkMGHIV4L6cjs.next_image_default,
2139
3741
  {
2140
3742
  src: _nullishCoalesce(getProxiedImageUrl2(entry.author.avatar_url), () => ( entry.author.avatar_url)),
@@ -2145,7 +3747,7 @@ function EmployeeEntryCard({
2145
3747
  unoptimized: true
2146
3748
  }
2147
3749
  ) : null,
2148
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate", children: _nullishCoalesce(_optionalChain([entry, 'access', _32 => _32.author, 'optionalAccess', _33 => _33.full_name]), () => ( "")) })
3750
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate", children: _nullishCoalesce(_optionalChain([entry, 'access', _135 => _135.author, 'optionalAccess', _136 => _136.full_name]), () => ( "")) })
2149
3751
  ] }),
2150
3752
  dateLabel ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: dateLabel }) : null
2151
3753
  ] }),
@@ -2203,7 +3805,7 @@ var HowIWorkCardSkeleton = EmployeeEntryCardSkeleton;
2203
3805
  // src/components/chat/entity-cards/ai-prompt-card.tsx
2204
3806
 
2205
3807
  function AiPromptCard({ entry, placeholderUrl, actions, anchorProps, className }) {
2206
- const departmentName = _optionalChain([entry, 'access', _34 => _34.department, 'optionalAccess', _35 => _35.name, 'optionalAccess', _36 => _36.trim, 'call', _37 => _37()]);
3808
+ const departmentName = _optionalChain([entry, 'access', _137 => _137.department, 'optionalAccess', _138 => _138.name, 'optionalAccess', _139 => _139.trim, 'call', _140 => _140()]);
2207
3809
  const steps = typeof entry.step_count === "number" ? entry.step_count : 0;
2208
3810
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2209
3811
  EmployeeEntryCard,
@@ -2211,7 +3813,7 @@ function AiPromptCard({ entry, placeholderUrl, actions, anchorProps, className }
2211
3813
  entry,
2212
3814
  dateLabel: entry.published_at ? formatDateUTC(entry.published_at, { fallback: "" }) || null : null,
2213
3815
  extraBadges: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
2214
- departmentName ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DepartmentBadge, { department: { name: departmentName, color: _nullishCoalesce(_optionalChain([entry, 'access', _38 => _38.department, 'optionalAccess', _39 => _39.color]), () => ( null)) } }) : null,
3816
+ departmentName ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DepartmentBadge, { department: { name: departmentName, color: _nullishCoalesce(_optionalChain([entry, 'access', _141 => _141.department, 'optionalAccess', _142 => _142.color]), () => ( null)) } }) : null,
2215
3817
  steps > 1 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EmployeeEntryBadge, { children: `${steps} steps` }) : null
2216
3818
  ] }),
2217
3819
  untitledLabel: "Untitled prompt",
@@ -2248,7 +3850,7 @@ function PageHeading({
2248
3850
  var SENTENCE_MARK = /([.:?!]+)(?=\s|$)/g;
2249
3851
  var ONLY_MARKS = /^\s*[.:?!]+\s*$/;
2250
3852
  function headingAccentClass(platform) {
2251
- return platform ? _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platform).accentText : "text-ods-accent";
3853
+ return platform ? _chunkLM7TXMLUcjs.getPlatformBrandClasses.call(void 0, platform).accentText : "text-ods-accent";
2252
3854
  }
2253
3855
  function accentSentenceMarks(node, platform) {
2254
3856
  return accentMarks(node, headingAccentClass(platform));
@@ -2330,7 +3932,7 @@ function SectionHeading({
2330
3932
  // src/components/features/video-bites-shared.ts
2331
3933
  var DEFAULT_VIDEO_BITES_TITLE = "Key Moments";
2332
3934
  function toStripProfile(p, fallbackSubtitle) {
2333
- if (!_optionalChain([p, 'optionalAccess', _40 => _40.full_name])) return null;
3935
+ if (!_optionalChain([p, 'optionalAccess', _143 => _143.full_name])) return null;
2334
3936
  return {
2335
3937
  name: p.full_name,
2336
3938
  avatarUrl: _nullishCoalesce(p.avatar_url, () => ( null)),
@@ -2350,6 +3952,95 @@ function sortBitesByFeaturedAtDesc(a, b) {
2350
3952
  return new Date(b.featured_at).getTime() - new Date(a.featured_at).getTime();
2351
3953
  }
2352
3954
 
3955
+ // src/components/features/video-hover-preview.tsx
3956
+
3957
+
3958
+ function VideoHoverPreviewSurface({
3959
+ url,
3960
+ posterUrl = null,
3961
+ active,
3962
+ playerMounted,
3963
+ isClone = false,
3964
+ badge = "play",
3965
+ fit,
3966
+ posterSizes = "234px",
3967
+ preload,
3968
+ hideMutedBadge,
3969
+ onMutedFallbackChange,
3970
+ previewHandleRef,
3971
+ mutedIntent = false,
3972
+ continuation = false,
3973
+ startTime,
3974
+ autoPlay = false,
3975
+ startMuted = false,
3976
+ onEnded,
3977
+ className
3978
+ }) {
3979
+ const previewUrl = toMuxPreviewUrl(url);
3980
+ const gateControlled = playerMounted !== void 0;
3981
+ const rootElRef = _react3.useRef.call(void 0, null);
3982
+ const [isNear, setIsNear] = _react3.useState.call(void 0, false);
3983
+ _react3.useEffect.call(void 0, () => {
3984
+ if (gateControlled) return void 0;
3985
+ const el = rootElRef.current;
3986
+ if (!el || typeof IntersectionObserver === "undefined") return void 0;
3987
+ const io = new IntersectionObserver((entries) => setIsNear(_nullishCoalesce(_optionalChain([entries, 'access', _144 => _144[0], 'optionalAccess', _145 => _145.isIntersecting]), () => ( false))), {
3988
+ rootMargin: _chunkLM7TXMLUcjs.NEAR_VIEWPORT_ROOT_MARGIN
3989
+ });
3990
+ io.observe(el);
3991
+ return () => io.disconnect();
3992
+ }, [gateControlled]);
3993
+ const showMedia = continuation || (gateControlled ? playerMounted : isNear);
3994
+ const { src: posterSrc, onError: onPosterError } = useCoverImageFallback(posterUrl);
3995
+ const facadeSkipped = preload === "none" && !posterSrc;
3996
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rootElRef, className: _chunk3ATAYP36cjs.cn.call(void 0, "absolute inset-0", className), inert: isClone || void 0, children: showMedia ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
3997
+ posterSrc ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3998
+ _chunkMGHIV4L6cjs.next_image_default,
3999
+ {
4000
+ src: posterSrc,
4001
+ alt: "",
4002
+ fill: true,
4003
+ sizes: posterSizes,
4004
+ unoptimized: true,
4005
+ onError: onPosterError,
4006
+ className: "object-cover"
4007
+ }
4008
+ ) : facadeSkipped ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-ods-card" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Video, { kind: "file", url: previewUrl, firstFrameOnly: true, layout: "fill", fit }),
4009
+ badge === "play" && !active && !continuation && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoPlayBadge, { className: "absolute inset-0 z-10 m-auto" }),
4010
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4011
+ "div",
4012
+ {
4013
+ className: "absolute inset-0",
4014
+ style: { "--media-background-color": "transparent" },
4015
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4016
+ Video,
4017
+ {
4018
+ kind: "file",
4019
+ url: previewUrl,
4020
+ poster: posterUrl,
4021
+ ...continuation ? {
4022
+ startTime,
4023
+ autoPlay: autoPlay && startMuted,
4024
+ startMuted,
4025
+ autoPlayUnmuted: autoPlay && !startMuted
4026
+ } : { playWhenHovered: active },
4027
+ chromeless: true,
4028
+ layout: "fill",
4029
+ fit,
4030
+ preload,
4031
+ mutedIntent,
4032
+ hideMutedBadge,
4033
+ onMutedFallbackChange,
4034
+ onEnded,
4035
+ playerHandleRef: previewHandleRef
4036
+ },
4037
+ continuation ? "continuation" : "preview"
4038
+ )
4039
+ }
4040
+ )
4041
+ ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-ods-card" }) });
4042
+ }
4043
+
2353
4044
  // src/components/shared/product-release/product-release-card.tsx
2354
4045
 
2355
4046
 
@@ -2372,7 +4063,7 @@ function ProductReleaseCard({
2372
4063
  changelogCounts
2373
4064
  }) {
2374
4065
  if (size2 === "lg") {
2375
- const totalChangelog = (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _41 => _41.features]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _42 => _42.fixes]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _43 => _43.improvements]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _44 => _44.breaking]), () => ( 0)));
4066
+ const totalChangelog = (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _146 => _146.features]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _147 => _147.fixes]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _148 => _148.improvements]), () => ( 0))) + (_nullishCoalesce(_optionalChain([changelogCounts, 'optionalAccess', _149 => _149.breaking]), () => ( 0)));
2376
4067
  const valueCells = [
2377
4068
  releaseType && releaseTypeBadgeColor ? {
2378
4069
  value: releaseType.toUpperCase(),
@@ -2391,7 +4082,7 @@ function ProductReleaseCard({
2391
4082
  uppercase: false
2392
4083
  } : { value: "\u2014", label: "Released", uppercase: false }
2393
4084
  ];
2394
- const effectiveAuthor = _optionalChain([author, 'optionalAccess', _45 => _45.full_name]) ? author : { full_name: "\u2014", avatar_url: null, job_title: "Unknown" };
4085
+ const effectiveAuthor = _optionalChain([author, 'optionalAccess', _150 => _150.full_name]) ? author : { full_name: "\u2014", avatar_url: null, job_title: "Unknown" };
2395
4086
  const gridColsClass = "content-md:grid-cols-4";
2396
4087
  const dividerClass = "border-b content-md:border-b-0 content-md:border-r border-ods-border";
2397
4088
  const interactive = !!anchorProps || !!onClick;
@@ -2734,10 +4425,10 @@ function buildProductReleaseCardProps(item) {
2734
4425
  job_title: release.author.job_title
2735
4426
  } : void 0,
2736
4427
  changelogCounts: {
2737
- features: _nullishCoalesce(_optionalChain([release, 'access', _46 => _46.features_added, 'optionalAccess', _47 => _47.length]), () => ( 0)),
2738
- fixes: _nullishCoalesce(_optionalChain([release, 'access', _48 => _48.bugs_fixed, 'optionalAccess', _49 => _49.length]), () => ( 0)),
2739
- improvements: _nullishCoalesce(_optionalChain([release, 'access', _50 => _50.improvements, 'optionalAccess', _51 => _51.length]), () => ( 0)),
2740
- breaking: _nullishCoalesce(_optionalChain([release, 'access', _52 => _52.breaking_changes, 'optionalAccess', _53 => _53.length]), () => ( 0))
4428
+ features: _nullishCoalesce(_optionalChain([release, 'access', _151 => _151.features_added, 'optionalAccess', _152 => _152.length]), () => ( 0)),
4429
+ fixes: _nullishCoalesce(_optionalChain([release, 'access', _153 => _153.bugs_fixed, 'optionalAccess', _154 => _154.length]), () => ( 0)),
4430
+ improvements: _nullishCoalesce(_optionalChain([release, 'access', _155 => _155.improvements, 'optionalAccess', _156 => _156.length]), () => ( 0)),
4431
+ breaking: _nullishCoalesce(_optionalChain([release, 'access', _157 => _157.breaking_changes, 'optionalAccess', _158 => _158.length]), () => ( 0))
2741
4432
  }
2742
4433
  };
2743
4434
  }
@@ -2748,7 +4439,7 @@ var SAME_ORIGIN_PROBE = "https://_sameorigin_.invalid";
2748
4439
  function isSameOriginPath(candidate) {
2749
4440
  try {
2750
4441
  return new URL(candidate, SAME_ORIGIN_PROBE).origin === SAME_ORIGIN_PROBE;
2751
- } catch (e6) {
4442
+ } catch (e37) {
2752
4443
  return false;
2753
4444
  }
2754
4445
  }
@@ -2782,7 +4473,7 @@ function safeHref(url) {
2782
4473
  if (!SAFE_URL_SCHEMES.includes(parsed.protocol)) return null;
2783
4474
  if ((parsed.protocol === "https:" || parsed.protocol === "http:") && !parsed.hostname) return null;
2784
4475
  return trimmed;
2785
- } catch (e7) {
4476
+ } catch (e38) {
2786
4477
  return null;
2787
4478
  }
2788
4479
  }
@@ -2811,7 +4502,7 @@ function useEntityCardPlaceholder({
2811
4502
  siteName = "",
2812
4503
  aspect = "wide"
2813
4504
  }) {
2814
- const derived = _chunkRKV5B7EUcjs.useOgPlaceholderUrl.call(void 0, { title, siteName, aspect });
4505
+ const derived = _chunkLM7TXMLUcjs.useOgPlaceholderUrl.call(void 0, { title, siteName, aspect });
2815
4506
  return placeholderUrl !== void 0 ? placeholderUrl : derived;
2816
4507
  }
2817
4508
 
@@ -2869,7 +4560,7 @@ function BlogCard({
2869
4560
  const { src: displayImage, onError: onImageError } = useCoverImageFallback(post.featured_image, placeholderUrl);
2870
4561
  if (size2 === "sm") {
2871
4562
  const dateStr2 = post.published_at ? formatDateWithTimezone(post.published_at, null, "medium") : "";
2872
- const firstCategory = _optionalChain([post, 'access', _54 => _54.categories, 'optionalAccess', _55 => _55.find, 'call', _56 => _56((c) => c && c.name), 'optionalAccess', _57 => _57.name]);
4563
+ const firstCategory = _optionalChain([post, 'access', _159 => _159.categories, 'optionalAccess', _160 => _160.find, 'call', _161 => _161((c) => c && c.name), 'optionalAccess', _162 => _162.name]);
2873
4564
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2874
4565
  "a",
2875
4566
  {
@@ -3008,6 +4699,7 @@ function BlogCard({
3008
4699
 
3009
4700
  // src/components/chat/entity-cards/case-study-card.tsx
3010
4701
 
4702
+
3011
4703
  function CaseStudyCardSkeleton({ size: size2 = "default" }) {
3012
4704
  if (size2 === "sm") {
3013
4705
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -3034,6 +4726,13 @@ function CaseStudyCardSkeleton({ size: size2 = "default" }) {
3034
4726
  ] })
3035
4727
  ] });
3036
4728
  }
4729
+ function caseStudyHighlight(study) {
4730
+ if (study.highlight_video_url) {
4731
+ return { url: study.highlight_video_url, posterUrl: _nullishCoalesce(study.highlight_video_thumbnail, () => ( null)) };
4732
+ }
4733
+ const bite = (_nullishCoalesce(study.video_bites, () => ( []))).filter((candidate) => candidate.featured === true && candidate.url).sort(sortBitesByFeaturedAtDesc)[0];
4734
+ return bite ? { url: bite.url, posterUrl: _nullishCoalesce(bite.thumbnail_url, () => ( null)) } : null;
4735
+ }
3037
4736
  function CaseStudyCard({
3038
4737
  study,
3039
4738
  href,
@@ -3043,8 +4742,11 @@ function CaseStudyCard({
3043
4742
  placeholderUrl: placeholderUrlProp,
3044
4743
  size: size2 = "default",
3045
4744
  showTypeBadge = true,
4745
+ mediaMounted,
4746
+ onNavigate,
3046
4747
  className
3047
4748
  }) {
4749
+ const [hovered, setHovered] = _react3.useState.call(void 0, false);
3048
4750
  const { target, rel } = useEntityCardLink({
3049
4751
  href,
3050
4752
  targetPlatform,
@@ -3063,7 +4765,7 @@ function CaseStudyCard({
3063
4765
  _chunkMGHIV4L6cjs.next_image_default,
3064
4766
  {
3065
4767
  src: coverImage,
3066
- alt: `${_optionalChain([study, 'access', _58 => _58.msp, 'optionalAccess', _59 => _59.name]) || study.title} cover`,
4768
+ alt: `${_optionalChain([study, 'access', _163 => _163.msp, 'optionalAccess', _164 => _164.name]) || study.title} cover`,
3067
4769
  className: "object-contain",
3068
4770
  fill: true,
3069
4771
  sizes: "56px",
@@ -3073,11 +4775,81 @@ function CaseStudyCard({
3073
4775
  ) : null }),
3074
4776
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_TEXT_COL, children: [
3075
4777
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE, children: study.title }) }),
3076
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUBTITLE, children: [_optionalChain([study, 'access', _60 => _60.msp, 'optionalAccess', _61 => _61.name]), _optionalChain([study, 'access', _62 => _62.user, 'optionalAccess', _63 => _63.full_name])].filter(Boolean).join(" \xB7 ") || "Case study" }) }),
4778
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUBTITLE, children: [_optionalChain([study, 'access', _165 => _165.msp, 'optionalAccess', _166 => _166.name]), _optionalChain([study, 'access', _167 => _167.user, 'optionalAccess', _168 => _168.full_name])].filter(Boolean).join(" \xB7 ") || "Case study" }) }),
3077
4779
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUMMARY, children: study.summary || COMPACT_CARD_ROW_FILLER }) })
3078
4780
  ] })
3079
4781
  ] });
3080
4782
  }
4783
+ if (size2 === "menu") {
4784
+ const preview = caseStudyHighlight(study);
4785
+ const videoUrl = _nullishCoalesce(_optionalChain([preview, 'optionalAccess', _169 => _169.url]), () => ( null));
4786
+ const hasAnyVideo = !!(videoUrl || study.main_video_url);
4787
+ const poster = study.main_video_thumbnail || study.featured_image || _optionalChain([preview, 'optionalAccess', _170 => _170.posterUrl]) || null;
4788
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
4789
+ _chunkLLRGR4I5cjs.next_link_default,
4790
+ {
4791
+ href,
4792
+ target,
4793
+ rel,
4794
+ onClick: onNavigate,
4795
+ onPointerEnter: () => setHovered(true),
4796
+ onPointerLeave: () => setHovered(false),
4797
+ onFocus: () => setHovered(true),
4798
+ onBlur: () => setHovered(false),
4799
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
4800
+ // `group/card` is what the shared play glyph accents on.
4801
+ "group/card group flex min-w-0 flex-col gap-[var(--spacing-system-sf)] rounded-xl border border-ods-border bg-ods-bg p-[var(--spacing-system-mf)] text-ods-text-primary transition-colors hover:bg-ods-bg-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent",
4802
+ className
4803
+ ),
4804
+ children: [
4805
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "pointer-events-none relative block aspect-video w-full shrink-0 overflow-hidden rounded-md bg-ods-bg", children: videoUrl ? (
4806
+ // The shared hover surface, filled the way the walkthrough card fills
4807
+ // its own 16:9 slot (`cover`): an upright cut is cropped to the slot,
4808
+ // never letterboxed. Sound on hover, muted when the browser blocks it.
4809
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4810
+ VideoHoverPreviewSurface,
4811
+ {
4812
+ url: videoUrl,
4813
+ posterUrl: poster,
4814
+ active: hovered,
4815
+ playerMounted: mediaMounted,
4816
+ fit: "cover",
4817
+ posterSizes: "360px"
4818
+ }
4819
+ )
4820
+ ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
4821
+ (_nullishCoalesce(poster, () => ( placeholderUrl))) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4822
+ _chunkMGHIV4L6cjs.next_image_default,
4823
+ {
4824
+ src: _nullishCoalesce(_nullishCoalesce(poster, () => ( placeholderUrl)), () => ( "")),
4825
+ alt: "",
4826
+ className: "object-cover",
4827
+ fill: true,
4828
+ sizes: "360px",
4829
+ unoptimized: true,
4830
+ onError: hideOnError
4831
+ }
4832
+ ),
4833
+ hasAnyVideo && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CardHoverPlay, { size: "md" })
4834
+ ] }) }),
4835
+ _optionalChain([study, 'access', _171 => _171.msp, 'optionalAccess', _172 => _172.name]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-xsf)] text-ods-text-secondary text-h6", children: [
4836
+ study.msp.icon_url && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4837
+ EntityIcon,
4838
+ {
4839
+ icon: { url: study.msp.icon_url },
4840
+ size: 20,
4841
+ className: "size-5 shrink-0 rounded object-contain"
4842
+ }
4843
+ ),
4844
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 truncate", children: study.msp.name })
4845
+ ] }),
4846
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "line-clamp-2 text-h6", children: study.title }),
4847
+ _optionalChain([study, 'access', _173 => _173.user, 'optionalAccess', _174 => _174.full_name]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-ods-text-muted text-h6", children: study.user.job_title ? `${study.user.full_name}, ${study.user.job_title}` : study.user.full_name }),
4848
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mt-auto text-ods-accent text-h6", children: hasAnyVideo ? "Watch the story" : "Read the story" })
4849
+ ]
4850
+ }
4851
+ );
4852
+ }
3081
4853
  if (size2 === "portrait") {
3082
4854
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3083
4855
  EntityPortraitCard,
@@ -3088,13 +4860,13 @@ function CaseStudyCard({
3088
4860
  typeLabel: showTypeBadge ? "Case Study" : void 0,
3089
4861
  imageUrl: study.featured_image,
3090
4862
  placeholderUrl,
3091
- imageAlt: _optionalChain([study, 'access', _64 => _64.msp, 'optionalAccess', _65 => _65.name]) || study.title,
4863
+ imageAlt: _optionalChain([study, 'access', _175 => _175.msp, 'optionalAccess', _176 => _176.name]) || study.title,
3092
4864
  title: study.title,
3093
4865
  person: {
3094
- name: _optionalChain([study, 'access', _66 => _66.user, 'optionalAccess', _67 => _67.full_name]) || "Anonymous",
3095
- avatarUrl: _optionalChain([study, 'access', _68 => _68.user, 'optionalAccess', _69 => _69.avatar_url]),
3096
- subtitle: _nullishCoalesce(_optionalChain([study, 'access', _70 => _70.msp, 'optionalAccess', _71 => _71.name]), () => ( null)),
3097
- iconOverlayUrl: _nullishCoalesce(_optionalChain([study, 'access', _72 => _72.msp, 'optionalAccess', _73 => _73.icon_url]), () => ( null))
4866
+ name: _optionalChain([study, 'access', _177 => _177.user, 'optionalAccess', _178 => _178.full_name]) || "Anonymous",
4867
+ avatarUrl: _optionalChain([study, 'access', _179 => _179.user, 'optionalAccess', _180 => _180.avatar_url]),
4868
+ subtitle: _nullishCoalesce(_optionalChain([study, 'access', _181 => _181.msp, 'optionalAccess', _182 => _182.name]), () => ( null)),
4869
+ iconOverlayUrl: _nullishCoalesce(_optionalChain([study, 'access', _183 => _183.msp, 'optionalAccess', _184 => _184.icon_url]), () => ( null))
3098
4870
  },
3099
4871
  className
3100
4872
  }
@@ -3105,7 +4877,7 @@ function CaseStudyCard({
3105
4877
  _chunkMGHIV4L6cjs.next_image_default,
3106
4878
  {
3107
4879
  src: coverImage,
3108
- alt: _optionalChain([study, 'access', _74 => _74.msp, 'optionalAccess', _75 => _75.name]) || study.title,
4880
+ alt: _optionalChain([study, 'access', _185 => _185.msp, 'optionalAccess', _186 => _186.name]) || study.title,
3109
4881
  className: "h-full w-full object-cover",
3110
4882
  sizes: "(min-width: 1545px) 515px, (min-width: 1280px) 33vw, (min-width: 800px) 50vw, 100vw",
3111
4883
  fill: true,
@@ -3116,18 +4888,18 @@ function CaseStudyCard({
3116
4888
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[72px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "line-clamp-3 break-words text-ods-text-primary text-h4", children: study.title }) }),
3117
4889
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[60px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full min-w-0 items-center gap-3", children: [
3118
4890
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative h-12 w-12 shrink-0", children: [
3119
- _optionalChain([study, 'access', _76 => _76.user, 'optionalAccess', _77 => _77.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4891
+ _optionalChain([study, 'access', _187 => _187.user, 'optionalAccess', _188 => _188.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3120
4892
  _chunkMGHIV4L6cjs.next_image_default,
3121
4893
  {
3122
4894
  src: study.user.avatar_url,
3123
- alt: _optionalChain([study, 'access', _78 => _78.user, 'optionalAccess', _79 => _79.full_name]) || "User",
4895
+ alt: _optionalChain([study, 'access', _189 => _189.user, 'optionalAccess', _190 => _190.full_name]) || "User",
3124
4896
  className: "h-12 w-12 rounded-full border border-ods-border bg-ods-bg object-cover",
3125
4897
  width: 48,
3126
4898
  height: 48,
3127
4899
  unoptimized: true
3128
4900
  }
3129
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h4", children: (_optionalChain([study, 'access', _80 => _80.user, 'optionalAccess', _81 => _81.full_name]) || "A").charAt(0).toUpperCase() }) }),
3130
- _optionalChain([study, 'access', _82 => _82.msp, 'optionalAccess', _83 => _83.icon_url]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4901
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h4", children: (_optionalChain([study, 'access', _191 => _191.user, 'optionalAccess', _192 => _192.full_name]) || "A").charAt(0).toUpperCase() }) }),
4902
+ _optionalChain([study, 'access', _193 => _193.msp, 'optionalAccess', _194 => _194.icon_url]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3131
4903
  _chunkMGHIV4L6cjs.next_image_default,
3132
4904
  {
3133
4905
  src: study.msp.icon_url,
@@ -3141,13 +4913,13 @@ function CaseStudyCard({
3141
4913
  ] }),
3142
4914
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1", children: [
3143
4915
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "truncate text-ods-text-primary text-h6", children: [
3144
- _optionalChain([study, 'access', _84 => _84.user, 'optionalAccess', _85 => _85.full_name]) || "Anonymous",
3145
- _optionalChain([study, 'access', _86 => _86.msp, 'optionalAccess', _87 => _87.name]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary", children: [
4916
+ _optionalChain([study, 'access', _195 => _195.user, 'optionalAccess', _196 => _196.full_name]) || "Anonymous",
4917
+ _optionalChain([study, 'access', _197 => _197.msp, 'optionalAccess', _198 => _198.name]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary", children: [
3146
4918
  " \u2022 ",
3147
4919
  study.msp.name
3148
4920
  ] })
3149
4921
  ] }),
3150
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-ods-text-secondary text-h6", children: _optionalChain([study, 'access', _88 => _88.user, 'optionalAccess', _89 => _89.job_title]) || "\xA0" })
4922
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-ods-text-secondary text-h6", children: _optionalChain([study, 'access', _199 => _199.user, 'optionalAccess', _200 => _200.job_title]) || "\xA0" })
3151
4923
  ] })
3152
4924
  ] }) })
3153
4925
  ] }) });
@@ -3229,7 +5001,7 @@ function CustomerInterviewCard({
3229
5001
  ] }),
3230
5002
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_TEXT_COL, children: [
3231
5003
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE, children: interview.title }) }),
3232
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUBTITLE, children: [_optionalChain([interview, 'access', _90 => _90.user, 'optionalAccess', _91 => _91.full_name]), _optionalChain([interview, 'access', _92 => _92.msp, 'optionalAccess', _93 => _93.name])].filter(Boolean).join(" \xB7 ") || "Customer interview" }) }),
5004
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUBTITLE, children: [_optionalChain([interview, 'access', _201 => _201.user, 'optionalAccess', _202 => _202.full_name]), _optionalChain([interview, 'access', _203 => _203.msp, 'optionalAccess', _204 => _204.name])].filter(Boolean).join(" \xB7 ") || "Customer interview" }) }),
3233
5005
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUMMARY, children: interview.video_summary || COMPACT_CARD_ROW_FILLER }) })
3234
5006
  ] })
3235
5007
  ] });
@@ -3247,10 +5019,10 @@ function CustomerInterviewCard({
3247
5019
  imageAlt: interview.title,
3248
5020
  title: interview.title,
3249
5021
  person: {
3250
- name: _optionalChain([interview, 'access', _94 => _94.user, 'optionalAccess', _95 => _95.full_name]) || "Customer",
3251
- avatarUrl: _optionalChain([interview, 'access', _96 => _96.user, 'optionalAccess', _97 => _97.avatar_url]),
3252
- subtitle: _nullishCoalesce(_optionalChain([interview, 'access', _98 => _98.msp, 'optionalAccess', _99 => _99.name]), () => ( null)),
3253
- iconOverlayUrl: _nullishCoalesce(_optionalChain([interview, 'access', _100 => _100.msp, 'optionalAccess', _101 => _101.icon_url]), () => ( null))
5022
+ name: _optionalChain([interview, 'access', _205 => _205.user, 'optionalAccess', _206 => _206.full_name]) || "Customer",
5023
+ avatarUrl: _optionalChain([interview, 'access', _207 => _207.user, 'optionalAccess', _208 => _208.avatar_url]),
5024
+ subtitle: _nullishCoalesce(_optionalChain([interview, 'access', _209 => _209.msp, 'optionalAccess', _210 => _210.name]), () => ( null)),
5025
+ iconOverlayUrl: _nullishCoalesce(_optionalChain([interview, 'access', _211 => _211.msp, 'optionalAccess', _212 => _212.icon_url]), () => ( null))
3254
5026
  },
3255
5027
  className
3256
5028
  }
@@ -3276,18 +5048,18 @@ function CustomerInterviewCard({
3276
5048
  interview.video_summary && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "line-clamp-3 text-ods-text-secondary text-h6", children: interview.video_summary }) }),
3277
5049
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-auto flex h-[60px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full min-w-0 items-center gap-3", children: [
3278
5050
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative h-12 w-12 shrink-0", children: [
3279
- _optionalChain([interview, 'access', _102 => _102.user, 'optionalAccess', _103 => _103.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5051
+ _optionalChain([interview, 'access', _213 => _213.user, 'optionalAccess', _214 => _214.avatar_url]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3280
5052
  _chunkMGHIV4L6cjs.next_image_default,
3281
5053
  {
3282
5054
  src: interview.user.avatar_url,
3283
- alt: _optionalChain([interview, 'access', _104 => _104.user, 'optionalAccess', _105 => _105.full_name]) || "Customer",
5055
+ alt: _optionalChain([interview, 'access', _215 => _215.user, 'optionalAccess', _216 => _216.full_name]) || "Customer",
3284
5056
  className: "h-12 w-12 rounded-full border border-ods-border bg-ods-bg object-cover",
3285
5057
  width: 48,
3286
5058
  height: 48,
3287
5059
  unoptimized: true
3288
5060
  }
3289
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h4", children: (_optionalChain([interview, 'access', _106 => _106.user, 'optionalAccess', _107 => _107.full_name]) || "A").charAt(0).toUpperCase() }) }),
3290
- _optionalChain([interview, 'access', _108 => _108.msp, 'optionalAccess', _109 => _109.icon_url]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5061
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h4", children: (_optionalChain([interview, 'access', _217 => _217.user, 'optionalAccess', _218 => _218.full_name]) || "A").charAt(0).toUpperCase() }) }),
5062
+ _optionalChain([interview, 'access', _219 => _219.msp, 'optionalAccess', _220 => _220.icon_url]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3291
5063
  _chunkMGHIV4L6cjs.next_image_default,
3292
5064
  {
3293
5065
  src: interview.msp.icon_url,
@@ -3301,13 +5073,13 @@ function CustomerInterviewCard({
3301
5073
  ] }),
3302
5074
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1", children: [
3303
5075
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "truncate text-ods-text-primary text-h6", children: [
3304
- _optionalChain([interview, 'access', _110 => _110.user, 'optionalAccess', _111 => _111.full_name]) || "Anonymous",
3305
- _optionalChain([interview, 'access', _112 => _112.msp, 'optionalAccess', _113 => _113.name]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary", children: [
5076
+ _optionalChain([interview, 'access', _221 => _221.user, 'optionalAccess', _222 => _222.full_name]) || "Anonymous",
5077
+ _optionalChain([interview, 'access', _223 => _223.msp, 'optionalAccess', _224 => _224.name]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary", children: [
3306
5078
  " \u2022 ",
3307
5079
  interview.msp.name
3308
5080
  ] })
3309
5081
  ] }),
3310
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-ods-text-secondary text-h6", children: _optionalChain([interview, 'access', _114 => _114.user, 'optionalAccess', _115 => _115.job_title]) || " " })
5082
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-ods-text-secondary text-h6", children: _optionalChain([interview, 'access', _225 => _225.user, 'optionalAccess', _226 => _226.job_title]) || " " })
3311
5083
  ] })
3312
5084
  ] }) })
3313
5085
  ] }) });
@@ -3316,7 +5088,7 @@ function CustomerInterviewCard({
3316
5088
  // src/components/chat/types/entities/investor-update.ts
3317
5089
  function formatInvestorUpdatePeriod(start, end, options) {
3318
5090
  if (!start && !end) return "";
3319
- const fmt = (d) => formatDateWithTimezone(d, null, _optionalChain([options, 'optionalAccess', _116 => _116.monthFormat]) === "long" ? "monthYear" : "monthYearShort") || "?";
5091
+ const fmt = (d) => formatDateWithTimezone(d, null, _optionalChain([options, 'optionalAccess', _227 => _227.monthFormat]) === "long" ? "monthYear" : "monthYearShort") || "?";
3320
5092
  const s = start ? fmt(start) : "?";
3321
5093
  const e = end ? fmt(end) : "?";
3322
5094
  return `${s} - ${e}`;
@@ -3427,7 +5199,7 @@ function InvestorUpdateCard({
3427
5199
  imageUrl: update.featured_image,
3428
5200
  placeholderUrl,
3429
5201
  title: update.title || `Update #${update.update_number || "?"}`,
3430
- summary: _optionalChain([update, 'access', _117 => _117.strategic_update, 'optionalAccess', _118 => _118.slice, 'call', _119 => _119(0, 120)]) || _optionalChain([update, 'access', _120 => _120.content, 'optionalAccess', _121 => _121.slice, 'call', _122 => _122(0, 120)]) || "No description",
5202
+ summary: _optionalChain([update, 'access', _228 => _228.strategic_update, 'optionalAccess', _229 => _229.slice, 'call', _230 => _230(0, 120)]) || _optionalChain([update, 'access', _231 => _231.content, 'optionalAccess', _232 => _232.slice, 'call', _233 => _233(0, 120)]) || "No description",
3431
5203
  badges: update.update_number ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "rounded bg-ods-accent/10 px-2 py-0.5 text-xs font-medium text-ods-accent", children: [
3432
5204
  "#",
3433
5205
  update.update_number
@@ -3629,7 +5401,7 @@ function OnboardingGuideCard({
3629
5401
  const compactCover = coverImage || placeholderUrl || null;
3630
5402
  const hasVideoCover = !guide.featured_image && !!guide.main_video_thumbnail;
3631
5403
  const summary2 = stripMarkdownPreview(guide.video_summary || guide.content || "");
3632
- const author = _optionalChain([guide, 'access', _123 => _123.author, 'optionalAccess', _124 => _124.full_name, 'optionalAccess', _125 => _125.trim, 'call', _126 => _126()]) || "";
5404
+ const author = _optionalChain([guide, 'access', _234 => _234.author, 'optionalAccess', _235 => _235.full_name, 'optionalAccess', _236 => _236.trim, 'call', _237 => _237()]) || "";
3633
5405
  const subtitleParts = [`Step ${guide.step_order}`, guide.section, author].filter(
3634
5406
  (s) => typeof s === "string" && s.length > 0
3635
5407
  );
@@ -3683,7 +5455,7 @@ function OnboardingGuideCard({
3683
5455
 
3684
5456
  // src/components/chat/utils/agent-status-message.ts
3685
5457
  function getStatusColorScheme(status) {
3686
- const s = _optionalChain([status, 'optionalAccess', _127 => _127.toLowerCase, 'call', _128 => _128()]) || "";
5458
+ const s = _optionalChain([status, 'optionalAccess', _238 => _238.toLowerCase, 'call', _239 => _239()]) || "";
3687
5459
  switch (status) {
3688
5460
  case "completed":
3689
5461
  case "success":
@@ -3777,7 +5549,7 @@ function RoadmapVoteButton({
3777
5549
  color,
3778
5550
  className
3779
5551
  }) {
3780
- const Icon = voteType === "up" ? _chunkQZVSJF2Kcjs.ThumbsUpIcon : _chunkQZVSJF2Kcjs.ThumbsDownIcon;
5552
+ const Icon = voteType === "up" ? _chunkLLSUVPQCcjs.ThumbsUpIcon : _chunkLLSUVPQCcjs.ThumbsDownIcon;
3781
5553
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3782
5554
  _chunkDFQYAYBHcjs.Button,
3783
5555
  {
@@ -3934,7 +5706,7 @@ function RoadmapCard({
3934
5706
  const compactHref = safeHref(_nullishCoalesce(href, () => ( null)));
3935
5707
  const hasVotes = (_nullishCoalesce(item.upvotes, () => ( 0))) > 0 || (_nullishCoalesce(item.downvotes, () => ( 0))) > 0;
3936
5708
  const hasFigma = !!item.figmaUrl;
3937
- const hasScreenshots = (_nullishCoalesce(_optionalChain([item, 'access', _129 => _129.screenshots, 'optionalAccess', _130 => _130.length]), () => ( 0))) > 0;
5709
+ const hasScreenshots = (_nullishCoalesce(_optionalChain([item, 'access', _240 => _240.screenshots, 'optionalAccess', _241 => _241.length]), () => ( 0))) > 0;
3938
5710
  const typeLabel = getTaskTypeLabel(item.customItemId);
3939
5711
  const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
3940
5712
  const body = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -3953,7 +5725,7 @@ function RoadmapCard({
3953
5725
  unoptimized: true,
3954
5726
  className: "h-8 w-8 object-contain"
3955
5727
  }
3956
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "uppercase text-ods-text-secondary text-h6", children: _optionalChain([item, 'access', _131 => _131.title, 'optionalAccess', _132 => _132.substring, 'call', _133 => _133(0, 2)]) || "??" })
5728
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "uppercase text-ods-text-secondary text-h6", children: _optionalChain([item, 'access', _242 => _242.title, 'optionalAccess', _243 => _243.substring, 'call', _244 => _244(0, 2)]) || "??" })
3957
5729
  }
3958
5730
  ),
3959
5731
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_TEXT_COL, children: [
@@ -3994,14 +5766,14 @@ function RoadmapCard({
3994
5766
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _nullishCoalesce(item.downvotes, () => ( 0)) })
3995
5767
  ] })
3996
5768
  ] }) : null,
3997
- hasFigma ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "hidden shrink-0 items-center sm:flex", title: "Has Figma prototype", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.FigmaIcon, { className: "h-3 w-3" }) }) : null,
5769
+ hasFigma ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "hidden shrink-0 items-center sm:flex", title: "Has Figma prototype", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.FigmaIcon, { className: "h-3 w-3" }) }) : null,
3998
5770
  hasScreenshots ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
3999
5771
  "span",
4000
5772
  {
4001
5773
  className: "hidden shrink-0 items-center gap-0.5 text-h6 sm:flex",
4002
5774
  title: `${item.screenshots.length} screenshot${item.screenshots.length === 1 ? "" : "s"}`,
4003
5775
  children: [
4004
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.ImageIcon, { className: "h-3 w-3" }),
5776
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.ImageIcon, { className: "h-3 w-3" }),
4005
5777
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: item.screenshots.length })
4006
5778
  ]
4007
5779
  }
@@ -4037,7 +5809,7 @@ function RoadmapCard({
4037
5809
  unoptimized: true,
4038
5810
  className: "object-contain p-1"
4039
5811
  }
4040
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-xs font-medium uppercase text-ods-text-secondary", children: _optionalChain([item, 'access', _134 => _134.title, 'optionalAccess', _135 => _135.substring, 'call', _136 => _136(0, 2)]) || "??" }) }),
5812
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-xs font-medium uppercase text-ods-text-secondary", children: _optionalChain([item, 'access', _245 => _245.title, 'optionalAccess', _246 => _246.substring, 'call', _247 => _247(0, 2)]) || "??" }) }),
4041
5813
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
4042
5814
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-[48px] items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "line-clamp-2 flex-1 text-ods-text-primary text-h3", children: item.title }) }),
4043
5815
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-[20px] items-center", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "truncate text-ods-text-secondary text-h5", children: [
@@ -4100,7 +5872,7 @@ function RoadmapCard({
4100
5872
  variant: "outline",
4101
5873
  size: "small-legacy",
4102
5874
  onClick: () => setShowScreenshots(true),
4103
- leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.ImageIcon, { className: "h-5 w-5" })
5875
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.ImageIcon, { className: "h-5 w-5" })
4104
5876
  }
4105
5877
  ),
4106
5878
  (() => {
@@ -4112,7 +5884,7 @@ function RoadmapCard({
4112
5884
  size: "small-legacy",
4113
5885
  openInNewTab: true,
4114
5886
  href: figmaSafe,
4115
- leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.FigmaIcon, { className: "h-5 w-5" })
5887
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.FigmaIcon, { className: "h-5 w-5" })
4116
5888
  }
4117
5889
  ) : null;
4118
5890
  })(),
@@ -4138,10 +5910,10 @@ var MEDIA_TYPE = {
4138
5910
  VIDEO: "video"
4139
5911
  };
4140
5912
  function isVideoMedia(media) {
4141
- return _optionalChain([media, 'optionalAccess', _137 => _137.media_type]) === MEDIA_TYPE.VIDEO;
5913
+ return _optionalChain([media, 'optionalAccess', _248 => _248.media_type]) === MEDIA_TYPE.VIDEO;
4142
5914
  }
4143
5915
  function isImageMedia(media) {
4144
- return _optionalChain([media, 'optionalAccess', _138 => _138.media_type]) === MEDIA_TYPE.IMAGE;
5916
+ return _optionalChain([media, 'optionalAccess', _249 => _249.media_type]) === MEDIA_TYPE.IMAGE;
4145
5917
  }
4146
5918
  function isPublishableMediaType(mediaType) {
4147
5919
  return mediaType === MEDIA_TYPE.VIDEO || mediaType === MEDIA_TYPE.IMAGE;
@@ -4241,7 +6013,7 @@ function programItemToStripProfile(item) {
4241
6013
  const fromAuthor = toStripProfile(item.author);
4242
6014
  if (fromAuthor) return fromAuthor;
4243
6015
  const host = Array.isArray(item.hosts) ? item.hosts[0] : null;
4244
- if (!_optionalChain([host, 'optionalAccess', _139 => _139.name])) return null;
6016
+ if (!_optionalChain([host, 'optionalAccess', _250 => _250.name])) return null;
4245
6017
  return toStripProfile({ full_name: host.name, avatar_url: _nullishCoalesce(host.avatar_url, () => ( null)) });
4246
6018
  }
4247
6019
 
@@ -4417,10 +6189,10 @@ function ProgramEditorialCard({
4417
6189
  playable,
4418
6190
  className
4419
6191
  }) {
4420
- const edgeColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, feature ? cover : null, "transparent");
6192
+ const edgeColor = _chunkLM7TXMLUcjs.useImageEdgeColor.call(void 0, feature ? cover : null, "transparent");
4421
6193
  const meta = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: EDITORIAL_META_ROW, children: [
4422
6194
  date && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-flamingo-pink", children: date }),
4423
- [typeMeta, feature ? null : _optionalChain([profile, 'optionalAccess', _140 => _140.name])].filter((part) => !!part).map((part) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-s)] text-ods-text-secondary", children: [
6195
+ [typeMeta, feature ? null : _optionalChain([profile, 'optionalAccess', _251 => _251.name])].filter((part) => !!part).map((part) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-s)] text-ods-text-secondary", children: [
4424
6196
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", children: "\u2022" }),
4425
6197
  part
4426
6198
  ] }, part))
@@ -4594,7 +6366,7 @@ function ProgramCard({
4594
6366
  const itemDate = compactDate;
4595
6367
  const compactCover = coverImage || placeholderUrl || null;
4596
6368
  const typeMeta = compactTypeMetaValue;
4597
- const subtitleParts = [itemDate, typeMeta, _optionalChain([config, 'access', _141 => _141.labels, 'optionalAccess', _142 => _142.singular])].filter(
6369
+ const subtitleParts = [itemDate, typeMeta, _optionalChain([config, 'access', _252 => _252.labels, 'optionalAccess', _253 => _253.singular])].filter(
4598
6370
  (s) => typeof s === "string" && s.length > 0
4599
6371
  );
4600
6372
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "a", { href, target, rel, className: _chunk3ATAYP36cjs.cn.call(void 0, COMPACT_CARD_OUTER, "group", className), children: [
@@ -5144,4 +6916,25 @@ function buildListUrl(contentRefType, ids, base = "") {
5144
6916
 
5145
6917
 
5146
6918
 
5147
- exports.FloatingTooltip = FloatingTooltip; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.VENDOR_CLASSIFICATIONS = VENDOR_CLASSIFICATIONS; exports.OPENFRAME_CLASSIFICATIONS = OPENFRAME_CLASSIFICATIONS; exports.isVendorClassification = isVendorClassification; exports.isOpenFrameClassification = isOpenFrameClassification; exports.formatDate = formatDate; exports.formatNumber = formatNumber; exports.formatPrice = formatPrice; exports.formatBytes = formatBytes; exports.formatBytesShort = formatBytesShort; exports.formatFileSize = formatFileSize; exports.formatLargeNumber = formatLargeNumber; exports.formatAbbreviatedNumber = formatAbbreviatedNumber; exports.nameInitials = nameInitials; exports.personInitials = personInitials; exports.personFirstName = personFirstName; exports.singleInitial = singleInitial; exports.formatDurationMMSS = formatDurationMMSS; exports.formatDurationCompact = formatDurationCompact; exports.VIEWER_TIMEZONE = VIEWER_TIMEZONE; exports.formatDateWithTimezone = formatDateWithTimezone; exports.formatDateTimeYmd = formatDateTimeYmd; exports.formatTimeWithTimezone = formatTimeWithTimezone; exports.formatProgramDate = formatProgramDate; exports.formatProgramDateRange = formatProgramDateRange; exports.isOrderedRange = isOrderedRange; exports.formatDurationFromRange = formatDurationFromRange; exports.formatDateUTC = formatDateUTC; exports.formatEntryMonthUTC = formatEntryMonthUTC; exports.formatLegalDate = formatLegalDate; exports.formatCurrency = formatCurrency; exports.formatPercent = formatPercent; exports.formatWholeDollars = formatWholeDollars; exports.formatCompactMetric = formatCompactMetric; exports.getTrendColors = getTrendColors; exports.formatDateRange = formatDateRange; exports.formatDateTimeAt = formatDateTimeAt; exports.formatDurationFromMs = formatDurationFromMs; exports.formatDuration = formatDuration; exports.titleCaseFromSlug = titleCaseFromSlug; exports.formatUnderscoreText = formatUnderscoreText; exports.stripHtml = stripHtml; exports.formatClassification = formatClassification; exports.formatPricingModel = formatPricingModel; exports.formatBioText = formatBioText; exports.formatProgramTimeRange = formatProgramTimeRange; exports.formatWebinarTimeMeta = formatWebinarTimeMeta; exports.SquareAvatar = SquareAvatar; exports.InteractiveCard = InteractiveCard; exports.Modal = Modal; exports.ModalContent = ModalContent; exports.ModalHeader = ModalHeader; exports.ModalTitle = ModalTitle; exports.ModalFooter = ModalFooter; exports.ImageGalleryModal = ImageGalleryModal; exports.VideoPlayBadge = VideoPlayBadge; exports.CardHoverPlay = CardHoverPlay; exports.VideoUnmuteGlyph = VideoUnmuteGlyph; exports.statusBadgeVariants = statusBadgeVariants; exports.genBadgeBgOpacity = genBadgeBgOpacity; exports.generationTierFromLabel = generationTierFromLabel; exports.StatusBadge = StatusBadge; exports.BADGE_PALETTE = BADGE_PALETTE; exports.isBadgePaletteKey = isBadgePaletteKey; exports.pickBadgePaletteColor = pickBadgePaletteColor; exports.PaletteBadge = PaletteBadge; exports.DepartmentBadge = DepartmentBadge; exports.AvatarStack = AvatarStack; exports.getProxiedImageUrl = getProxiedImageUrl; exports.urlPathLooksLikeSvg = urlPathLooksLikeSvg; exports.shouldProxyImage = shouldProxyImage; exports.generateImageSizes = generateImageSizes; exports.skipsImageOptimizer = skipsImageOptimizer; exports.escapeRegExp = escapeRegExp; exports.isCrossOriginUrl = isCrossOriginUrl; exports.decideNewTab = decideNewTab; exports.isSameOriginAbsoluteHref = isSameOriginAbsoluteHref; exports.computeIsNewTab = computeIsNewTab; exports.newTabAnchorAttrs = newTabAnchorAttrs; exports.buildAnchorProps = buildAnchorProps; exports.EMPTY_AUTHOR_PLACEHOLDER = EMPTY_AUTHOR_PLACEHOLDER; exports.EntityMetadataValueCell = EntityMetadataValueCell; exports.EntityMetadataAuthorCell = EntityMetadataAuthorCell; exports.EntityAuthorCard = EntityAuthorCard; exports.BlogImagePlaceholder = BlogImagePlaceholder; exports.CONTENT_CARD_FRAME_CLASS = CONTENT_CARD_FRAME_CLASS; exports.CONTENT_CARD_SKELETON_FRAME_CLASS = CONTENT_CARD_SKELETON_FRAME_CLASS; exports.ContentCardFrame = ContentCardFrame; exports.useCoverImageFallback = useCoverImageFallback; exports.hideOnError = hideOnError; exports.EntityPortraitCard = EntityPortraitCard; exports.FlamingoLogo = FlamingoLogo; exports.PlatformBadge = PlatformBadge; exports.AdminContentCard = AdminContentCard; exports.ADMIN_CONTENT_CARD_GRID_CLASS = ADMIN_CONTENT_CARD_GRID_CLASS; exports.AdminContentCardSkeleton = AdminContentCardSkeleton; exports.AdminContentCardGrid = AdminContentCardGrid; exports.getProxiedImageUrl2 = getProxiedImageUrl2; exports.EmployeeEntryBadge = EmployeeEntryBadge; exports.EmployeeEntryCard = EmployeeEntryCard; exports.EmployeeEntryCardSkeleton = EmployeeEntryCardSkeleton; exports.WhatIShippedCard = WhatIShippedCard; exports.WhatIShippedCardSkeleton = WhatIShippedCardSkeleton; exports.HowIWorkCard = HowIWorkCard; exports.HowIWorkCardSkeleton = HowIWorkCardSkeleton; exports.AiPromptCard = AiPromptCard; exports.AiPromptCardSkeleton = AiPromptCardSkeleton; exports.PAGE_HEADING_CLASS = PAGE_HEADING_CLASS; exports.SECTION_HEADING_CLASS = SECTION_HEADING_CLASS; exports.PageHeading = PageHeading; exports.headingAccentClass = headingAccentClass; exports.accentSentenceMarks = accentSentenceMarks; exports.SectionHeading = SectionHeading; exports.DEFAULT_VIDEO_BITES_TITLE = DEFAULT_VIDEO_BITES_TITLE; exports.toStripProfile = toStripProfile; exports.sortBitesByCreatedAtDesc = sortBitesByCreatedAtDesc; exports.sortBitesByFeaturedAtDesc = sortBitesByFeaturedAtDesc; exports.ProductReleaseCard = ProductReleaseCard; exports.ProductReleaseCardSkeleton = ProductReleaseCardSkeleton; exports.formatReleaseDate = formatReleaseDate; exports.formatDateShort = formatDateShort; exports.formatDateSlashUTC = formatDateSlashUTC; exports.releaseTypeToBadgeColor = releaseTypeToBadgeColor; exports.resolveReleaseCover = resolveReleaseCover; exports.defaultBuildProductReleaseCardProps = defaultBuildProductReleaseCardProps; exports.buildProductReleaseCardProps = buildProductReleaseCardProps; exports.UNSAFE_URL_CHARS = UNSAFE_URL_CHARS; exports.COMPACT_CARD_OUTER = COMPACT_CARD_OUTER; exports.COMPACT_CARD_OUTER_STATIC = COMPACT_CARD_OUTER_STATIC; exports.COMPACT_CARD_SKELETON_OUTER = COMPACT_CARD_SKELETON_OUTER; exports.COMPACT_CARD_IMAGE_SLOT = COMPACT_CARD_IMAGE_SLOT; exports.COMPACT_CARD_SKELETON_IMAGE_SLOT = COMPACT_CARD_SKELETON_IMAGE_SLOT; exports.COMPACT_CARD_ICON_SLOT = COMPACT_CARD_ICON_SLOT; exports.COMPACT_CARD_TEXT_COL = COMPACT_CARD_TEXT_COL; exports.COMPACT_CARD_TITLE_ROW = COMPACT_CARD_TITLE_ROW; exports.COMPACT_CARD_META_ROW_BOX = COMPACT_CARD_META_ROW_BOX; exports.COMPACT_CARD_TITLE = COMPACT_CARD_TITLE; exports.COMPACT_CARD_SUBTITLE = COMPACT_CARD_SUBTITLE; exports.COMPACT_CARD_SUMMARY = COMPACT_CARD_SUMMARY; exports.COMPACT_CARD_META_ROW = COMPACT_CARD_META_ROW; exports.COMPACT_CARD_ROW_FILLER = COMPACT_CARD_ROW_FILLER; exports.safeHref = safeHref; exports.useEntityCardLink = useEntityCardLink; exports.BlogCardSkeleton = BlogCardSkeleton; exports.BlogCard = BlogCard; exports.CaseStudyCardSkeleton = CaseStudyCardSkeleton; exports.CaseStudyCard = CaseStudyCard; exports.CustomerInterviewCardSkeleton = CustomerInterviewCardSkeleton; exports.CustomerInterviewCard = CustomerInterviewCard; exports.formatInvestorUpdatePeriod = formatInvestorUpdatePeriod; exports.InvestorUpdateCardSkeleton = InvestorUpdateCardSkeleton; exports.InvestorUpdateCard = InvestorUpdateCard; exports.OnboardingGuideCardSkeleton = OnboardingGuideCardSkeleton; exports.OnboardingGuideCard = OnboardingGuideCard; exports.getStatusColorScheme = getStatusColorScheme; exports.CUSTOM_ITEM_ID = CUSTOM_ITEM_ID; exports.getTaskTypeLabel = getTaskTypeLabel; exports.RoadmapVoteButton = RoadmapVoteButton; exports.TaskTypeIcon = TaskTypeIcon; exports.RoadmapCardSkeleton = RoadmapCardSkeleton; exports.RoadmapCard = RoadmapCard; exports.MEDIA_TYPE = MEDIA_TYPE; exports.isVideoMedia = isVideoMedia; exports.isImageMedia = isImageMedia; exports.isPublishableMediaType = isPublishableMediaType; exports.partitionMediaByType = partitionMediaByType; exports.IMAGE_FILE_ACCEPT = IMAGE_FILE_ACCEPT; exports.MEDIA_FILE_ACCEPT = MEDIA_FILE_ACCEPT; exports.fileMediaType = fileMediaType; exports.mediaNameKey = mediaNameKey; exports.fileContentKey = fileContentKey; exports.programStr = programStr; exports.programDateInstant = programDateInstant; exports.webinarTiming = webinarTiming; exports.programMetaLine = programMetaLine; exports.eventAudience = eventAudience; exports.programMetaFormatters = programMetaFormatters; exports.PROGRAM_META_RENDERERS = PROGRAM_META_RENDERERS; exports.programItemToStripProfile = programItemToStripProfile; exports.ProgramCardSkeleton = ProgramCardSkeleton; exports.ProgramCard = ProgramCard; exports.TRUST_FRAMEWORK_MONITORING = TRUST_FRAMEWORK_MONITORING; exports.trustFrameworkMonitoringEntry = trustFrameworkMonitoringEntry; exports.trustFrameworkBadge = trustFrameworkBadge; exports.TRUST_CENTER_SECTIONS = TRUST_CENTER_SECTIONS; exports.TRUST_CENTER_TITLE = TRUST_CENTER_TITLE; exports.TRUST_CENTER_TAGLINE = TRUST_CENTER_TAGLINE; exports.TRUST_CENTER_API_PATH = TRUST_CENTER_API_PATH; exports.TRUST_CENTER_CACHE_SECONDS = TRUST_CENTER_CACHE_SECONDS; exports.TRUST_CENTER_DOCUMENT_CACHE_SECONDS = TRUST_CENTER_DOCUMENT_CACHE_SECONDS; exports.TRUST_CENTER_CARD_ID = TRUST_CENTER_CARD_ID; exports.TRUST_CENTER_DOCUMENT_TYPE = TRUST_CENTER_DOCUMENT_TYPE; exports.TRUST_CENTER_PAGE_PATH = TRUST_CENTER_PAGE_PATH; exports.isTrustCenterMonitored = isTrustCenterMonitored; exports.trustFrameworksSummary = trustFrameworksSummary; exports.trustCenterDocumentUrl = trustCenterDocumentUrl; exports.TRUST_CENTER_SEARCH_PARAM = TRUST_CENTER_SEARCH_PARAM; exports.TRUST_CENTER_SEARCH_MAX_CHARS = TRUST_CENTER_SEARCH_MAX_CHARS; exports.TRUST_CENTER_SEARCH_DEBOUNCE_MS = TRUST_CENTER_SEARCH_DEBOUNCE_MS; exports.TRUST_CENTER_DOMAIN_PARAM = TRUST_CENTER_DOMAIN_PARAM; exports.normalizeTrustControlQuery = normalizeTrustControlQuery; exports.trustControlQueryMatcher = trustControlQueryMatcher; exports.filterTrustControlDomains = filterTrustControlDomains; exports.trustCenterControlsUrl = trustCenterControlsUrl; exports.extractItems = extractItems; exports.extractItemId = extractItemId; exports.extractCardItems = extractCardItems; exports.canonicalContentRefType = canonicalContentRefType; exports.buildListUrl = buildListUrl;
6919
+
6920
+
6921
+
6922
+
6923
+
6924
+
6925
+
6926
+
6927
+
6928
+
6929
+
6930
+
6931
+
6932
+
6933
+
6934
+
6935
+
6936
+
6937
+
6938
+
6939
+
6940
+ exports.FloatingTooltip = FloatingTooltip; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.VENDOR_CLASSIFICATIONS = VENDOR_CLASSIFICATIONS; exports.OPENFRAME_CLASSIFICATIONS = OPENFRAME_CLASSIFICATIONS; exports.isVendorClassification = isVendorClassification; exports.isOpenFrameClassification = isOpenFrameClassification; exports.formatDate = formatDate; exports.formatNumber = formatNumber; exports.formatPrice = formatPrice; exports.formatBytes = formatBytes; exports.formatBytesShort = formatBytesShort; exports.formatFileSize = formatFileSize; exports.formatLargeNumber = formatLargeNumber; exports.formatAbbreviatedNumber = formatAbbreviatedNumber; exports.nameInitials = nameInitials; exports.personInitials = personInitials; exports.personFirstName = personFirstName; exports.singleInitial = singleInitial; exports.formatDurationMMSS = formatDurationMMSS; exports.formatDurationCompact = formatDurationCompact; exports.VIEWER_TIMEZONE = VIEWER_TIMEZONE; exports.formatDateWithTimezone = formatDateWithTimezone; exports.formatDateTimeYmd = formatDateTimeYmd; exports.formatTimeWithTimezone = formatTimeWithTimezone; exports.formatProgramDate = formatProgramDate; exports.formatProgramDateRange = formatProgramDateRange; exports.isOrderedRange = isOrderedRange; exports.formatDurationFromRange = formatDurationFromRange; exports.formatDateUTC = formatDateUTC; exports.formatEntryMonthUTC = formatEntryMonthUTC; exports.formatLegalDate = formatLegalDate; exports.formatCurrency = formatCurrency; exports.formatPercent = formatPercent; exports.formatWholeDollars = formatWholeDollars; exports.formatCompactMetric = formatCompactMetric; exports.getTrendColors = getTrendColors; exports.formatDateRange = formatDateRange; exports.formatDateTimeAt = formatDateTimeAt; exports.formatDurationFromMs = formatDurationFromMs; exports.formatDuration = formatDuration; exports.titleCaseFromSlug = titleCaseFromSlug; exports.formatUnderscoreText = formatUnderscoreText; exports.stripHtml = stripHtml; exports.formatClassification = formatClassification; exports.formatPricingModel = formatPricingModel; exports.formatBioText = formatBioText; exports.formatProgramTimeRange = formatProgramTimeRange; exports.formatWebinarTimeMeta = formatWebinarTimeMeta; exports.SquareAvatar = SquareAvatar; exports.InteractiveCard = InteractiveCard; exports.Modal = Modal; exports.ModalContent = ModalContent; exports.ModalHeader = ModalHeader; exports.ModalTitle = ModalTitle; exports.ModalFooter = ModalFooter; exports.ImageGalleryModal = ImageGalleryModal; exports.fetchPriorityProp = fetchPriorityProp; exports.MUX_STREAM_ORIGIN = MUX_STREAM_ORIGIN; exports.MUX_IMAGE_ORIGIN = MUX_IMAGE_ORIGIN; exports.saveDataEnabled = saveDataEnabled; exports.useVideoOriginPreconnect = useVideoOriginPreconnect; exports.useVideoWarmup = useVideoWarmup; exports.VideoPlayBadge = VideoPlayBadge; exports.CardHoverPlay = CardHoverPlay; exports.VideoUnmuteGlyph = VideoUnmuteGlyph; exports.extractYouTubeId = extractYouTubeId; exports.VIDEO_PLAYBACK_FAILED_EVENT = VIDEO_PLAYBACK_FAILED_EVENT; exports.Video = Video; exports.statusBadgeVariants = statusBadgeVariants; exports.genBadgeBgOpacity = genBadgeBgOpacity; exports.generationTierFromLabel = generationTierFromLabel; exports.StatusBadge = StatusBadge; exports.BADGE_PALETTE = BADGE_PALETTE; exports.isBadgePaletteKey = isBadgePaletteKey; exports.pickBadgePaletteColor = pickBadgePaletteColor; exports.PaletteBadge = PaletteBadge; exports.DepartmentBadge = DepartmentBadge; exports.AvatarStack = AvatarStack; exports.ICON_REGISTRY = ICON_REGISTRY; exports.normalizeIconKey = normalizeIconKey; exports.getIconComponent = getIconComponent; exports.getDynamicIcon = getDynamicIcon; exports.ICON_ALIASES = ICON_ALIASES; exports.brandLogoForName = brandLogoForName; exports.resolveIcon = resolveIcon; exports.ICON_OPTIONS = ICON_OPTIONS; exports.FAE_AVATAR_DATA_URI = FAE_AVATAR_DATA_URI; exports.AgentMark = AgentMark; exports.getProxiedImageUrl = getProxiedImageUrl; exports.urlPathLooksLikeSvg = urlPathLooksLikeSvg; exports.shouldProxyImage = shouldProxyImage; exports.generateImageSizes = generateImageSizes; exports.skipsImageOptimizer = skipsImageOptimizer; exports.EntityIcon = EntityIcon; exports.escapeRegExp = escapeRegExp; exports.isCrossOriginUrl = isCrossOriginUrl; exports.decideNewTab = decideNewTab; exports.isSameOriginAbsoluteHref = isSameOriginAbsoluteHref; exports.computeIsNewTab = computeIsNewTab; exports.newTabAnchorAttrs = newTabAnchorAttrs; exports.buildAnchorProps = buildAnchorProps; exports.EMPTY_AUTHOR_PLACEHOLDER = EMPTY_AUTHOR_PLACEHOLDER; exports.EntityMetadataValueCell = EntityMetadataValueCell; exports.EntityMetadataAuthorCell = EntityMetadataAuthorCell; exports.EntityAuthorCard = EntityAuthorCard; exports.BlogImagePlaceholder = BlogImagePlaceholder; exports.CONTENT_CARD_FRAME_CLASS = CONTENT_CARD_FRAME_CLASS; exports.CONTENT_CARD_SKELETON_FRAME_CLASS = CONTENT_CARD_SKELETON_FRAME_CLASS; exports.ContentCardFrame = ContentCardFrame; exports.useCoverImageFallback = useCoverImageFallback; exports.hideOnError = hideOnError; exports.EntityPortraitCard = EntityPortraitCard; exports.FlamingoLogo = FlamingoLogo2; exports.PlatformBadge = PlatformBadge; exports.AdminContentCard = AdminContentCard; exports.ADMIN_CONTENT_CARD_GRID_CLASS = ADMIN_CONTENT_CARD_GRID_CLASS; exports.AdminContentCardSkeleton = AdminContentCardSkeleton; exports.AdminContentCardGrid = AdminContentCardGrid; exports.getProxiedImageUrl2 = getProxiedImageUrl2; exports.EmployeeEntryBadge = EmployeeEntryBadge; exports.EmployeeEntryCard = EmployeeEntryCard; exports.EmployeeEntryCardSkeleton = EmployeeEntryCardSkeleton; exports.WhatIShippedCard = WhatIShippedCard; exports.WhatIShippedCardSkeleton = WhatIShippedCardSkeleton; exports.HowIWorkCard = HowIWorkCard; exports.HowIWorkCardSkeleton = HowIWorkCardSkeleton; exports.AiPromptCard = AiPromptCard; exports.AiPromptCardSkeleton = AiPromptCardSkeleton; exports.PAGE_HEADING_CLASS = PAGE_HEADING_CLASS; exports.SECTION_HEADING_CLASS = SECTION_HEADING_CLASS; exports.PageHeading = PageHeading; exports.headingAccentClass = headingAccentClass; exports.accentSentenceMarks = accentSentenceMarks; exports.SectionHeading = SectionHeading; exports.DEFAULT_VIDEO_BITES_TITLE = DEFAULT_VIDEO_BITES_TITLE; exports.toStripProfile = toStripProfile; exports.sortBitesByCreatedAtDesc = sortBitesByCreatedAtDesc; exports.sortBitesByFeaturedAtDesc = sortBitesByFeaturedAtDesc; exports.VideoHoverPreviewSurface = VideoHoverPreviewSurface; exports.ProductReleaseCard = ProductReleaseCard; exports.ProductReleaseCardSkeleton = ProductReleaseCardSkeleton; exports.formatReleaseDate = formatReleaseDate; exports.formatDateShort = formatDateShort; exports.formatDateSlashUTC = formatDateSlashUTC; exports.releaseTypeToBadgeColor = releaseTypeToBadgeColor; exports.resolveReleaseCover = resolveReleaseCover; exports.defaultBuildProductReleaseCardProps = defaultBuildProductReleaseCardProps; exports.buildProductReleaseCardProps = buildProductReleaseCardProps; exports.UNSAFE_URL_CHARS = UNSAFE_URL_CHARS; exports.COMPACT_CARD_OUTER = COMPACT_CARD_OUTER; exports.COMPACT_CARD_OUTER_STATIC = COMPACT_CARD_OUTER_STATIC; exports.COMPACT_CARD_SKELETON_OUTER = COMPACT_CARD_SKELETON_OUTER; exports.COMPACT_CARD_IMAGE_SLOT = COMPACT_CARD_IMAGE_SLOT; exports.COMPACT_CARD_SKELETON_IMAGE_SLOT = COMPACT_CARD_SKELETON_IMAGE_SLOT; exports.COMPACT_CARD_ICON_SLOT = COMPACT_CARD_ICON_SLOT; exports.COMPACT_CARD_TEXT_COL = COMPACT_CARD_TEXT_COL; exports.COMPACT_CARD_TITLE_ROW = COMPACT_CARD_TITLE_ROW; exports.COMPACT_CARD_META_ROW_BOX = COMPACT_CARD_META_ROW_BOX; exports.COMPACT_CARD_TITLE = COMPACT_CARD_TITLE; exports.COMPACT_CARD_SUBTITLE = COMPACT_CARD_SUBTITLE; exports.COMPACT_CARD_SUMMARY = COMPACT_CARD_SUMMARY; exports.COMPACT_CARD_META_ROW = COMPACT_CARD_META_ROW; exports.COMPACT_CARD_ROW_FILLER = COMPACT_CARD_ROW_FILLER; exports.safeHref = safeHref; exports.useEntityCardLink = useEntityCardLink; exports.BlogCardSkeleton = BlogCardSkeleton; exports.BlogCard = BlogCard; exports.CaseStudyCardSkeleton = CaseStudyCardSkeleton; exports.CaseStudyCard = CaseStudyCard; exports.CustomerInterviewCardSkeleton = CustomerInterviewCardSkeleton; exports.CustomerInterviewCard = CustomerInterviewCard; exports.formatInvestorUpdatePeriod = formatInvestorUpdatePeriod; exports.InvestorUpdateCardSkeleton = InvestorUpdateCardSkeleton; exports.InvestorUpdateCard = InvestorUpdateCard; exports.OnboardingGuideCardSkeleton = OnboardingGuideCardSkeleton; exports.OnboardingGuideCard = OnboardingGuideCard; exports.getStatusColorScheme = getStatusColorScheme; exports.CUSTOM_ITEM_ID = CUSTOM_ITEM_ID; exports.getTaskTypeLabel = getTaskTypeLabel; exports.RoadmapVoteButton = RoadmapVoteButton; exports.TaskTypeIcon = TaskTypeIcon; exports.RoadmapCardSkeleton = RoadmapCardSkeleton; exports.RoadmapCard = RoadmapCard; exports.MEDIA_TYPE = MEDIA_TYPE; exports.isVideoMedia = isVideoMedia; exports.isImageMedia = isImageMedia; exports.isPublishableMediaType = isPublishableMediaType; exports.partitionMediaByType = partitionMediaByType; exports.IMAGE_FILE_ACCEPT = IMAGE_FILE_ACCEPT; exports.MEDIA_FILE_ACCEPT = MEDIA_FILE_ACCEPT; exports.fileMediaType = fileMediaType; exports.mediaNameKey = mediaNameKey; exports.fileContentKey = fileContentKey; exports.programStr = programStr; exports.programDateInstant = programDateInstant; exports.webinarTiming = webinarTiming; exports.programMetaLine = programMetaLine; exports.eventAudience = eventAudience; exports.programMetaFormatters = programMetaFormatters; exports.PROGRAM_META_RENDERERS = PROGRAM_META_RENDERERS; exports.programItemToStripProfile = programItemToStripProfile; exports.ProgramCardSkeleton = ProgramCardSkeleton; exports.ProgramCard = ProgramCard; exports.TRUST_FRAMEWORK_MONITORING = TRUST_FRAMEWORK_MONITORING; exports.trustFrameworkMonitoringEntry = trustFrameworkMonitoringEntry; exports.trustFrameworkBadge = trustFrameworkBadge; exports.TRUST_CENTER_SECTIONS = TRUST_CENTER_SECTIONS; exports.TRUST_CENTER_TITLE = TRUST_CENTER_TITLE; exports.TRUST_CENTER_TAGLINE = TRUST_CENTER_TAGLINE; exports.TRUST_CENTER_API_PATH = TRUST_CENTER_API_PATH; exports.TRUST_CENTER_CACHE_SECONDS = TRUST_CENTER_CACHE_SECONDS; exports.TRUST_CENTER_DOCUMENT_CACHE_SECONDS = TRUST_CENTER_DOCUMENT_CACHE_SECONDS; exports.TRUST_CENTER_CARD_ID = TRUST_CENTER_CARD_ID; exports.TRUST_CENTER_DOCUMENT_TYPE = TRUST_CENTER_DOCUMENT_TYPE; exports.TRUST_CENTER_PAGE_PATH = TRUST_CENTER_PAGE_PATH; exports.isTrustCenterMonitored = isTrustCenterMonitored; exports.trustFrameworksSummary = trustFrameworksSummary; exports.trustCenterDocumentUrl = trustCenterDocumentUrl; exports.TRUST_CENTER_SEARCH_PARAM = TRUST_CENTER_SEARCH_PARAM; exports.TRUST_CENTER_SEARCH_MAX_CHARS = TRUST_CENTER_SEARCH_MAX_CHARS; exports.TRUST_CENTER_SEARCH_DEBOUNCE_MS = TRUST_CENTER_SEARCH_DEBOUNCE_MS; exports.TRUST_CENTER_DOMAIN_PARAM = TRUST_CENTER_DOMAIN_PARAM; exports.normalizeTrustControlQuery = normalizeTrustControlQuery; exports.trustControlQueryMatcher = trustControlQueryMatcher; exports.filterTrustControlDomains = filterTrustControlDomains; exports.trustCenterControlsUrl = trustCenterControlsUrl; exports.extractItems = extractItems; exports.extractItemId = extractItemId; exports.extractCardItems = extractCardItems; exports.canonicalContentRefType = canonicalContentRefType; exports.buildListUrl = buildListUrl;